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

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

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

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

我该如何解决这个问题?

提前致谢。

【问题讨论】:

标签: ios swift segue uistoryboard uistoryboardsegue


【解决方案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”框(是)。现在警告消失了,这就是我回答自己问题的原因。

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

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多