gpt4 book ai didi

swift - 停止和重置 CGAffineTransform

转载 作者:行者123 更新时间:2023-11-28 12:11:21 25 4
gpt4 key购买 nike

我正在尝试编写代码,当触发发生时,UIImageView 的实例会创建一个缓慢的“增长”效果,CGAffineTransform 会运行 20 秒。

当触发器在第一次转换完成之前再次发生时,就会出现此问题。图像不会重置回其原始大小,而是呈指数缩小,具体取决于第一次转换期间触发发生的时间。

这是我当前的代码:

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 会将图像重置为原始大小。情况似乎并非如此。

如何暂停和重置当前正在运行的转换以启动新转换?

最佳答案

I was under the impression that CGAffineTransform.identity would reset the image back to it's original size. This is seems to not be the case.

正确。事实并非如此。这不是动画的工作原理。您正在直接更改底层 View (即模型层),但动画仍然存在(即表示层)。

因此,您将 View 的 transform 设置为 identity,但您没有删除现有动画。默认情况下,动画是可加的。因此您观察到的结果。

尝试插入

self.categoryPanoramaImageView.layer.removeAllAnimations() 

作为函数的第一行。这样,您移除动画并从identity 重新开始。

关于swift - 停止和重置 CGAffineTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com