Latest 0.0.5
Homepage https://github.com/pujiaxin33/JXPagingView
License MIT
Platforms ios 8.0, requires ARC
Authors

OC版本现已加入豪华套餐,使用方法与swift版本相同

类似微博主页、简书主页、QQ联系人页面等效果。多页面嵌套,既可以上下滑动,也可以左右滑动切换页面。支持HeaderView悬浮、支持下拉刷新、上拉加载更多。

功能特点

  • 手势交互更自然;
  • 悬浮的categoryView支持更多效果,而且支持自定义扩展;
  • 封装性更好,不用关心内部实现,只需要实现对应delegate方法即可;
  • 支持像使用普通UITableView一样,添加首页下拉刷新功能;
  • 支持列表视图添加下拉刷新、上拉加载更多;

预览

效果 预览图
头图缩放 Zoom
主页下拉刷新&列表上拉加载更多 Refresh
列表下拉刷新 Refresh
导航栏隐藏 Refresh

头图缩放说明

头图缩放原理,有不明白的可以参考我写的:JXTableViewZoomHeaderImageView 一看就懂了。

悬浮HeaderView说明

悬浮的HeaderView,用的是我写的:JXCategoryView 几乎实现了所有主流效果,而且非常容易自定义扩展,强烈推荐阅读。

列表下拉刷新说明

需要使用JXPagingListRefreshView类(是JXPagingView的子类)

安装

手动

Swift版本: Clone代码,拖入JXPagingView-Swift文件夹,使用JXPagingView类;

OC版本: Clone代码,拖入JXPagerView文件夹,使用JXPagerView类;

CocoaPods

  • Swift版本

    target '<Your Target Name>' do
    pod 'JXPagingView/Paging'
    end
  • OC版本
    target '<Your Target Name>' do
    pod 'JXPagingView/Pager'
    end

Swift与OC的仓库地址不一样,请注意选择!

pod install之前最好pod repo udpate一下!

使用

主要遵从JXPagingViewDelegateJXPagingViewListViewDelegate协议就可以实现了,逻辑非常简单明了。具体实现细节请查阅源码。

1.实例化JXPagingView

    let pagingView = JXPagingView(delegate: self)
    self.view.addSubview(pagingView)

2.实现JXPagingViewDelegate

@objc public protocol JXPagingViewDelegate: NSObjectProtocol {
    /// tableHeaderView的高度
    ///
    /// - Parameter pagingView: JXPagingViewView
    /// - Returns: height
    func tableHeaderViewHeight(in pagingView: JXPagingView) -> CGFloat

    /// 返回tableHeaderView
    ///
    /// - Parameter pagingView: JXPagingViewView
    /// - Returns: view
    func tableHeaderView(in pagingView: JXPagingView) -> UIView

    /// 返回悬浮HeaderView的高度。
    ///
    /// - Parameter pagingView: JXPagingViewView
    /// - Returns: height
    func heightForPinSectionHeader(in pagingView: JXPagingView) -> CGFloat

    /// 返回悬浮HeaderView。我用的是自己封装的JXCategoryView(Github:https://github.com/pujiaxin33/JXCategoryView),你也可以选择其他的三方库或者自己写
    ///
    /// - Parameter pagingView: JXPagingViewView
    /// - Returns: view
    func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView

    /// 返回listViews,数组的item需要是UIView的子类,且要遵循JXPagingViewListViewDelegate。
    /// 数组item要求返回一个UIView而不是一个UIScrollView,因为列表的UIScrollView一般是被包装到一个view里面,里面会处理数据源和其他逻辑。
    ///
    /// - Parameter pagingView: JXPagingViewView
    /// - Returns: listViews
    func listViews(in pagingView: JXPagingView) -> [JXPagingViewListViewDelegate & UIView]

    /// mainTableView的滚动回调,用于实现头图跟随缩放
    ///
    /// - Parameter scrollView: JXPagingViewMainTableView
    @objc optional func mainTableViewDidScroll(_ scrollView: UIScrollView)
}

3.让底部listView遵从JXPagingViewListViewDelegate协议

/// 返回listView内部持有的UIScrollView或UITableView或UICollectionView
/// 主要用于mainTableView已经显示了header,listView的contentOffset需要重置时,内部需要访问到外部传入进来的listView内的scrollView
@objc public protocol JXPagingViewListViewDelegate: NSObjectProtocol {
    func listScrollView() -> UIScrollView
}

///当listView内部持有的UIScrollView或UITableView或UICollectionView的代理方法`scrollViewDidScroll`回调时,需要调用该代理方法传入的callback
func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
    self.listViewDidScrollCallback = callback
}

//self.listViewDidScrollCallback在listView的scrollViewDidScroll代理方法里面回调
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    self.listViewDidScrollCallback?(scrollView)
}

OC版本使用类似,只是类名及相关API更改为JXPagerView,具体细节请查看源码。

补充

有不明白的地方,建议多看下源码。再有疑问的,欢迎提Issue交流🤝

Latest podspec

{
    "name": "JXPagingView",
    "version": "0.0.5",
    "summary": "u7c7bu4f3cu5faeu535au4e3bu9875u3001u7b80u4e66u4e3bu9875u7b49u6548u679cu3002u591au9875u9762u5d4cu5957uff0cu65e2u53efu4ee5u4e0au4e0bu6ed1u52a8uff0cu4e5fu53efu4ee5u5de6u53f3u6ed1u52a8u5207u6362u9875u9762u3002u652fu6301HeaderViewu60acu6d6eu3001u652fu6301u4e0bu62c9u5237u65b0u3001u4e0au62c9u52a0u8f7du66f4u591au3002",
    "homepage": "https://github.com/pujiaxin33/JXPagingView",
    "authors": {
        "pujiaxin33": "[email protected]"
    },
    "platforms": {
        "ios": "8.0"
    },
    "swift_version": "4.0",
    "source": {
        "git": "https://github.com/pujiaxin33/JXPagingView.git",
        "tag": "0.0.5"
    },
    "source_files": [
        "JXPagingView-Swift",
        "JXPagingView-Swift/**/*.swift"
    ],
    "license": "MIT",
    "requires_arc": true,
    "subspecs": [
        {
            "name": "Pager",
            "source_files": [
                "JXPagerView",
                "JXPagerView/**/*.{h,m}"
            ]
        },
        {
            "name": "Paging",
            "source_files": [
                "JXPagingView-Swift",
                "JXPagingView-Swift/**/*.swift"
            ]
        }
    ]
}

Pin It on Pinterest

Share This