首页 > 解决方案 > 如何使用同一个 UIButton 在不同时间执行多个不同的动画?

问题描述

我正在创建一个动画序列,当按下一个按钮时,一个对象会淡出。当再次按下同一个按钮时,另一个对象会淡出。这种情况一直发生,直到 8 个对象淡出。我已经尝试过使用代码,到目前为止,我已经让代码淡出一个对象,一次淡出两个或更多对象,但还没有像上面描述的那样成功地做到这一点。到目前为止,这是我的代码:

import UIKit

class DrinkWaterViewController: UIViewController {

    @IBOutlet weak var glassOne: UIImageView!
    @IBOutlet weak var glassTwo: UIImageView!
    @IBOutlet weak var glassThree: UIImageView!
    @IBOutlet weak var glassFour: UIImageView!
    @IBOutlet weak var glassFive: UIImageView!
    @IBOutlet weak var glassSix: UIImageView!
    @IBOutlet weak var glassSeven: UIImageView!
    @IBOutlet weak var glassEight: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.glassOne.alpha = 1.0
        self.glassTwo.alpha = 1.0
    }

    @IBAction func drunkOne(_ sender: Any){

        if self.glassOne.alpha == 1.0{

        UIView.animate(withDuration: 1.5, delay: 0.2, animations:
            {self.glassOne.alpha = CGFloat(0.1)}
        )
    }
}

标签: swiftxcodeanimationuibutton

解决方案


将您的眼镜放入一个数组glasses并添加一个属性以跟踪nextToFade. 然后只需淡化glasses[nextToFade]和递增nextToFade1

class DrinkWaterViewController: UIViewController {

    @IBOutlet weak var glassOne: UIImageView!
    @IBOutlet weak var glassTwo: UIImageView!
    @IBOutlet weak var glassThree: UIImageView!
    @IBOutlet weak var glassFour: UIImageView!
    @IBOutlet weak var glassFive: UIImageView!
    @IBOutlet weak var glassSix: UIImageView!
    @IBOutlet weak var glassSeven: UIImageView!
    @IBOutlet weak var glassEight: UIImageView!

    // array to hold the glasses so that they can be indexed
    var glasses = [UIImageView]()

    // index of next glass to fade
    var nextToFade = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        // put the glasses into the array
        glasses = [glassOne, glassTwo, glassThree, glassFour,
                    glassFive, glassSix, glassSeven, glassEight]

        // make sure they're all visible
        glasses.forEach { $0.alpha = 1.0 }
    }

    @IBAction func drunkOne(_ sender: Any) {
        // make sure not to index beyond the end of the array
        guard nextToFade < glasses.count else { return }

        let glass = glasses[nextToFade]
        nextToFade += 1
        UIView.animate(withDuration: 1.5, delay: 0.2, animations:
            { glass.alpha = 0.1 }
        )
    }
}

推荐阅读