自定义翻转动画segue - Swift 3

时间:2017-01-11 14:37:51

标签: ios swift uiviewanimationtransition

我的目标是从view1到view2执行翻转动画,反之亦然。 我只想翻转视图而不是整个viewController

设置如下: 我在我的storyboard中嵌入了一个视图控制器(fromViewController)。我画了一个segue到第二个视图控制器(toViewController)并使其成为自定义segue。 现在我想添加一个翻转动画,从左到右,从右到左翻转视图控制器的视图。 前向动画已经起作用(从fromViewController到toViewController),但是后向动画不起作用。 我在这里检查了很多类似的问题,但我找不到符合我需求的答案。

我希望有人可以帮助我解决这个问题。

自定义segue的类是FlipSegue。 这是我的代码:

import UIKit

extension UIViewController{
    var isVisible: Bool{
        return self.isViewLoaded && self.view.window != nil
    }
}

class FlipSegue: UIStoryboardSegue {

    override func perform() {
        let fromViewController = self.source
        let toViewController = self.destination

        if fromViewController.isVisible{
            UIView.transition(from: fromViewController.view, to: toViewController.view, duration: 1, options: .transitionFlipFromLeft, completion: nil)
        }
        else{
             UIView.transition(from: toViewController.view, to: fromViewController.view, duration: 1, options: .transitionFlipFromRight, completion: nil)
        }
    }
}

仅供参考:toViewController不是NavigationController的一部分。

编辑:我通过点击导航控制器左侧的UIBarButton来执行segue。 Button正在调用FlipSegue类中的perform函数。也许问题是toViewController不是导航堆栈的一部分?所以我将它添加到导航堆栈然后我有一个后退按钮,我可以使用标准动画返回到fromViewController,但这不是我想要的。

1 个答案:

答案 0 :(得分:0)

我没有试过这个,但你应该在两种情况下使用from:fromViewcontroller.view,因为在后面的segue中,from仍然是起始VC。