切换到不同的视图控制器后动画停止

Posted

技术标签:

【中文标题】切换到不同的视图控制器后动画停止【英文标题】:Animation stops after segueing to different view controller 【发布时间】:2015-04-25 17:21:42 【问题描述】:

我的应用中有一个动画,它基本上只是让 UIButton 增长和缩小,让用户可以清楚地看到他们应该点击。

问题在于,虽然在视图首次出现时它可以正常工作,但如果我转到不同的视图控制器(使用 segue)然后返回(没有任何反应),它就无法正常工作。

这是我的代码:

override func viewWillAppear(animated: Bool) 
    expandAnimation()


func expandAnimation() 
    var animation = CABasicAnimation(keyPath: "transform.scale")
    animation.toValue = NSNumber(float: 0.9)
    animation.duration = 1
    animation.repeatCount = 100
    animation.autoreverses = true
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    appDevButton.layer.addAnimation(animation, forKey: nil)

我确定这是一个简单的修复方法,但我在网上找不到任何信息。

【问题讨论】:

不要忘记在 viewWillAppear 中调用 super:. 好像没什么区别…… 【参考方案1】:

离开视图时从按钮中删除动画,

    override func viewDidDisappear(animated: Bool) 
        super.viewDidDisappear(animated)
        appDevButton.layer.removeAllAnimations()
    

【讨论】:

确实修复了它,但我还必须将它从 viewWillAppear() 更改为 viewDidAppear()。谢谢! @user3746428 我试过了,但它似乎没有用......你做了什么不同于上面所说的吗?目前我在 viewDidAppear 方法中使用 [super viewDidAppear:YES] 调用了该方法; ,对于 viewDidDisappear 也是如此。不知道为什么它不起作用.. 我遇到了类似的问题,只需在viewDidAppear() 中调用animation() 没有 removeAllAnimations()viewDidDisappear 中即可解决。这是不好的做法吗?【参考方案2】:

尝试解决方案:

    // Allows the animation to appear on View Controller
    override func viewWillAppear(_ animated: Bool) 
        super.viewDidAppear(true)

        // Function call
        expandAnimation()
    

    // Allows the animation to disappear from View Controller 
    override func viewDidDisappear(_ animated: Bool) 
        super.viewDidDisappear(true)

        // Function call
        expandAnimation()
    

【讨论】:

以上是关于切换到不同的视图控制器后动画停止的主要内容,如果未能解决你的问题,请参考以下文章

为啥要更改选项卡,停止 ios 应用程序中的动画?

控制器视图停止动画无法识别的选择器发送到实例

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

在没有导航控制器的情节提要中切换 UIViewControllers

如何重启 UIRefreshControl 动画?

使用 NSViewController 在 osx 上切换视图控制器