2017-11-14 56 views
0

私はUIPageControlのドットのイメージを設定しようとしています。カスタムPageControl image - Swift

私は、画像を必要とする代わりに、そのことを、デフォルトのドットを変更する必要があります。 私はそれがデフォルトのドットと重なっている、Pagecontrolの画像を設定するが、可能性があり、以下のコード

self.pageCtrl.currentPageIndicatorTintColor = UIColor.init(patternImage: UIImage(named: "Page Indicator_Selected")!) 
self.pageCtrl.pageIndicatorTintColor = UIColor.init(patternImage: UIImage(named: "Page Indicator_Normal")!) 

を使用しました。

+0

[ドット画像とカスタムUIPageControl(https://stackoverflow.com/questions/38869171/custom-uipagecontrol-with-dot-images)の可能性の重複 – raki

答えて

0

このアプローチは私には役に立ちます。私はカスタムのpageControlクラスを作成し、ドットのイメージをカスタムイメージに変更します。 I以下のコードで

は、任意のカスタム画像とpageControlにおける最初のドット分の画像を変更しました。

お客様のニーズに応じてupdateDots()メソッドを変更することができます。

override func viewDidLoad() { 
    super.viewDidLoad() 

    let pageControl = CustomPageControl(frame: CGRect(x: 100, y: 100, width: 104, height: 40)) 
    pageControl.numberOfPages = 5 
    pageControl.currentPage = 0 
    self.view.addSubview(pageControl) 
} 


class CustomPageControl: UIPageControl { 


var imageToBeReplacedByDot: UIImage { 
    return // Image you want to replace with dots 
} 
var circleImage: UIImage { 

    return //Default Image 
} 


override var numberOfPages: Int { 
    didSet { 
     updateDots() 
    } 
} 

override var currentPage: Int { 
    didSet { 
     updateDots() 
    } 
} 

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 { 
     var imageView = self.imageView(forSubview: view) 
     if imageView == nil { 
      if i == 0 { 
       imageView = UIImageView(image: imageToBeReplacedByDot) 
      } else { 
       imageView = UIImageView(image: circleImage) 
      } 
      imageView!.center = view.center 
      view.addSubview(imageView!) 
      view.clipsToBounds = false 
     } 
     if i == self.currentPage { 
      imageView!.alpha = 1.0 
     } else { 
      imageView!.alpha = 0.5 
     } 
     i += 1 
    } 
} 

fileprivate func imageView(forSubview 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 
} 
}