在我的视图控制器上,我有一个按钮可以使用以下操作启用/禁用音频:
func audioControl() {
playMusic = playMusic ? false : true // toggle
if (playMusic) {
startMusic()
audioBtn.setImage(UIImage(named: "musicOn"),for: .normal)
}
else {
stopMusic()
audioBtn.setImage(UIImage(named: "musicOff"),for: .normal)
}
}
按钮按预期切换其图像。
在同一VC上还有一个不相关的UIImageView对象,它被翻译如下:
UIView.animate(withDuration: 10.0, delay: 0.0, options: [ .curveLinear, .repeat ], animations: {
self.movingImg.center = CGPoint(x: screenSize.minX, y: screenSize.maxY)
})
这个简单的动画本身效果很好。然而,只要点击按钮,移动的Img对象就会超出屏幕边界,并且不再可见。
我不知道为什么更改按钮上的图像会导致另一个对象动画行为不端。有什么想法吗?我正在使用Swift 3。
谢谢。
在阅读了许多SO线程中的讨论后,我发现随着图像的更改(以及任何其他布局的更改(,视图控制器的viewDidLayoutSubviews()
会被调用。因此,我做了以下两件事来解决这个问题:
- 在
audioControl()
方法中,我在更新按钮图像之前删除了movingImg(即movingImg.layer.removeAllAnimations()
(的动画 - 我将
viewDidLayoutSubviews()
添加到我的视图控制器中,并在那里开始移动Img的动画
希望这种方法也能帮助其他人。