gpt4 book ai didi

ios - 带有点图像的自定义 UIPageControl

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:37 27 4
gpt4 key购买 nike

当我需要自定义我的 UIPageControl 时,我使用了 thisthis解决方案。

为新版本的 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 ...您知道您是否可以接受规定的风险:“修改现有控件的 subview 是脆弱的”。

您必须在 viewDidAppear() 和页面控件的 valueChanged 处理程序中调用“updateDots()”。

 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
}
}

关于ios - 带有点图像的自定义 UIPageControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38869171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com