gpt4 book ai didi

ios - UIPageControl 自定义类 - 发现没有将图像更改为点

转载 作者:搜寻专家 更新时间:2023-11-01 06:09:53 25 4
gpt4 key购买 nike

我需要用自定义图像而不是普通点来实现 UIPageControl。所以我创建了一个自定义类并通过 Storyboard连接它。自 ios7 以来,UIPageControl 的 subview 包含 UIView 而不是 UIImageView。结果 UIView(UIIpageControl subviews) 的 subview 不包含任何 subview ,所以我收到错误:

fatal error: unexpectedly found nil while unwrapping an Optional value.

我可能哪里错了?

class WhitePageControl:UIPageControl{
let activeImage = UIImage(named: "dot_white")
let inactiveImage = UIImage(named: "dot_white_e")

override init(frame: CGRect){
super.init(frame: frame)
}

required init(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
}

func updateDots(){
println(self.subviews.count) // 3
println(self.numberOfPages) // 3
for var index = 0; index < self.subviews.count; index++ {
println(index)
var dot:UIImageView!
var dotView:UIView = self.subviews[index] as UIView
println("1")
for subview in dotView.subviews{ // NIL HERE
println("2")
if subview.isKindOfClass(UIImageView){
println("3")
dot = subview as UIImageView
if index == self.currentPage{ dot.image = activeImage }
else{ dot.image = inactiveImage }
}
}
}
}

func setCurrentPage(value:Int){
super.currentPage = value
self.updateDots()
}
}

最佳答案

这是我的解决方案:

import Foundation

class PageControl: UIPageControl {
var activeImage: UIImage!
var inactiveImage: UIImage!
override var currentPage: Int {
//willSet {
didSet { //so updates will take place after page changed
self.updateDots()
}
}

convenience init(activeImage: UIImage, inactiveImage: UIImage) {
self.init()

self.activeImage = activeImage
self.inactiveImage = inactiveImage

self.pageIndicatorTintColor = UIColor.clearColor()
self.currentPageIndicatorTintColor = UIColor.clearColor()
}

func updateDots() {
for var i = 0; i < count(subviews); i++ {
var view: UIView = subviews[i] as! UIView
if count(view.subviews) == 0 {
self.addImageViewOnDotView(view, imageSize: activeImage.size)
}
var imageView: UIImageView = view.subviews.first as! UIImageView
imageView.image = self.currentPage == i ? activeImage : inactiveImage
}
}

// MARK: - Private

func addImageViewOnDotView(view: UIView, imageSize: CGSize) {
var frame = view.frame
frame.origin = CGPointZero
frame.size = imageSize

var imageView = UIImageView(frame: frame)
imageView.contentMode = UIViewContentMode.Center
view.addSubview(imageView)
}

}

关于ios - UIPageControl 自定义类 - 发现没有将图像更改为点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27941204/

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