使用循环向多个 UIImageView 添加属性
Using a loop for adding attributes to multiple UIImageViews
我有 8 个 UImageView
要添加动画。我知道我可以制作八次动画,但我可以使用循环 - 也许是插值 - 吗?
这是我的动画代码:
override func viewDidLoad() {
super.viewDidLoad()
self.dieImage0.animationImages = [
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!
]
self.dieImage0.animationRepeatCount = 1
self.dieImage0.animationDuration = 1.0
}
开始动画:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
self.dieImage0.startAnimating() /* <======== */
dieImage0.image = randomImages.randomDice();
dieImage1.image = randomImages.randomDice();
dieImage2.image = randomImages.randomDice();
dieImage3.image = randomImages.randomDice();
dieImage4.image = randomImages.randomDice();
dieImage5.image = randomImages.randomDice();
dieImage6.image = randomImages.randomDice();
dieImage7.image = randomImages.randomDice();
println("Motion Ended")
}
我想为每个动画制作动画dieImage
编辑
我有几个 UIImageView
和 @IBOutlet
我想制作动画。
@IBOutlet weak var dieImage0: UIImageView!
@IBOutlet weak var dieImage1: UIImageView!
@IBOutlet weak var dieImage2: UIImageView!
@IBOutlet weak var dieImage3: UIImageView!
@IBOutlet weak var dieImage4: UIImageView!
@IBOutlet weak var dieImage5: UIImageView!
@IBOutlet weak var dieImage6: UIImageView!
@IBOutlet weak var dieImage7: UIImageView!
如何循环遍历它们而不是为每个制作单独的动画,我已经有一个动画设置;见上文。
更新:
除了两个骰子出现异常外,一切正常。第一个 (dieImage0
) 始终落在 1 上,第二个 (dieImage5
) 根本不会做任何事情!
更新 2:
这是我用于动画的代码:
let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
for die in dieImages {
die.animationImages = [
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die4")!
]
die.animationRepeatCount = 1
die.animationDuration = 1.0
}
现在一切正常!
是的,将图像放在一个数组中并循环遍历该数组。
for var i = 0; i < dieImages.count; i++ {
dieImages[i].startAnimating()
}
有帮助吗?对你的意图有点困惑,但我认为这回答了你的问题
要创建 animationImages
,我会这样做:
dieImage0.animationImages = (0..<4).reduce([UIImage]()) { images, _ in
return images + (1..<7).map { UIImage(named: "dicey-die\([=10=])")! }
}
看起来 animationImages
由 24 UIImages
- 4 组 6 张图像组成,其中图像名称为 "dicey-dieN"
,(N
被替换为(1..<7)
.)
范围内的数字
您可以像这样创建一个包含六个图像的数组:
let images = (1..<7).map { UIImage(named: "dicey-die\([=11=])")! }
您想重复 4 次,然后将所有数组相加。您可以通过调用 (0..<4).reduce([UIImage]()) { ... }
来做到这一点
结果将是一个包含 24 张图像的数组。
然后,正如@Chris Slowik 所建议的那样,创建一个 dieImages
数组,然后遍历它们以分配随机图像:
let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
for dieImage in dieImages {
dieImage.image = randomImages.randomDice()
dieImage.startAnimating()
}
您的整个 motionEnded
方法可能看起来像这样:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
for dieImage in dieImages {
dieImage.image = randomImages.randomDice()
dieImage.startAnimating()
}
}
我认为您 运行 遇到了 dieImage0
的问题,因为您在为它分配随机图像之前就开始播放动画。先分配图像,然后开始动画。
我有 8 个 UImageView
要添加动画。我知道我可以制作八次动画,但我可以使用循环 - 也许是插值 - 吗?
这是我的动画代码:
override func viewDidLoad() {
super.viewDidLoad()
self.dieImage0.animationImages = [
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die6")!
]
self.dieImage0.animationRepeatCount = 1
self.dieImage0.animationDuration = 1.0
}
开始动画:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
self.dieImage0.startAnimating() /* <======== */
dieImage0.image = randomImages.randomDice();
dieImage1.image = randomImages.randomDice();
dieImage2.image = randomImages.randomDice();
dieImage3.image = randomImages.randomDice();
dieImage4.image = randomImages.randomDice();
dieImage5.image = randomImages.randomDice();
dieImage6.image = randomImages.randomDice();
dieImage7.image = randomImages.randomDice();
println("Motion Ended")
}
我想为每个动画制作动画dieImage
编辑
我有几个 UIImageView
和 @IBOutlet
我想制作动画。
@IBOutlet weak var dieImage0: UIImageView!
@IBOutlet weak var dieImage1: UIImageView!
@IBOutlet weak var dieImage2: UIImageView!
@IBOutlet weak var dieImage3: UIImageView!
@IBOutlet weak var dieImage4: UIImageView!
@IBOutlet weak var dieImage5: UIImageView!
@IBOutlet weak var dieImage6: UIImageView!
@IBOutlet weak var dieImage7: UIImageView!
如何循环遍历它们而不是为每个制作单独的动画,我已经有一个动画设置;见上文。
更新:
除了两个骰子出现异常外,一切正常。第一个 (dieImage0
) 始终落在 1 上,第二个 (dieImage5
) 根本不会做任何事情!
更新 2:
这是我用于动画的代码:
let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
for die in dieImages {
die.animationImages = [
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die4")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die1")!,
UIImage(named: "dicey-die6")!,
UIImage(named: "dicey-die3")!,
UIImage(named: "dicey-die5")!,
UIImage(named: "dicey-die2")!,
UIImage(named: "dicey-die4")!
]
die.animationRepeatCount = 1
die.animationDuration = 1.0
}
现在一切正常!
是的,将图像放在一个数组中并循环遍历该数组。
for var i = 0; i < dieImages.count; i++ {
dieImages[i].startAnimating()
}
有帮助吗?对你的意图有点困惑,但我认为这回答了你的问题
要创建 animationImages
,我会这样做:
dieImage0.animationImages = (0..<4).reduce([UIImage]()) { images, _ in
return images + (1..<7).map { UIImage(named: "dicey-die\([=10=])")! }
}
看起来 animationImages
由 24 UIImages
- 4 组 6 张图像组成,其中图像名称为 "dicey-dieN"
,(N
被替换为(1..<7)
.)
您可以像这样创建一个包含六个图像的数组:
let images = (1..<7).map { UIImage(named: "dicey-die\([=11=])")! }
您想重复 4 次,然后将所有数组相加。您可以通过调用 (0..<4).reduce([UIImage]()) { ... }
结果将是一个包含 24 张图像的数组。
然后,正如@Chris Slowik 所建议的那样,创建一个 dieImages
数组,然后遍历它们以分配随机图像:
let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
for dieImage in dieImages {
dieImage.image = randomImages.randomDice()
dieImage.startAnimating()
}
您的整个 motionEnded
方法可能看起来像这样:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
let dieImages = [dieImage0, dieImage1, dieImage2, dieImage3, dieImage4, dieImage5, dieImage6, dieImage7]
for dieImage in dieImages {
dieImage.image = randomImages.randomDice()
dieImage.startAnimating()
}
}
我认为您 运行 遇到了 dieImage0
的问题,因为您在为它分配随机图像之前就开始播放动画。先分配图像,然后开始动画。