2015-08-08 57 views
0

我希望動態地將UIImageView數組添加到視圖中。當我通過一個for循環迭代似乎只有最後的UIImageView添加,從陣列而不是所有:從數組動態添加UIImageView's

// same image to be used 
let imageName = "img.png" 
let image = UIImage(named: imageName) 

// array of UIImageViews 
var images : [UIImageView?] = Array(count: 10, repeatedValue: UIImageView(image: image)) 

// iterate and add to view 
for i in 0...9 { 

    // setup UIImageView 
    // this is how I know only the last UIImageView is added to the parent view 
    // the y cordinate is about 10 points down (this is expected of i+i array size with of 10) 

    images[i]?.frame = CGRect(x: 10, y: CGFloat(i+i), width: image!.size.width, height: image!.size.height) 

    // add to parent view 
    parentView.addSubview(images[i]!) 

} 

有沒有一個簡單的解決這個?我覺得我好像缺少一些公然的東西。

+0

你設置的parentView斷點,看着它的子視圖數組? – jarryd

+0

@ Helium3我可以在調試控制檯中找到該數組,但是我註銷了父級中的所有子視圖,並且當我在原始for循環內註銷子視圖時,也僅記錄了1個UIImageView – rambossa

+0

,每個不同的UIImageView都會得到記錄,他們只是似乎替換 – rambossa

回答

0

因爲您使用的是Array(count: 10, repeatedValue: UIImageView(image: image)),repeatedValue意味着您要添加到此數組的所有圖像視圖都會引用同一個對象。這樣,你只有一個圖像視圖,它怎麼可以添加儘可能多的副本。檢查我的答案。 enter image description here

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let myWidth = 40 
     let myHeight = 40 

     // same image to be used 
     let imageName = "img.png" 
     let image = UIImage(named: imageName) 

     // iterate and add to view 
     for i in 0...9 { 
      var imageView: UIImageView = UIImageView(image: image) 
      imageView.frame = CGRect(x: 10, y: myHeight * i, width: myWidth, height: myHeight) 

      // add to parent view 
      self.view.addSubview(imageView) 

     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

這是defintley答案,我一直在尋找,謝謝。 – rambossa

0

repeatedValue:UIImageView(image:image))只是將相同的引用傳遞給數組。所以你有一個10個引用到相同圖像的數組。

嘗試本作的測試將表明,當傳遞一個正確的ImageView陣列

var images : [UIImageView] = [UIImageView(image: image), UIImageView(image: image), UIImageView(image: image), UIImageView(image: image), UIImageView(image: image)] 

那麼你應該有5個UIImageViews的添加爲子視圖功能將工作。

它在數組中使用相同的圖像並沒有什麼意義,除非它僅用於測試。您可能會更好地創建一組圖像,以便只有唯一的圖像。然後可以使用獨特的圖像來創建UIImageView。