带有点图像的自定义UIPageControl

当我需要定制我的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(),但没有结果。我可能做错了什么?

回答:

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

}

}

以上是 带有点图像的自定义UIPageControl 的全部内容, 来源链接: utcz.com/qa/425210.html

回到顶部