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文件路径以及说明
- 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使用说明
- 创建LTSimpleManager实例对象
@objc public init(frame: CGRect, viewControllers: [UIViewController], titles: [String], currentViewController:UIViewController, layout: LTLayout)
- 设置headerView
@objc public func configHeaderView(_ handle: (() -> UIView?)?)
- 子控制器中glt_scrollView进行赋值
self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)
- 更多使用说明请参考Demo(LTScrollView / Example)
Swift.LTAdvanced使用说明
class FMPlayDetailController: UIViewController {
- 创建LTAdvancedManager实例对象、并设置headerView
@objc public init(frame: CGRect, viewControllers: [UIViewController], titles: [String], currentViewController:UIViewController, layout: LTLayout, headerViewHandle handle: () -> UIView)
- 子控制器中glt_scrollView进行赋值
self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)
- 更多使用说明请参考Demo(LTScrollView / Example)
OC使用说明
OC.LTSimple使用说明
- 创建LTSimpleManager实例对象
[[LTSimpleManager alloc] initWithFrame:frame viewControllers:self.viewControllers titles:self.titles currentViewController:self layout:self.layout]
- 设置headerView
[self.managerView configHeaderView:^UIView * _Nullable{ }]
- 子控制器中glt_scrollView进行赋值
self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)
- 更多使用说明请参考Demo(LTScrollView / OCExample)
OC.LTAdvanced使用说明
- 创建LTAdvancedManager实例对象、并设置headerView
[[LTAdvancedManager alloc] initWithFrame:frame viewControllers:self.viewControllers titles:self.titles currentViewController:self layout:self.layout headerViewHandle:^UIView * _Nonnull{}]
- 子控制器中glt_scrollView进行赋值
self.glt_scrollView = self.tableView(self.scrollView / self.collectionView)
- 更多使用说明请参考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
}
}
}

浙公网安备 33010602011771号