我正在尝试以编程方式创建一个 5 UIImageView
,将它们作为 subview 连续添加到 init(frame:)
父 UIView
方法中>。当我运行代码时,只显示最后一个 ImageView 。前 4 个缺失。
我正在使用 repeatedValue:
初始化一个 UIImageView
数组。
这是对初始化方法的正确使用吗?
这是我使用的代码:
导入 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")
}
最佳答案
当心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
缓存在单独的数组中。您甚至可以在 addSubview
阶段之后使用 .subviews
进行迭代。
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())
关于ios - 使用 UIImageView repeatedValue() 初始化 Swift 数组似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511253/