如何用每页不同的颜色更改 UIPageControl 中分页点的颜色
Posted
技术标签:
【中文标题】如何用每页不同的颜色更改 UIPageControl 中分页点的颜色【英文标题】:How to change the color of pagination dots in UIPageControl with a different color per page 【发布时间】:2015-10-09 05:16:00 【问题描述】:我将 UIPageControl 与 UIScrollView 结合使用来显示 5 张图像。我希望能够为每个页面将当前页面指示点颜色设置为不同的颜色(当它被选中时)。我尝试在 UIPageControl 的 Value Changed 操作中设置 currentPageIndicatorTintColor ,但这会在更改为新颜色之前短暂显示以前的颜色。
有谁知道是否可以为每个点使用不同的颜色,以使显示无缝?
注意:这不是 How can i change the color of pagination dots of UIPageControl? 的重复,因为这个问题是关于将所有点更改为具有相同颜色的,而我想在页面当前显示时将单个页面点更改为具有不同颜色。
【问题讨论】:
【参考方案1】:你可以这样做:
第 1 步: 继承 UIPageControl
并添加属性 dotImages
来保存所有点的图像。
class MyPageControl : UIPageControl
var dotImages : [UIImage?] = []
第 2 步:初始化您的 dotImages
required init(coder: NSCoder)
super.init(coder: coder)!
let firstDotImage = UIImage.init(named: "dot1.png")
let secondDotImage = UIImage.init(named: "dot2.png")
let thirdDotImage = UIImage.init(named: "dot3.png")
let fourthDotImage = UIImage.init(named: "dot4.png")
let fifthDotImage = UIImage.init(named: "dot5.png")
dotImages = [firstDotImage, secondDotImage, thirdDotImage, fourthDotImage, fifthDotImage]
第三步:实现updateDots
函数设置自己的图片
func updateDots ()
for var index = 0; index < self.subviews.count; index++
let dot = self.subviews[index] as! UIImageView
dot.image = self.dotImages[index]
第 4 步: 根据您的应用需要调用updateDots
函数。您可以在视图加载时调用它,也可以在页面更改时调用它。
【讨论】:
【参考方案2】:currentPageIndicatorTintColor 将起作用。 您实际上可能需要在这里做一些工作。
func scrollViewDidScroll(scrollView: UIScrollView)
//If the page is over 50% scrolled change the dot to the new value.
//If it is less, change it back if the user is holding the page.
我的建议是听滚动视图,抢占页面,而不是等待事实发生。我的伪代码保持抽象,但如果这还不够,如果您提供示例,我可以根据您的代码更具体地修改答案。
因此,您必须是 UIScrollViewDelegate
【讨论】:
在 scrollViewDidScroll 函数中更改 currentPageIndicatorTintColor(当滚动导致当前页面发生变化时)效果很好。非常感谢以上是关于如何用每页不同的颜色更改 UIPageControl 中分页点的颜色的主要内容,如果未能解决你的问题,请参考以下文章