2016-02-19 45 views
0

我想创建一个5 UIImageView编程,在一排在父母UIViewinit(frame:)方法添加它们作为子视图。当我运行代码时,只显示最后一个图像视图。前4名失踪。初始化用的UIImageView repeatedValue()迅捷的阵列似乎不工作

我正在使用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") 
} 

}

回答

2

在斯威夫特谨防repeatedValue

每个元素的数组中用repeatedValue()倾斜是完全相同的。

中级阵列

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