Shazam 0.0.9

Shazam 0.0.9

Bawn 维护。



Shazam 0.0.9

  • bawn

Shazam

License MIT Pod version Platform info Support Swift 4.2

一个用于嵌套显示水平和垂直滚动视图的纯 Swift 库。

demo

要求

  • iOS 9.0+
  • Swift 4.2+
  • Xcode 10+

安装

CocoaPods (推荐)

use_frameworks!

pod 'Shazam'

使用

中文文档

首先确保导入框架

import Shazam

基本上,我们只需要提供要显示的子视图控制器的列表。然后调用一些必要的方法。

让我们看看完成此操作的步骤

创建 ShazamPageViewController 子类

import Shazam

class PageViewController: ShazamPageViewController {
  // ...
}

提供将要嵌入到 ShazamPageViewController 的视图控制器

override func numberOfViewControllers(in pageController: ShazamPageViewController) -> Int {
    return count
}
    
override func pageController(_ pageController: ShazamPageViewController, viewControllerAt index: Int) -> (UIViewController & ShazamChildViewController) {
    // ...
    return viewController
}
    

所有要在 ShazamPageViewController 内显示的 UIViewController 都应遵循 ShazamChildViewController 协议,通过实现 func shazamChildScrollView() -> UIScrollView

import Shazam
class ChildViewController: UIViewController, ShazamChildViewController {

    @IBOutlet weak var tableView: UITableView!
    func shazamChildScrollView() -> UIScrollView {
        return tableView
    }
    // ...
}

注意:ChildViewController 的 scrollview 必须保留HeaderView + menuView 的高度。例如,在 Demo 中的 BatmanViewController,你需要设置collectionView Header的高度。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        guard let pageViewContoller = szPageViewContoller else {
            return .zero
        }
        let headerViewHeight = pageViewContoller.headerViewHeightFor(pageViewContoller)
        let menuViewHeight = pageViewContoller.menuViewHeightFor(pageViewContoller)
        return CGSize(width: collectionView.bounds.width, height: headerViewHeight + menuViewHeight)
    }

提供HeaderView和HeaderView高度

override func headerViewFor(_ pageController: ShazamPageViewController) -> UIView & ShazamHeaderView {
    return HeaderView()
}

override func headerViewHeightFor(_ pageController: ShazamPageViewController) -> CGFloat {
    return headerViewHeight
}

HeaderView应该遵循ShazamHeaderView协议,通过实现func userInteractionViews() -> [UIView]?

func userInteractionViews() -> [UIView]? {
    return [button]
}

提供menuView和menuView高度

override func menuViewFor(_ pageController: ShazamPageViewController) -> UIView {
    return menuView
}

override func menuViewHeightFor(_ pageController: ShazamPageViewController) -> CGFloat {
    return menuViewHeight
}

当主scrollview滚动时更新menuView的布局,并在滚动结束时检查状态

override func pageController(_ pageController: ShazamPageViewController, mainScrollViewDidScroll scrollView: UIScrollView) {
    menuView.updateLayout(scrollView)
}

override func pageController(_ pageController: ShazamPageViewController,
                                 mainScrollViewDidEndScroll scrollView: UIScrollView) {
    menuView.checkState()
}

示例

按照以下 4 个步骤运行示例项目

  1. 克隆 Shazam 仓库
  2. 运行 pod install 命令
  3. 打开 Shazam 工作空间
  4. 运行 Shazam-Demo 项目。

许可证

Shazam 采用 MIT 许可发布。详情请见 LICENSE 文件。