首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIView规模化动画变化超调

UIView规模化动画变化超调
EN

Stack Overflow用户
提问于 2015-04-01 16:25:53
回答 2查看 700关注 0票数 0

当我动画化一个视图的转换,然后在第一个动画完成之前在另一个动画中重置这个变化,一切都很棒(这里用旋转显示)。动画平稳地切换到新目标:

但是,当我用一个比例来做这件事时,动画就显得格外精彩:

这是破译密码:

代码语言:javascript
复制
UIView.animateWithDuration(1) {
    self.someView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}
UIView.animateWithDuration(1,
    delay: 0.5,
    options: nil,
    animations: {
        self.someView.layer.transform = CATransform3DIdentity
    }, completion: nil
)

还有其他人看过这个吗?我做错了什么吗?

编辑:有一个好的解决办法吗?

编辑2:我相信这是一个复制的这个问题,我投票结束。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-01 21:50:16

这篇博客文章给出了答案:在iOS 8中,UIView动画是可加性的,这对于规模化动画来说是一个不幸的结果。

基本上,第二个动画和第一个动画一起发生。唯一的解决方案是在启动新动画之前显式删除原始动画:

代码语言:javascript
复制
view.layer.transform = view.layer.presentationLayer().transform
view.layer.removeAllAnimations()
票数 1
EN

Stack Overflow用户

发布于 2015-04-01 21:00:06

嗨,我不太清楚你在寻找什么,但是如果你想让视图回到原来的比例,你可以添加.Autoreverse标志。

代码语言:javascript
复制
UIView.animateWithDuration(1, delay: 0, options: .Autoreverse | .Repeat, animations: {
       myView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
    }, completion: nil)

如果您想将动画串在一起,我会在UIView.animateKeyframesWithDuration()中这样做。

代码语言:javascript
复制
UIView.animateKeyframesWithDuration(2, delay: 0.0, options: nil, animations: {

        UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
            // Animation 1
        })

        UIView.addKeyframeWithRelativeStartTime(1, relativeDuration: 0.5, animations: {
            // Animation 2
        })

    }, completion: nil)

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

https://stackoverflow.com/questions/29396002

复制
相关文章

相似问题

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