我已经阅读了有关segue的其他帖子,但没有一个解决我的问题。

简而言之,我的ViewController是有序的,就像一本书一样。我希望向后过渡(例如:从第9页到第8页)始终存在(从左向右滑动)。我希望向前过渡(从第9页到第10页)显示从右到左。

是的,如果您逐页翻页,则我的导航 Controller 后退按钮(左上角)将显示为这样。但是,如果您从索引跳入,则导航 Controller 上的后退功能会将您带回到索引。

我的目标是,如果用户从索引跳到第9页(例如),然后向右滑动,它将向右轻拂该页面并显示第8页。一旦进入第8页,如果他们向左滑动滑到左侧,它们将再次出现在第9页上。

默认情况下,我所有的ViewController都是从右向左滑动来显示的。

例子:
把它想像成一本书,如果我使用索引跳到第4章,然后向右轻扫并从堆栈中弹出 View ,我将回到索引。但是,如果您在第394页的第4章,并且向右轻扫,则不想返回索引!您想转到第3章的最后一页,第393页!因此,导航堆栈对我没有帮助。

结束范例

细节:
1.我在按钮上使用新的Xcode“Show”在ViewController之间切换。

  • 我使用的是导航 Controller ,用于左上角的“返回”按钮功能。这使用导航堆栈并正常工作。
  • 但是我在底部有自己的自定义导航栏(“后退”按钮,“主页”按钮,“索引”按钮,“前进”按钮)和手势。这些就是我想拥有的类似书籍的功能。
  • 快速编码。
  • 使用Xcode 6.3

  • 我读过那里有动画代码。我已经阅读了可以使用的深度程序化转换。似乎很疯狂,没有一种简单的方法可以只从左侧选择我要呈现的片段,并轻松地反转动画。

    谢谢!

    尝试记录:
    I tried DCDC's code:
        UIView.transitionWithView(self.window!, duration: 0.5, options:.TransitionFlipFromLeft, animations: { () -> Void in
                self.window!.rootViewController = mainVC
                }, completion:nil)
    

    当我将DCDC的代码插入IBAction进行回扫时,将返回此错误

    最佳答案

    这是我不需要导航 Controller 即可达到的效果的方式。尝试以下方法:

    swift 4:

    import UIKit
    class SegueFromLeft: UIStoryboardSegue {
        override func perform() {
            let src = self.source
            let dst = self.destination
    
            src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
            dst.view.transform = CGAffineTransform(translationX: -src.view.frame.size.width, y: 0)
    
            UIView.animate(withDuration: 0.25,
                                  delay: 0.0,
                                options: .curveEaseInOut,
                             animations: {
                                    dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
                                    },
                            completion: { finished in
                                    src.present(dst, animated: false, completion: nil)
                                        }
                            )
        }
    }
    

    swift 3:
    import UIKit
    
    class SegueFromLeft: UIStoryboardSegue
    {
        override func perform()
        {
            let src = self.sourceViewController
            let dst = self.destinationViewController
    
            src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)
            dst.view.transform = CGAffineTransformMakeTranslation(-src.view.frame.size.width, 0)
    
            UIView.animateWithDuration(0.25,
                delay: 0.0,
                options: UIViewAnimationOptions.CurveEaseInOut,
                animations: {
                    dst.view.transform = CGAffineTransformMakeTranslation(0, 0)
                },
                completion: { finished in
                    src.presentViewController(dst, animated: false, completion: nil)
                }
            )
        }
    }
    

    然后在 Storyboard 中,单击要更改的segue。在属性检查器中,将类型更改为“自定义”,并将类更改为“SegueFromLeft”

    10-05 20:04