LTScrollView的使用

http://code.cocoachina.com/view/137461

    #滚动页

    pod 'LTScrollView'

https://github.com/gltwy/LTScrollView

LTScrollView

实现原理: http://blog.csdn.net/glt_code/article/details/78576628

   

demo.gif

 

Demo文件路径以及说明

  • LTScrollView / Example : 为 Swift 使用示例.
  • LTScrollView / OCExample : 为 OC 使用示例.
  • 支持的子View为UIScrollView、UICollectionView、UITableView.

 

CocoaPods安装

安装CocoaPods 使用以下命令:

$ gem install cocoapods

 

Podfile

在你的 Podfile中添加LTScrollView

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

 

target 'TargetName' do

#注意此处需要添加use_frameworks!

use_frameworks!

 

pod 'LTScrollView', '~> 0.2.0'

end

然后,使用以下命令安装

$ pod install

提示错误 [!] Unable to find a specification for LTScrollView 解决办法:

$ pod repo remove master

$ pod setup

 

Swift使用说明

 

Swift.LTSimple使用说明

  1. 创建LTSimpleManager实例对象

@objc public init(frame: CGRect, viewControllers: [UIViewController], titles: [String], currentViewController:UIViewController, layout: LTLayout)

  1. 设置headerView

@objc public func configHeaderView(_ handle: (() -> UIView?)?)

  1. 子控制器中glt_scrollView进行赋值

self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)

  1. 更多使用说明请参考Demo(LTScrollView / Example)

 

Swift.LTAdvanced使用说明

class FMPlayDetailController: UIViewController {

 

 

  1. 创建LTAdvancedManager实例对象、并设置headerView

@objc public init(frame: CGRect, viewControllers: [UIViewController], titles: [String], currentViewController:UIViewController, layout: LTLayout, headerViewHandle handle: () -> UIView)

  1. 子控制器中glt_scrollView进行赋值

self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)

  1. 更多使用说明请参考Demo(LTScrollView / Example)

 

OC使用说明

 

OC.LTSimple使用说明

  1. 创建LTSimpleManager实例对象

[[LTSimpleManager alloc] initWithFrame:frame viewControllers:self.viewControllers titles:self.titles currentViewController:self layout:self.layout]

  1. 设置headerView

[self.managerView configHeaderView:^UIView * _Nullable{ }]

  1. 子控制器中glt_scrollView进行赋值

self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)

  1. 更多使用说明请参考Demo(LTScrollView / OCExample)

 

OC.LTAdvanced使用说明

  1. 创建LTAdvancedManager实例对象、并设置headerView

 [[LTAdvancedManager alloc] initWithFrame:frame viewControllers:self.viewControllers titles:self.titles currentViewController:self layout:self.layout headerViewHandle:^UIView * _Nonnull{}]

  1. 子控制器中glt_scrollView进行赋值

self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)

  1. 更多使用说明请参考Demo(LTScrollView / OCExample)

 

LTLayout属性说明

详情查看LTLayout.swift

 项目使用

http://www.code4app.com/thread-30966-1-1.html

http://www.code4app.com/thread-31048-1-1.html

例如简单使用

private lazy var headerView:FMPlayDetailHeaderView = {

        let view = FMPlayDetailHeaderView.init(frame: CGRect(x:0, y:0, width:YYScreenWidth, height:240))

        view.backgroundColor = UIColor.white

        return view

    }()

   private let oneVc = PlayDetailIntroController()

   private let twoVc = PlayDetailProgramController()

   private let threeVc = PlayDetailLikeController()

   private let fourVc = PlayDetailCircleController()

   private lazy var viewControllers: [UIViewController] = {

        return [oneVc, twoVc, threeVc,fourVc]

    }()

 

    private lazy var titles: [String] = {

        return ["简介", "节目", "找相似","圈子"]

    }()

 

    private lazy var layout: LTLayout = {

        let layout = LTLayout()

        layout.isAverage = true

        layout.sliderWidth = 80

        layout.titleViewBgColor = UIColor.white

        layout.titleColor = UIColor(r: 178, g: 178, b: 178)

        layout.titleSelectColor = UIColor(r: 16, g: 16, b: 16)

        layout.bottomLineColor = UIColor.red

        layout.sliderHeight = 56

        /* 更多属性设置请参考 LTLayout 中 public 属性说明 */

        return layout

    }()

 

    private lazy var advancedManager: LTAdvancedManager = {

        let statusBarH = UIApplication.shared.statusBarFrame.size.height

        let advancedManager = LTAdvancedManager(frame: CGRect(x: 0, y: 0, width: YYScreenWidth, height: YYScreenHeigth+navigationBarHeight), viewControllers: viewControllers, titles: titles, currentViewController: self, layout: layout, headerViewHandle: {[weak self] in

            guard let strongSelf = self else { return UIView() }

            let headerView = strongSelf.headerView

            return headerView

        })

        /* 设置代理 监听滚动 */

        advancedManager.delegate = self

        /* 设置悬停位置 */

        advancedManager.hoverY = navigationBarHeight

        /* 点击切换滚动过程动画 */

        //        advancedManager.isClickScrollAnimation = true

        /* 代码设置滚动到第几个位置 */

        //        advancedManager.scrollToIndex(index: viewControllers.count - 1)

        return advancedManager

    }()

