首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止和重置CGAffineTransform

停止和重置CGAffineTransform
EN

Stack Overflow用户
提问于 2018-01-24 00:11:04
回答 1查看 930关注 0票数 0

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

当触发器在第一次转换完成之前再次发生时,就会发生此问题。它不是将图像重置回原来的大小,而是以指数方式缩小,这取决于触发器在第一次转换过程中发生的时间。

以下是我的当前代码:

代码语言:javascript
复制
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会把图像重新设置到原来的大小。情况似乎并非如此。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 01:11:18

我当时的印象是,CGAffineTransform.identity会把图像重新设置到原来的大小。情况似乎并非如此。

对,是这样。不是这样的。动画不是这样运作的。您正在对底层视图(即模型层)进行直接更改,但动画仍然存在(即表示层)。

因此,您将视图的transform设置为identity,但没有删除现有的动画。动画在默认情况下是加性的。因此,你正在观察的结果。

试着插入

代码语言:javascript
复制
self.categoryPanoramaImageView.layer.removeAllAnimations() 

作为你功能的第一行。这样,您将删除动画并从identity中重新开始。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48412912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档