gpt4 book ai didi

ios - 使用 UIImageView repeatedValue() 初始化 Swift 数组似乎不起作用

转载 作者:行者123 更新时间:2023-11-28 21:32:08 24 4
gpt4 key购买 nike

我正在尝试以编程方式创建一个 5 UIImageView,将它们作为 subview 连续添加到 init(frame:)UIView 方法中>。当我运行代码时,只显示最后一个 ImageView 。前 4 个缺失。

我正在使用 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")
}

最佳答案

当心repeatedValue

使用 repeatedValue() 初始化的 Swift 数组中的每个元素的 都是相同的。

中间数组

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())

关于ios - 使用 UIImageView repeatedValue() 初始化 Swift 数组似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com