//Mark: - 导航栏右边按钮

    private lazy var rightBarButton1:UIButton = {

        let button = UIButton.init(type: UIButtonType.custom)

        button.frame = CGRect(x:0, y:0, width:30, height: 30)

        button.setImage(UIImage(named: "icon_more_h_30x31_"), for: UIControlState.normal)

        button.addTarget(self, action: #selector(rightBarButtonClick1), for: UIControlEvents.touchUpInside)

        return button

    }()

    

    //Mark: - 导航栏右边按钮

    private lazy var rightBarButton2:UIButton = {

        let button = UIButton.init(type: UIButtonType.custom)

        button.frame = CGRect(x:0, y:0, width:30, height: 30)

        button.setImage(UIImage(named: "icon_share_h_30x30_"), for: UIControlState.normal)

        button.addTarget(self, action: #selector(rightBarButtonClick2), for: UIControlEvents.touchUpInside)

        return button

    }()

    

 

 

override func viewDidAppear(_ animated: Bool) {

        super.viewDidAppear(animated)

        self.navBarBackgroundAlpha = 0

    }

 

    override func viewDidLoad() {

        super.viewDidLoad()

        self.navBarBackgroundAlpha = 0

        self.view.backgroundColor = UIColor.white

        self.automaticallyAdjustsScrollViewInsets = false

        view.addSubview(advancedManager)

        advancedManagerConfig()

 

let rightBarButtonItem1:UIBarButtonItem = UIBarButtonItem.init(customView: rightBarButton1)

        let rightBarButtonItem2:UIBarButtonItem = UIBarButtonItem.init(customView: rightBarButton2)

 

        self.navigationItem.rightBarButtonItems = [rightBarButtonItem1, rightBarButtonItem2]

//        for vc in viewControllers{

//            self.addChildViewController(vc)

//        }

}

 

deinit {

        print("FMFindController < --> deinit")

    }

 

}

 

 

extension FMPlayDetailController : LTAdvancedScrollViewDelegate {

    //MARK: 具体使用请参考以下

    private func advancedManagerConfig() {

        //MARK: 选中事件

        advancedManager.advancedDidSelectIndexHandle = {

            print("选中了 -> \($0)")

        }

    }

    

    func glt_scrollViewOffsetY(_ offsetY: CGFloat) {

        if (offsetY > 5)

        {

            let alpha = offsetY / CGFloat(kNavBarBottom)

            navBarBackgroundAlpha = alpha

            self.rightBarButton1.setImage(UIImage(named: "icon_more_n_30x31_"), for: UIControlState.normal)

            self.rightBarButton2.setImage(UIImage(named: "icon_share_n_30x30_"), for: UIControlState.normal)

        }else{

            navBarBackgroundAlpha = 0

            self.rightBarButton1.setImage(UIImage(named: "icon_more_h_30x31_"), for: UIControlState.normal)

            self.rightBarButton2.setImage(UIImage(named: "icon_share_h_30x30_"), for: UIControlState.normal)

        }

    }

}

 

 

 

import LTScrollView

class PlayDetailIntroController: UIViewController, LTTableViewProtocal{

private lazy var tableView: UITableView = {

        let tableView = tableViewConfig(CGRect(x: 0, y: 0, width:YYScreenWidth, height: YYScreenHeigth), self, self, nil)

        tableView.register(PlayContentIntroCell.self, forCellReuseIdentifier: PlayContentIntroCellID)

        tableView.register(PlayAnchorIntroCell.self, forCellReuseIdentifier: PlayAnchorIntroCellID)

        return tableView

    }()

 

// 内容简介model

    var playDetailAlbumModel:FMPlayDetailAlbumModel? {

        didSet{

            guard let model = playDetailAlbumModel else {return}

            self.playDetailAlbum = model

            // 防止刷新分区的时候界面闪烁

            UIView.performWithoutAnimation {

                self.tableView.reloadSections(NSIndexSet(index: 0) as IndexSet, with: UITableViewRowAnimation.none)

            }

        }

    }

    // 主播简介model

    var playDetailUserModel:FMPlayDetailUserModel? {

        didSet{

            guard let model = playDetailUserModel else {return}

            self.playDetailUser = model

            // 防止刷新分区的时候界面闪烁

            UIView.performWithoutAnimation {

                self.tableView.reloadSections(NSIndexSet(index: 1) as IndexSet, with: UITableViewRowAnimation.none)

            }        }

        

    }

}

 

extension PlayDetailIntroController : UITableViewDelegate, UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {

        return 2

    }

    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 1

    }

    

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

        return 200

    }

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if indexPath.section == 0 {

            let cell:PlayContentIntroCell = tableView.dequeueReusableCell(withIdentifier: PlayContentIntroCellID, for: indexPath) as! PlayContentIntroCell

            cell.selectionStyle = UITableViewCellSelectionStyle.none

            cell.playDetailAlbumModel = self.playDetailAlbum

            return cell

        }else {

            let cell:PlayAnchorIntroCell = tableView.dequeueReusableCell(withIdentifier: PlayAnchorIntroCellID, for: indexPath) as! PlayAnchorIntroCell

            cell.selectionStyle = UITableViewCellSelectionStyle.none

            cell.playDetailUserModel = self.playDetailUser

            return cell

        }

    }

}

 

posted @ 2019-03-27 19:45  sundayswift  阅读(2180)  评论(0)    收藏  举报