2016-02-19 46 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())