2015-10-09 132 views
2

我正在使用UIPageControl和UIScrollView一起顯示5個圖像。我希望能夠爲每個頁面(當它被選中時)將當前頁面指示器的點顏色設置爲不同的顏色。我已經嘗試在UIPageControl的Value Changed操作中設置currentPageIndicatorTintColor,但是在更改爲新顏色之前會短暫顯示以前的顏色。如何更改UIPageControl中每頁不同顏色的分頁點的顏色

有誰知道是否有可能爲每個點使用不同的顏色,以這種方式使顯示屏看起來沒有什麼問題?

注意:這不是How can i change the color of pagination dots of UIPageControl?的重複,因爲這個問題是關於改變所有的點具有相同的顏色,而我想要改變單個頁面點,當他們的頁面當前顯示時有不同的顏色。

回答

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

+0

更改scrollViewDidScroll函數中的currentPageIndicatorTintColor(當滾動結果在當前頁面更改時)完美運行。非常感謝 – Teevus

3

這是你如何能做到這一點:

第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福基於你的應用程序需要。您可以在視圖加載時初始化,也可以在頁面更改時調用它。