CustomSegue
为 OSX Storyboards 定制的 Custom segue。滑动和交叉淡入淡出效果,新的自定义窗口。
class MyViewController: NSViewController {
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?)
if segue.identifier == "configured" {
if let segue = segue as? PresentWithAnimatorSegue, animator = segue.animator as? TransitionAnimator {
animator.duration = 1
animator.transition = [.SlideDown, .Crossfade]
}
}
}
通过 NSViewControllerTransitionOptions 配置 TransitionAnimator
过渡,并通过 transitionFromViewController
函数减少了使用父控制器的要求。
演示
在 示例 文件夹中,您可以运行 pod install
并打开 Example.xcworkspace
。
如何使用
在您的 storyboard 中使用 PresentWithAnimatorSegue
或使用已经配置好的 segue 之一:SlideDownSegue
、SlideUpSegue
、SlideLeftSegue
、SlideRightSegue
、ChildWindowSegue
等。
配置 segue
在您的故事板中为 segue 添加一个故事板标识符。
然后在您的源视图控制器中,您可以在 prepare(for segue
函数中配置 segue。
class MyViewController: NSViewController {
override func prepare(for segue: NSStoryboardSegue, sender: AnyObject?) {
if segue.identifier?.rawValue == "PetDetail" {
...
您可以使用 Natalie 生成关于 segue 的代码。使用此生成代码,您可以进行
override func prepare(for segue: NSStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "PetDetail" {
// or better the constant generated
if segue == MyViewController.Segue.petDetail {
您可以在 animator
对象的 TransitionAnimator
类型上更改持续时间、过渡类型等。
if let segue = segue as? PresentWithAnimatorSegue, animator = segue.animator as? TransitionAnimator {
animator.duration = 1
animator.transition = [.SlideDown, .Crossfade]
}
对于 ChildWindowSegue
,您可以自定义显示目标控制器的 NSWindow
。
if let segue = segue as? ChildWindowSegue, animator = segue.animator as? ChildWindowAnimator {
animator.windowCustomizer = { window in
window.styleMask = NSBorderlessWindowMask
window.setFrameOrigin(NSPoint(...))
}
}
if let segue = segue as? PresentWithAnimatorSegue {
segue.animator = MyAnimator()
}
其他 segue
ReplaceWindowContentSegue
用 destinationController
替换 sourceController
的父级 NSWindow
中的 contentViewController
。
destinationController
中,并通过调用 unperform
恢复 sourceController
。
SplitViewSegue
替换 sourceController
父级的最后一个分视图项或添加一个新的 NSSplitViewController
在 segue 上设置 replace
为 false
以添加新的分视图项。
DismissSegue
用于从控制器中移除当前控制器的 segue
允许在故事板中显示动作作为 segue 而不是简单的 IBAction
。
从ViewSegu中过渡
使用源控制器及其 transitionFromViewController
函数进行 segue
parentViewController
必须设置,并且对于 sourceController
和 destinationController
必须相同
TablePopoverSegue
通过相对于选中表格行的位置显示 destinationController
tableView
设置到 segue 对象中(在 prepareForSegue
中完成)
prepareForSegue
中获取表格选中行并传递数据给 destinationController
显示视图控制器实用方法
在 NSViewController
中添加了一个小实用方法,使用新的枚举 PresentationMode
。
viewController.present(.asSheet)
viewController.present(.asModalWindow)
viewController.present(.segue(segueIdentifier: "id"))
viewController.present(.animator(animator: MyAnimator()))
viewController.present(.asPopover(...
parentViewController
必须设置
安装
使用 CocoaPods
CocoaPods 是Objective-C和Swift的集中式依赖管理器。了解更多。
-
将项目添加到您的 Podfile 中。
use_frameworks! pod 'CustomSegue'
-
运行
pod install
并且打开.xcworkspace
文件以启动 Xcode。
使用 Carthage
Carthage 是 Objective-C 和 Swift 的去中心化依赖管理器。