CustomSegue 4.0.0

CustomSegue 4.0.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2019年4月
SPM支持 SPM

phimage 维护。



  • 作者:
  • phimage

CustomSegue

License Platform Language Issues Cocoapod

为 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 之一:SlideDownSegueSlideUpSegueSlideLeftSegueSlideRightSegueChildWindowSegue 等。

配置 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

💡您可以将此 segue 存储到 destinationController 中,并通过调用 unperform 恢复 sourceController

SplitViewSegue

替换 sourceController 父级的最后一个分视图项或添加一个新的 NSSplitViewController

在 segue 上设置 replacefalse 以添加新的分视图项。

DismissSegue

用于从控制器中移除当前控制器的 segue

允许在故事板中显示动作作为 segue 而不是简单的 IBAction

从ViewSegu中过渡

使用源控制器及其 transitionFromViewController 函数进行 segue

⚠️ parentViewController 必须设置,并且对于 sourceControllerdestinationController 必须相同

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的集中式依赖管理器。了解更多

  1. 将项目添加到您的 Podfile 中。

    use_frameworks!
    
    pod 'CustomSegue'
  2. 运行 pod install 并且打开 .xcworkspace 文件以启动 Xcode。

使用 Carthage

Carthage 是 Objective-C 和 Swift 的去中心化依赖管理器。

  1. 将项目添加到您的 Cartfile

    github "phimage/CustomSegue"
    
  2. 运行 carthage update 并遵循添加 Prephirences 到您项目的 额外步骤