Skip to content

Latest commit

 

History

History
154 lines (106 loc) · 4.17 KB

README-CHINESE.md

File metadata and controls

154 lines (106 loc) · 4.17 KB

Shazam

License MIT Pod version Platform info Support Swift 4.2

A pure-Swift library for nested display of horizontal and vertical scrolling views.

demo

Requirements

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

Installation

CocoaPods (recommended)

use_frameworks!

pod 'Shazam'

Usage

首先需要导入 Shazam

import Shazam

创建 ShazamPageViewController 子类

import Shazam

class PageViewController: ShazamPageViewController {
  // ...
}

重写协议方法以提供 viewController 和相应的数量

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

所提供的 viewController 必须都遵守 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 及其高度

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

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

而且 HeaderView 必须遵守 ShazamHeaderView 协议,并实现 func userInteractionViews() -> [UIView]? 方法

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

重写协议方法以提供 menuView 及其高度

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

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

考虑到有时候 menuView 需要高度的定制性,所以设计成由开发者自行提供(demo 中有 menuView 的实现方法)。

更新 menuView 的布局

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

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

包括在内容的滚动的时候和停止滚动的时候,具体可参考 demo

Examples

Follow these 4 steps to run Example project:

  1. Clone Shazam repository
  2. Run the pod install Shazam
  3. Open Shazam workspace
  4. Run the Shazam-Demo project.

License

Shazam is released under the MIT license. See LICENSE for details.