我正在编写代码,当触发发生时,UIImageView的一个实例在运行20秒的CGAffineTransform时会产生缓慢的“增长”效果。
当触发器在第一次转换完成之前再次发生时,就会发生此问题。它不是将图像重置回原来的大小,而是以指数方式缩小,这取决于触发器在第一次转换过程中发生的时间。
以下是我的当前代码:
func changeCategoryImage() {
self.categoryPanoramaImageView.transform = CGAffineTransform.identity
UIView.transition(with: self.categoryPanoramaImageView, duration: 0.4, options: .transitionCrossDissolve, animations: {
self.categoryPanoramaImageView.image = self.newPanoramaImage
}) { (done) in
UIView.animate(withDuration: 10, animations: {
self.categoryPanoramaImageView.transform = CGAffineTransform(scaleX: 5.0, y: 5.0)
})
}
}我当时的印象是,CGAffineTransform.identity会把图像重新设置到原来的大小。情况似乎并非如此。
如何停止和重置当前正在运行的转换以启动新的转换?
发布于 2018-01-24 01:11:18
我当时的印象是,CGAffineTransform.identity会把图像重新设置到原来的大小。情况似乎并非如此。
对,是这样。不是这样的。动画不是这样运作的。您正在对底层视图(即模型层)进行直接更改,但动画仍然存在(即表示层)。
因此,您将视图的transform设置为identity,但没有删除现有的动画。动画在默认情况下是加性的。因此,你正在观察的结果。
试着插入
self.categoryPanoramaImageView.layer.removeAllAnimations() 作为你功能的第一行。这样,您将删除动画并从identity中重新开始。
https://stackoverflow.com/questions/48412912
复制相似问题