2017-03-02 63 views
0

我有一个创建自定义赛格瑞像下面如何在iOS中使用swift在自定义segue中配置动画?

class DismissSegue: UIStoryboardSegue { 
override func perform() { 
    sourceController.dismissViewControllerAnimated(true, completion: nil) 
} 
} 

在某些情况下我想解雇我currentVC没有动画,但在某些情况下与动画。这怎么可能?我尝试设置@IBInspectable,但没有运气,它不显示故事板中的属性。任何形式的帮助表示赞赏。谢谢。

+0

如果您不满意,通常只需为'dismiss'调用指定'true'或'false'。然后它为我们照顾它。或者出于某种原因你需要做一个放松的过程?或者你在做自定义转换(例如'UIViewControllerAnimatedTransitioning')吗?也许你可以描述你试图解决的更广泛的问题。 – Rob

+0

其实我已经编辑过它......我创建了一个自定义的segue,它的动画总是如此,但现在我必须改变它的假/真取决于情况。我怎样才能使它可编辑? @抢 – coolly

回答

0

一对夫妇的想法:

  • 如果你有决心使用DismissSegue,你可以在斯威夫特3:

    class DismissSegue: UIStoryboardSegue { 
        override func perform() { 
         let animated = (source as? OptionalAnimation)?.animateDismiss ?? true 
         source.dismiss(animated: animated) 
        } 
    } 
    

    或者雨燕2.3:

    class DismissSegue: UIStoryboardSegue { 
        override func perform() { 
         let animated = (source as? OptionalAnimation)?.animateDismiss ?? true 
         sourceController.dismissViewControllerAnimated(animated, completion: nil) 
        } 
    } 
    

    其中

    protocol OptionalAnimation { 
        var animateDismiss: Bool { get } 
    } 
    

    而且,您的原始视图控制器将(a)符合此协议;和(b)设置animateDismiss属性。

  • 坦率地说,如果你只是在你的perform方法调用dismissViewControllerAnimated/dismiss,我会使用这样的SEGUE气馁。您一般不会使用segue来解雇,只需在视图控制器中从@IBAction拨打dismissViewControllerAnimated/dismiss即可。然后,您可以更直接地设置animated标志。或者,如果您确实想要使用segue,则可以使用unwind segue。例如,你可以有一个动画放松,另一个没有(你在IB中设置),然后启动哪个适当的。

  • 如果你正在做自定义动画,你一般会使用自定义转换(参见WWDC 2013 Custom Transitions Using View Controllers)。然后,您可以控制您执行或不执行的动画。显然,这是更复杂的,但如果你正在做自定义动画,这是解决它的方法。

相关问题