source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks!
pod 'ScrollPageView', '~> 0.1.4'
因为大家可能会复用同一个controller来显示内容, 这里提供两种方法
//1. 设置子控制器,类似
func setChildVcs() -> [UIViewController] {
let vc1 = storyboard!.instantiateViewControllerWithIdentifier("test")
vc1.title = "国内头条"
let vc2 = UIViewController()
vc2.view.backgroundColor = UIColor.greenColor()
vc2.title = "国际要闻"
let vc3 = UIViewController()
vc3.view.backgroundColor = UIColor.redColor()
vc3.title = "趣事"
let vc4 = UIViewController()
vc4.view.backgroundColor = UIColor.yellowColor()
vc4.title = "囧图"
let vc5 = UIViewController()
vc5.view.backgroundColor = UIColor.lightGrayColor()
vc5.title = "明星八卦"
let vc6 = UIViewController()
vc6.view.backgroundColor = UIColor.brownColor()
vc6.title = "爱车"
let vc7 = UIViewController()
vc7.view.backgroundColor = UIColor.orangeColor()
vc7.title = "国防要事"
let vc8 = UIViewController()
vc8.view.backgroundColor = UIColor.blueColor()
vc8.title = "科技频道"
let vc9 = UIViewController()
vc9.view.backgroundColor = UIColor.brownColor()
vc9.title = "手机专页"
let vc10 = UIViewController()
vc10.view.backgroundColor = UIColor.orangeColor()
vc10.title = "风景图"
let vc11 = UIViewController()
vc11.view.backgroundColor = UIColor.blueColor()
vc11.title = "段子"
return [vc1, vc2, vc3,vc4, vc5, vc6, vc7, vc8, vc9, vc10, vc11]
}
// 2.这个是必要的设置
automaticallyAdjustsScrollViewInsets = false
//3. 自定义效果组合
var style = SegmentStyle()
// 缩放文字
style.scaleTitle = true
// 颜色渐变
style.gradualChangeTitleColor = true
// segment可以滚动
style.scrollTitle = true
let childVcs = setChildVcs()
// 4. 注意: 标题个数和子控制器的个数要相同
let titles = childVcs.map { $0.title! }
// 5. 这里的childVcs 需要传入一个包含childVcs的数组, parentViewController 传入self
let scrollPageView = ScrollPageView(frame: CGRect(x: 0, y: 64, width: view.bounds.size.width, height: view.bounds.size.height - 64), segmentStyle: style, titles: titles, childVcs: childVcs, parentViewController: self)
// 6.
view.addSubview(scroll)
// 1. 添加子控制器
// 设置childVcs
func setChildVcs() -> [UIViewController]{
let vc1 = storyboard!.instantiateViewControllerWithIdentifier("test")
vc1.view.backgroundColor = UIColor.whiteColor()
let vc2 = UIViewController()
vc2.view.backgroundColor = UIColor.greenColor()
return [vc1, vc2]
}
//2. 这个是必要的设置
automaticallyAdjustsScrollViewInsets = false
// 3. 自定义效果组合
var style = SegmentStyle()
// 标题不滚动, 则每个label会平分宽度
style.scrollTitle = false
// 颜色渐变
style.gradualChangeTitleColor = true
// 遮盖
style.showCover = true
// 遮盖颜色
style.coverBackgroundColor = UIColor.whiteColor()
// title正常状态颜色 使用RGB空间值
style.normalTitleColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
// title选中状态颜色 使用RGB空间值
style.selectedTitleColor = UIColor(red: 235.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
// 4. 标题个数和子控制器的个数要相同
let titles = ["国内头条", "国际要闻"]
// 5. 初始化segmentView
topView = ScrollSegmentView(frame: CGRect(x: 0, y: 0, width: 150, height: 28), segmentStyle: style, titles: titles)
topView.backgroundColor = UIColor.redColor()
topView.layer.cornerRadius = 14.0
// 可以直接设置背景色
// topView.backgroundImage = UIImage(named: "test")
// 6. 初始化 contentView
contentView = ContentView(frame: view.bounds, childVcs: setChildVcs(), parentViewController: self)
// 7. 设置代理 必要的设置
contentView.delegate = self // 必须实现代理方法
// 8. 处理点击title时切换contentView的内容, 建议您可以直接使用和下面一样的代码
topView.titleBtnOnClick = {[unowned self] (label: UILabel, index: Int) in
self.contentView.setContentOffSet(CGPoint(x: self.contentView.bounds.size.width * CGFloat(index), y: 0), animated: false)
}
// 9. 添加segmentVIew 和ContentView
navigationItem.titleView = topView
view.addSubview(contentView)
// 10. 实现代理, 只需要提供当前的segmentVIew即可
extension Vc6Controller: ContentViewDelegate {
var segmentView: ScrollSegmentView {
return topView
}
}
三. 更新方法的使用:
// 设置新的childVcs
let vc1 = storyboard!.instantiateViewControllerWithIdentifier("test")
vc1.view.backgroundColor = UIColor.redColor()
vc1.title = "更换标题"
let vc2 = UIViewController()
vc2.view.backgroundColor = UIColor.greenColor()
vc2.title = "换标题2"
let newChildVcs = [vc1, vc2]
// 设置新的标题
let newTitles = newChildVcs.map {
$0.title!
}
topView.reloadTitlesWithNewTitles(newTitles)
contentView.reloadAllViewsWithNewChildVcs(newChildVcs)
// topView.selectedIndex(1, animated: true)
let newChildVcs = currentChildVcs
let newTitles = currentChildVcs.map { $0.title! }
// 调用public方法刷新视图
scrollPageView.reloadChildVcsWithNewTitles(newTitles, andNewChildVcs: newChildVcs)
这是我写的<iOS自定义控件剖析>这本书籍中的一个demo, 如果你希望知道具体的实现过程和其他的一些常用效果的实现, 那么你应该能轻易在网上下载到免费的盗版书籍.
当然作为本书的写作者, 还是希望有人能支持正版书籍. 如果你有意购买书籍, 在这篇文章中, 介绍了书籍中所有的内容和书籍适合阅读的人群, 和一些试读章节, 以及购买链接. 在你准备购买之前, 请一定读一读里面的说明. 否则, 如果不适合你阅读, 虽然书籍售价35不是很贵, 但是也是一笔损失.
如果你希望联系到我, 可以通过简书联系到我
ScrollPageView is released under the MIT license. See LICENSE for details.