iOS Segue - 从左到右 -

标签 ios swift xcode6 segue uiviewanimation

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

简单地说,我的 ViewController 是有序的,就像一本书。我想要向后过渡(例如:从第 9 页到第 8 页)始终从左到右呈现(滑过)。我想要向前过渡(从第 9 页到第 10 页)从右到左呈现。

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

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

默认情况下,我所有的 ViewController 都是通过从右向左滑入来呈现的。

例子: 把它想象成一本书,如果我使用索引跳到第 4 章,然后向右滑动并从堆栈中弹出一个 View ,我就会回到索引处。但是,如果您在第 4 章第 394 页上向右滑动,您就不想返回索引!您想转到第 3 章的最后一页,第 393 页!所以导航堆栈对我没有帮助。

结束例子

详细信息: 1. 我在点击按钮时使用新的 Xcode“显示”在 ViewController 之间切换。

  1. 我正在使用导航 Controller 来实现左上角的“后退”按钮功能。这使用导航堆栈并且工作正常。

  2. 但是我在底部有自己的自定义导航栏(后退按钮、主页按钮、索引按钮、前进按钮)和手势。这些是我想要的类似书籍的功能。

  3. 快速编码。

  4. 使用 Xcode 6.3

我读到有动画代码。我读过可以使用的深度编程转换。没有简单的方法可以从左侧选择我想要呈现的 segues 并轻松反转动画,这似乎很疯狂。

谢谢!

尝试日志:

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 以进行向后滑动时返回此错误

This error is returned when I insert DCDC's code into an IBAction for my back-swipe

最佳答案

这就是我在不需要导航 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中,单击您要更改的转场。在属性检查器中将类型更改为“自定义”并将类更改为“SegueFromLeft”

关于iOS Segue - 从左到右 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763519/

相关文章:

swift - Swift 4 中的 KVO 监听器问题

ios - 设置viewdidload或navigationBar后如何设置 View ?

swift - Swift Playground 中的空类给出 __lldb_expr_ 错误

objective-c - 使用 ARC,如何正确设置具有副作用的属性?

ios - 如何在 iOS 上获取多个目的地的预计到达时间?

ios - 如何用Xcode从苹果源代码编译CoreFoundation?

macos - Swift 字符串变量本地化

ios - 将 GameViewController.swift 链接到 GameScene.swift

ios - 有时单元格加载顺序不正确?

iOS 8 - 如何隐藏键盘上方的建议列表?