2015-08-08 54 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。