首页 > 解决方案 > Xcode 9 - 尝试为 UIView 设置两次动画

问题描述

我正在尝试为按钮设置动画,使其向左倾斜 pi/5,然后向右倾斜相同的量,以便它回到原来的位置(我试图让按钮看起来好像在摇晃)

但是,Xcode 会切断动画,因为它意识到按钮整体不会改变角度。这是当前代码 - 如果有人对动画按钮来回摇动有任何建议,那将非常感激。

for i in 0...8 {

if pressedArray[i] == true {

    self.panlButtons[i].backgroundColor = UIColor.clear

    UIView.animate(withDuration: 1, animations:{

        self.panlButtons[i].backgroundColor = self.wrongColour
        self.panlButtons[i].transform = CGAffineTransform(rotationAngle: CGFloat.pi / -5)

    })


    UIView.animate(withDuration: 1, animations:{

        self.panlButtons[i].backgroundColor = self.wrongColour
        self.panlButtons[i].transform = CGAffineTransform(rotationAngle: CGFloat.pi / 5)

    }, completion: { finished in


        self.panlButtons[i].backgroundColor = self.notPressedColour

    })

代码说明:pressedArray[]是一个Bools数组,表示按下了哪个按钮 panlButtons[]是一个按钮数组for循环从0-8是因为只有8个按钮

标签: iosiphoneswiftxcodeuiviewanimation

解决方案


在第一个动画完成时移动下一个动画,如下图

UIView.animate(withDuration: 1, animations:{
    self.panlButtons[i].backgroundColor = self.wrongColour
    self.panlButtons[i].transform = CGAffineTransform(rotationAngle: CGFloat.pi / -5)
}, completion: {
    UIView.animate(withDuration: 1, animations:{
        self.panlButtons[i].backgroundColor = self.wrongColour
        self.panlButtons[i].transform = CGAffineTransform(rotationAngle: CGFloat.pi / 5)
    }, completion: { finished in
        self.panlButtons[i].backgroundColor = self.notPressedColour
    })
})

推荐阅读