当我需要定制我的UIPageControl解决方案。
为新版本的swift稍微修改一下即可:
class myPageControl: UIPageControl { var activeImage: UIImage! var inactiveImage: UIImage! required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) activeImage = UIImage(named: "active.png")! inactiveImage = UIImage(named: "inactive.png")! } func updateDots() { for i in 0 ..< self.subviews.count { let dot : UIImageView = imageViewForSubview(self.subviews[i]) if (i == self.currentPage) { dot.image = activeImage } else { dot.image = inactiveImage } } } func imageViewForSubview(view: UIView) -> UIImageView { var dot: UIImageView? = nil if (view.isKindOfClass(UIView)) { for subview: UIView in view.subviews { if (subview is UIImageView) { dot = (subview as! UIImageView) } } if dot == nil { dot = UIImageView(frame: CGRectMake(0.0, 0.0, view.frame.size.width, view.frame.size.height)) view.addSubview(dot!) } } else { dot = (view as! UIImageView) } return dot! } func setPage(page: Int) { super.currentPage = page self.updateDots() } }
我的问题是,当您第一次启动应用程序时,我无法更改图片。仅在页面更改时更改。
在中viewDidLoad(),我添加了setPage(0)和updateDots(),但没有结果。我可能做错了什么?
viewDidLoad()
setPage(0)
updateDots()
Swift 3.0 …您知道是否可以接受声明的风险:“修改现有控件的子视图很脆弱”。
您将必须在viewDidAppear()中调用“ updateDots()”,并为页面控件调用valueChanged处理程序。
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 } }