使用循环为多个uiimageview添加属性



我有8个UImageView,我正在添加动画。我知道我可以制作8次动画,但是我可以使用循环,或者是插值吗?

下面是我的动画代码:
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 s和@IBOutlet s,我想动画。

    @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
}

现在一切正常!

创建animationImages,我将这样做:

dieImage0.animationImages = (0..<4).reduce([UIImage]()) { images, _ in
    return images + (1..<7).map { UIImage(named: "dicey-die($0)")! }
}

看起来animationImages由24个UIImages - 4组6个图像组成,其中图像名称为"dicey-dieN", (N(1..<7)范围内的数字代替)

你可以像这样创建一个包含六个图像的数组:

let images = (1..<7).map { UIImage(named: "dicey-die($0)")! }

你想这样做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的问题,因为你在分配随机图像之前开始动画。

是的,将图像放入数组中并遍历数组。

for var i = 0; i < dieImages.count; i++ {
    dieImages[i].startAnimating()
}

有帮助吗?我对你的意图有点困惑,但我认为这回答了你的问题

最新更新