使用UIImageView repeatValue()初始化Swift数组似乎不起作用

时间:2016-02-19 17:28:59

标签: ios arrays uiview uiimageview initialization

我正在尝试以编程方式创建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")
}

}

1 个答案:

答案 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())