XPresentation 1.0.1

XPresentation 1.0.1

kaizeiyimi维护。



  • 作者:
  • kaizei

XPresentation

制作自定义演示的API很烦人。样板代码让人的手指很痛,至少我的。

一个演示真正需要的是什么?或者我们真正关心的是什么?

  • 演示 & 展示视图的布局
  • 演示 & 隐藏动画
  • 一些额外的信息,如暗淡。

上面列出的每个都有一个系统提供的默认实现。这就是为什么与演示相关的委托方法无法实现或可以返回nil的原因。我们必须提供UIViewControllerTransitioningDelegate来自定义演示过程,UIViewControllerAnimatedTransitioning用于演示 & 隐藏动画,以及UIPresentationController的子类来添加暗淡或其他功能。

XPresentation通过一些免费布局、动画工具和基本的UIPresentationController使这些更简单。这些可以满足许多演示需求。您可以为演示的任何部分编写自己的实现。

再次强调,我只是让这个过程更容易。

快速查看

在演示UIViewController之前,调用configPresentation以提供自定义行为。

viewController.configPresentation { config in
    config.presentAnimation = Presentation.BasicAnimation.spring(
        action: .present(Presentation.Layouts.center(width: .percent(0.75), height: .value(300))),
        animator: Presentation.Animations.fadeIn()
    )
        
    config.dismissAnimation = Presentation.BasicAnimation.normal(
        action: .dismiss,
        animator: Presentation.Animations.fadeOut()
    )
        
    config.controller = Presentation.basicPresentationController()
}

注意,这里提供的一切都是作为工具提供的,您总是可以提供自己的。

然后,您可以像平常一样演示ViewController。

present(viewController, animated: true, completion: nil)

在单独的窗口中演示

有时我们想要演示一个页面,但逻辑无法很好地控制。API presentXXX & dismissXXX很容易出问题。

一种解决方案是在另一个窗口中呈现页面。也就是说

  • 创建一个指定级别的窗口。
  • 设置一个具有清晰背景颜色的根视图控制器。
  • 使窗口可见。
  • 使用根视图控制器呈现您的页面。

由于这是另一个窗口,因此其他窗口(如应用程序的主窗口)不受影响。您仍然可以在其他窗口中执行显示或推送/弹出操作。例如,每次用户点击通知进入您的应用程序时,您想显示与通知相关的页面,您可以使用新窗口来显示该页面。

let window = PresentationWindow(level: UIWindow.Level(1988), preferredStatusBarStyle: .lightContent)
window.present(yourPage)

当关闭时,应用程序的主窗口将设置为 keyWindow

使用弹出显示

弹出窗口不友好 AutoLayout。页面大小必须由 preferredContentSize 提供,它也是更改页面大小的同一属性。

提供的实用 API 只是一个简单的配置包装器。