禁用转场动画

Posted

技术标签:

【中文标题】禁用转场动画【英文标题】:Disabling segue animation 【发布时间】:2016-01-13 20:04:50 【问题描述】:

我想在我的故事板中显示(例如推送)segues,以连接我的视图控制器和我的导航控制器。然后视图控制器上的导航栏将正确显示。 例如:使用 show detail 或 present modaly,导航栏会消失

但我不想要转场动画。 Xcode 给出的警告如下:“在 ios 9.0 之前不可用”

我想要 iOS 7.0 或 8.0 的部署目标

我该如何解决这个问题?

提前致谢。

【问题讨论】:

看到这个链接可能对你有帮助***.com/questions/32890470/… 【参考方案1】:

您可以在执行 segue 之前和再次启用之后禁用动画。

UIView.setAnimationsEnabled(false)
self.performSegueWithIdentifier("next", sender: nil)
UIView.setAnimationsEnabled(true)

这将执行没有动画的转场。

【讨论】:

是的,我会的,但是有一个问题:你说'在启用它之后':你的意思是你把 UIView.setAnimationsEnabled(true) 直接放在 performegue 之后,例如 IBAction? 如果您不重新启用它,您的应用中将无法运行任何动画。 是的,我明白了。但它看起来很奇怪(对于我作为一个相对的新手)你执行一个 segue 并且这个UIView.setAnimationsEnabled(true) 之后仍然会被调用(如果你明白我的意思)。 我不知道它在后台是如何工作的(苹果的东西), performSegueWithIdentifier 我认为会调用 UIView.animateWithDuration 方法,如果你在调用它之前禁用动画,那么它不会动画。然后它将转到第 3 行,您可以在其中再次为其他动画启用动画。 这对我不起作用。我只需要使用“false”语句,并且在 viewDidDisappear 中我必须将动画设置回“true”。【参考方案2】:

点击 Main.Storyboard 中的 segue 箭头,然后:

查看Animates

【讨论】:

我知道,但这会发出警告:“禁用 segue 动画在 iOS 9.0 之前不可用” @codeDude 是的,这是不推荐使用的方法。这很正常;) O.o 它对我有用,因为我的部署目标是 iOS 9.0,所以根本没有警告。但是,它被弃用了吗?我希望收到有关它的警告。 我不知道你为什么收到这么多反对票,但这对我有用!【参考方案3】:

如果您想在代码中切换动画状态,您可以在情节提要中复制您的 segue,使用不同的标识符,以及相同的起点和终点。然后制作一个主题动画,另一个不制作。然后,使用所需的标识符执行 performSegue。

class MyNavigationController : UINavigationController 

    var firstTransitionAnimated : Bool = true // or false, based on initialization


    override func viewDidLoad() 
        super.viewDidLoad()
        var properSegue = firstTransitionAnimated ? "animated_segue" : "not_animated_segue"
        self.performSegue(withIdentifier: properSegue, sender: self)
    

【讨论】:

这是天才。【参考方案4】:

我使用此线程中的 Swift 答案制作了一个自定义转场:Push segue in xcode with no animation

所以:

class ShowNoAnimationSegue: UIStoryboardSegue 

    override func perform() 
        let source = sourceViewController as UIViewController
        if let navigation = source.navigationController 
            navigation.pushViewController(destinationViewController as UIViewController, animated: false)
        
    

在 Xcode 中,在自定义 Segue 的 Attributes Inspector 中,我选中了“Animates”框(是)。现在警告消失了,这就是我回答自己问题的原因。

我还不确定这是否是一个持久的解决方案。

【讨论】:

以上是关于禁用转场动画的主要内容,如果未能解决你的问题,请参考以下文章

swift自定义转场动画(比较有难度)

CATransition(转场动画)

iOS开发UI篇—核心动画(转场动画和组动画)

iOS开发UI篇—核心动画(转场动画和组动画)

Android中的转场动画以及material-components-android 使用

Android中的转场动画以及material-components-android 使用