我正在尝试以编程方式创建5 UIImageView
,将它们作为父init(frame:)
UIView
方法中的子视图连续添加。当我运行代码时,只显示最后一个图像视图。前4名失踪。
我正在使用UIImageView
初始化repeatedValue:
数组
这是正确使用初始化方法吗?
这是我正在使用的代码:
导入UIKit
class DistanceView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
print("init frame called")
let distances = [UIImageView](count: 5, repeatedValue: UIImageView())
distances[0].image=UIImage(named: "1")
distances[1].image=UIImage(named: "2")
distances[2].image=UIImage(named: "3")
distances[3].image=UIImage(named: "4")
distances[4].image=UIImage(named: "5")
for var i = 0; i<5; i++ {
distances[i].frame=CGRectMake(0+CGFloat(i)*frame.width*0.1, 0, 0.06*frame.width, 0.06*frame.width*1.6377)
self.addSubview(distances[i])
}
}
required init?(coder aDecoder: NSCoder) {
print("init coder called")
fatalError("init(coder:) has not been implemented")
}
}
答案 0 :(得分:2)
谨防repeatedValue
值使用repeatedValue()
初始化的Swift数组中的每个元素都是相同的。
中级数组
var distances = [UIImageView]()
for i in 1...5 {
let imageView = UIImageView(image: UIImage(named: "image\(i)"))
distances.append(imageView)
}
for i in 0 ..< distances.count {
distances[i].frame =
CGRectMake(0+CGFloat(i)*frame.width*0.1, 0,
0.06*frame.width, 0.06*frame.width*1.6377)
self.addSubview(distances[i])
}
没有中间数组
您可能不需要首先将UIImageView
缓存在单独的数组中。您甚至可以在.subviews
阶段之后使用addSubview
进行迭代。
for i in 0...4 {
let imageView = UIImageView(image: UIImage( named: "image\(1+i)"))
imageView.frame =
CGRectMake(0+CGFloat(i)*frame.width*0.1, 0,
0.06*frame.width, 0.06*frame.width*1.6377)
self.addSubview(imageView)
}
您正在使用相同值的n
初始化数组。您正在创建一个重复的UIImageView
。
let distances = [UIImageView](count: 5, repeatedValue: UIImageView())