2015-08-08 3 views
0

Я хочу динамически добавлять массив представлений UIImageViews в представление. Когда я итерация через цикл, кажется, что только последний UIImageView добавляется, а не все из массива:Динамическое добавление UIImageView из массива

// 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 и посмотрели на его массив subviews? – jarryd

+0

@ Helium3 Я мог найти этот массив в консоли отладки, однако я вывел из строя все дочерние объекты в родительском объекте, и только 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

Это ответ, который я искал, спасибо. – rambossa

0

repeatValue: UIImageView (изображение: изображение)) просто передает одну и ту же ссылку на один и тот же объект в массив. Таким образом, у вас есть массив из 10 ссылок на одно и то же изображение.

Попытка это для теста покажет, что функция будет работать, когда был принят правильный массив ImageView

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

тогда Вы должны иметь 5 UIImageViews добавлены в качестве подвидов.

Это не имеет смысла использовать одно и то же изображение в массиве, если только оно не подходит для вашего теста. Возможно, вам лучше создать набор изображений, чтобы были только уникальные изображения. Затем уникальные образы могут быть использованы для создания UIImageView.

Смежные вопросы