ScrollingPageControl
ScrollingPageControl是受Instagram的分页控件启发的自定义分页控件。
默认情况下,它显示最多七个点,距离中心点越远的点越小,用户更改页面时滚动点,始终保持高亮显示的点在中心点的范围内。
点的最大数量以及中心点的数量都可以自定义,只要这些值是奇数。
其他可自定义的值包括选中点和高亮点的颜色、点的尺寸以及点之间的间隔。
使用方法
要使用ScrollingPageControl
,请使用Interface Builder将其添加到视图层次中或将代码添加到其中,建议不要设置宽度和高度约束,因为控件可以自行调整大小。如果您正在使用Interface Builder,可以为Intrinsic Content Size
设置一个占位符。
最简单的方法是使用一个具有isPagingEnabled
设置为true
的UIScrollView
。将pages
设置为滚动视图中的页面数,然后像下面这样实现这个方法UIScrollViewDelegate
:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let page = round(scrollView.contentOffset.x / scrollView.frame.width)
pageControl.selectedPage = Int(page)
}
确保将您的对象设置为滚动视图的delegate
。
自定义点
控制器为每个点使用一个UIView
。默认情况下,此视图将是一个简单的圆形视图,但您可以通过遵守ScrollingPageControlDelegate
协议并实现func viewForDot(at index: Int) -> UIView?
来提供自己的视图。如果该函数返回nil
,则将使用默认圆形点。
您可以使用该方法返回一个UIImageView
,或一个绘制特定形状的UIView
子类。
点视图必须使用tintColor
属性来着色其内容,并在tintColorDidChange()
时更新。
如果使用的是UIImageView
,则可以像这样简单地使用图像作为模板:image.withRenderingMode(.alwaysTemplate)
。然后,将使用UIImageView
的tintColor
属性对UIImage
进行着色。
为了查看示例,请参考下面的“示例”说明,并查看TriangleView
子类。您可以通过取消注释TestViewController.swift
中的第23行并运行项目来查看其效果。
Instagram行为
当Instagram的分页控件有五个或更少的页面时,它会显示所有完整点。我们的控件默认不会这样做,但很容易重建。只需在页面数小于或等于五时,将maxDots
和centerDots
设置为5
,其他情况下使用默认值。
if pages <= 5 {
pageControl.maxDots = 5
pageControl.centerDots = 5
} else {
pageControl.maxDots = 7
pageControl.centerDots = 3
}
pageControl.pages = pages
示例
要运行示例项目,请先克隆仓库,然后从示例目录运行pod install
。
安装
ScrollingPageControl可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中
pod 'ScrollingPageControl'
作者
EmilioPelaez, [email protected]
许可协议
ScrollingPageControl 可在 MIT 许可协议下使用。有关更多信息,请参阅 LICENSE 文件。