当不相关按钮的图像发生更改时,UIview动画表现不佳



在我的视图控制器上,我有一个按钮可以使用以下操作启用/禁用音频:

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()会被调用。因此,我做了以下两件事来解决这个问题:

  1. audioControl()方法中,我在更新按钮图像之前删除了movingImg(即movingImg.layer.removeAllAnimations()(的动画
  2. 我将viewDidLayoutSubviews()添加到我的视图控制器中,并在那里开始移动Img的动画

希望这种方法也能帮助其他人。

最新更新