Custom UIPageControl with dot images

前端 未结 4 1484
不知归路
不知归路 2020-12-15 13:59

When I needed to custom my UIPageControl I used this and this solution.

Slightly modifying it for the new version of swift we have :

class myPageCont         


        
4条回答
  •  攒了一身酷
    2020-12-15 14:49

    Swift 3.0 ... you know if you are OK with accepting stated risk: "Modifying the subviews of an existing control is fragile".

    You will have to call "updateDots()" in viewDidAppear() and your valueChanged handler for the page control.

     import UIKit
    
     class CustomImagePageControl: UIPageControl {
    
       let activeImage:UIImage = UIImage(named: "SelectedPage")!
       let inactiveImage:UIImage = UIImage(named: "UnselectedPage")!
    
       override func awakeFromNib() {
             super.awakeFromNib()
    
             self.pageIndicatorTintColor = UIColor.clear
             self.currentPageIndicatorTintColor = UIColor.clear
             self.clipsToBounds = false
        }
    
        func updateDots() {
             var i = 0
             for view in self.subviews {
                 if let imageView = self.imageForSubview(view) {
                     if i == self.currentPage {
                         imageView.image = self.activeImage
                     } else {
                         imageView.image = self.inactiveImage
                     }
                     i = i + 1
                 } else {
                     var dotImage = self.inactiveImage
                     if i == self.currentPage {
                         dotImage = self.activeImage
                     }
                     view.clipsToBounds = false
                     view.addSubview(UIImageView(image:dotImage))
                     i = i + 1
                 }
             }
         }
    
         fileprivate func imageForSubview(_ view:UIView) -> UIImageView? {
             var dot:UIImageView?
    
             if let dotImageView = view as? UIImageView {
                 dot = dotImageView
             } else {
                 for foundView in view.subviews {
                     if let imageView = foundView as? UIImageView {
                         dot = imageView
                         break
                     }
                 }
             }
    
             return dot
         }
     }
    

提交回复
热议问题