我想动态地将UIImageViews数组添加到视图中。当我遍历for循环时,似乎只添加了最后一个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 :(得分: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作为子视图。
在数组中使用相同的图像并不是很有意义,除非它仅用于您的测试。您可能最好创建一组图像,以便只有唯一的图像。然后可以使用这些独特的图像来创建UIImageViews。
答案 1 :(得分:0)
由于您正在使用Array(count: 10, repeatedValue: UIImageView(image: image))
,repeatedValue
表示您要添加到此数组的所有图像视图都会引用同一个对象。这样,您只有一个imageview,如何添加多个copys。检查我的答案。
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.
}
}