在 dribbble 上看到一个不错的 page control,于是就去 github 上搜索了一下,发现有 html 版的,还有一个安卓版,但是我不懂 java,虽然有一个小伙伴建立了一个 Swift 项目,但是里面没有什么内容,然后我就决定自己封一个。
下面这个是 dribbble 的效果图
然后这个是实际效果图
ps: 安卓版有超过1000个 Star 和 300 多个 fork,我赵天井不服啊,iOS 的伙伴们,让我看到你们的双手,给我一个 Star 吧
由于还没研究如何使用 Cocoapod,因此大家只能将其下载后复制到工程中使用。我已经将所有类放入一个文件中了
git clone https://github.com/TBXark/TKRubberIndicator.git
键 | 用法 |
---|---|
smallBubbleSize | 小球尺寸 |
mainBubbleSize | 大球尺寸 |
bubbleXOffsetSpace | 小球间距 |
bubbleYOffsetSpace | 纵向间距 |
animationDuration | 动画时长 |
backgroundColor | 背景颜色 |
smallBubbleColor | 小球颜色 |
mainBubbleColor | 大球颜色 |
纯代码
init(frame: CGRect,count:Int,config:TKRubberIndicatorConfig = TKRubberIndicatorConfig())
XIB
xib 的话,我平时很少用,使用 xib 只能用默认样式初始化,但是可以添加 runtime property 来改变 pageCount,如果想用 xib 又想自定义样式的话,要不就直接修改源代码,直接改变TKRubberIndicatorConfig的默认值 :)
这里提供了闭包和传统的 Target-Action 两种方法
class ViewController: UIViewController {
let page = TKRubberIndicator(frame: CGRectMake(100, 100, 200, 100), count: 6)
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor(red:0.553, green:0.376, blue:0.549, alpha:1)
page.center = self.view.center
page.valueChange = {(num) -> Void in
print("Closure : Page is \(num)")
}
page.addTarget(self, action: "targetActionValueChange:", forControlEvents: UIControlEvents.ValueChanged)
self.view.addSubview(page)
// 可以变化 page 的个数
page.numberOfpage = 2
}
@IBAction func pageCountChange(sender: UISegmentedControl) {
page.numberOfpage = (sender.selectedSegmentIndex + 1) * 2
}
func targetActionValueChange(page:TKRubberIndicator){
print("Target-Action : Page is \(page.currentIndex)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
当页数为 0 或 1 时,(-,,-) PageControl 没有意义,因此我会抛出一个断言错误
这里还有一个用 Swift 做的动画开关集合,大家也可以看一下 这里
MIT