如何使用每页不同的颜色更改 UIPageControl 中分页点的颜色

How to change the color of pagination dots in UIPageControl with a different color per page

我将 UIPageControl 与 UIScrollView 结合使用来显示 5 个图像。我希望能够将当前页面指示器点颜色设置为每个页面的不同颜色(当它被选中时)。我已经尝试在 UIPageControl 的“值更改”操作中设置 currentPageIndicatorTintColor,但这会在更改为新颜色之前短暂显示以前的颜色。

有谁知道是否可以为每个点使用不同的颜色,这样显示就显得很无缝了?

注意:这不是 How can i change the color of pagination dots of UIPageControl? 的副本,因为该问题是关于将所有点更改为具有相同颜色,而我想将各个页面点更改为具有不同颜色,因为它们的页面当前正在显示。

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

您可以这样做:

第 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]
}

第 3 步:实现 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 函数。您最初可以在加载视图时调用它,也可以在更改页面时调用它。