我已经阅读了关于 segues 的其他帖子,但没有一个能解决我的问题。
简单地说,我的 ViewController
是有序的,就像一本书。我想要向后过渡(例如:从第 9 页到第 8 页)始终从左到右呈现(滑过)。我想要向前过渡(从第 9 页到第 10 页)从右到左呈现。
是的,如果您逐页翻阅,我的导航 Controller 后退按钮(左上角)会像这样显示。但是,如果您从索引处跳转,则导航 Controller 上的后退功能会将您带回到索引处。
我的目标是,如果用户从索引跳转到第 9 页(例如),然后向右滑动,它会将页面向右滑动并显示第 8 页。一旦进入第 8 页,如果他们向左滑动该页面将向左弹开,他们将再次出现在第 9 页。
默认情况下,我所有的 ViewController
都是通过从右向左滑入来呈现的。
例子: 把它想象成一本书,如果我使用索引跳到第 4 章,然后向右滑动并从堆栈中弹出一个 View ,我就会回到索引处。但是,如果您在第 4 章第 394 页上向右滑动,您就不想返回索引!您想转到第 3 章的最后一页,第 393 页!所以导航堆栈对我没有帮助。
结束例子
详细信息: 1. 我在点击按钮时使用新的 Xcode“显示”在 ViewController 之间切换。
我正在使用导航 Controller 来实现左上角的“后退”按钮功能。这使用导航堆栈并且工作正常。
但是我在底部有自己的自定义导航栏(后退按钮、主页按钮、索引按钮、前进按钮)和手势。这些是我想要的类似书籍的功能。
快速编码。
使用 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
以进行向后滑动时返回此错误
最佳答案
这就是我在不需要导航 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/