Presentr 是 iOS 8 中引入的 Custom View Controller Presentation API 的简单可定制包装器。
关于
iOS 允许以模态方式显示任何视图控制器,但如果不希望显示的视图控制器覆盖整个屏幕或要修改其显示或过渡方式,则需要使用 Custom View Controller Presentation API。
如果您的应用程序中多次执行此操作,这可能很麻烦。 Presentr 简化所有这些操作。您只需根据希望呈现视图控制器的方式配置 Presentr 对象,然后该框架会为您处理所有内容。
以下是一些以不同方式显示 Alert UI 的示例。但是,使用 Presentr,您可以在任何呈现类型中显示您创建的任何自定义视图控制器,或者创建您自己的自定义类型!
新增功能
1.9
- Xcode 10 / iOS 12 / Swift 4.2 支持
- 2.0 大版本更新前的最后一个版本
1.3.1
- 新增
FlipHorizontal
过渡类型(感谢 @falkobuttler) - 新增
CoverFromCorner
过渡类型(感谢 @freakdragon) - 新增
customOrientation
模态大小(感谢 @freakdragon) - 键盘翻译现在在所有呈现类型的所有背景下都适用(感谢 @oxozle)
- 其他错误修复和改进
1.3
- Swift 4 / Xcode 9 / iOS 11 支持
- 错误修复
1.2.0
- 您可以添加自定义背景视图。(感谢 @clebta)
- 为 AlertViewController 添加自定义文本颜色
- 新增 PresentationType 的 .dynamic,允许使用 AutoLayout 动态调整 ViewController 的大小。
- 您可以将上下文设置为在子视图控制器上而不是整个屏幕上进行适当的展示。
- 您还可以设置上下文外触摸的响应行为。
- 更简单的Presentr动画架构。修改现有的转换动画或自行创建更简单。
- 引入两个新动画以替换系统动画,CoverVertical和CrossDissolve。
- 所有动画现在都是Presentr的,不再使用Apple的动画。这允许更好的控制和更少的错误。
- 滑动消失功能得到很大改进。
- 修复bug和其他小改进。
1.1.0
- 您现在可以创建自己的自定义转换动画。详细请查看readme文件。(感谢@fpg1503和@danlozano)
- 新增动画:coverVerticalWithSpring(感谢@fpg1503)
查看CHANGELOG.md了解历史版本
贡献
- 分支项目
- 检出 Develop 分支
- 从 Develop 分枝创建 Feature 分支
- 创建出色的功能/增强/错误修复
- 可选创建 Issue 讨论功能
- 从您的 Feature 分支向Presentr的 Develop 分支提交拉取请求
支持的Swift版本
Presentr版本 | Swift版本 | 最低iOS版本 |
---|---|---|
<= 0.1.8 | Swift 2.2 | >= iOS 8.0 |
== 0.2.1 | Swift 2.3 | >= iOS 8.0 |
>= 1.0.0 | Swift 3.0 | >= iOS 9.0 |
>= 1.3 | Swift 4.0 | >= iOS 9.0 |
安装
Cocoapods
use_frameworks!
pod 'Presentr'
Carthage
将Presentr添加到你的Cartfile
github "IcaliaLabs/Presentr"
使用以下方法安装:
carthage update --platform ios
手动
- 下载并将
/Presentr
文件夹拖放到你的项目。 - 完成!
入门
创建Presentr对象
注意:请将Presentr对象作为属性持留在展示/当前视图控制器上,因为它将作为自定义展示的代理使用,所以必须保持对其的强引用。
你的Presentr可以像这样简单:
class ViewController: UIViewController {
let presenter = Presentr(presentationType: .alert)
}
也可以这样复杂:
class ViewController: UIViewController {
let presenter: Presentr = {
let width = ModalSize.full
let height = ModalSize.fluid(percentage: 0.20)
let center = ModalCenterPosition.customOrigin(origin: CGPoint(x: 0, y: 0))
let customType = PresentationType.custom(width: width, height: height, center: center)
let customPresenter = Presentr(presentationType: customType)
customPresenter.transitionType = .coverVerticalFromTop
customPresenter.dismissTransitionType = .crossDissolve
customPresenter.roundCorners = false
customPresenter.backgroundColor = .green
customPresenter.backgroundOpacity = 0.5
customPresenter.dismissOnSwipe = true
customPresenter.dismissOnSwipeDirection = .top
return customPresenter
}()
}
展示视图控制器。
实例化你想要展示的视图控制器,并使用自定义Presentr对象和方法进行自定义展示。
let controller = SomeViewController()
customPresentViewController(presenter, viewController: controller, animated: true, completion: nil)
这是一个提供的辅助方法,作为UIViewController的扩展。它处理将Presentr对象设置为展示和转场的代理。
请记住在ViewController上设置自动布局,以便在任意尺寸上都能够很好地显示。
PresentationType(以及所有其他属性)可以在之后改变,以便将Presentr对象用于其他展示。
presenter.presentationType = .popup
主要类型
展示类型
public enum PresentationType {
case alert
case popup
case topHalf
case bottomHalf
case fullScreen
case dynamic(center: ModalCenterPosition)
case custom(width: ModalSize, height: ModalSize, center: ModalCenterPosition)
}
警报 & 弹窗
下半部分 & 上半部分
过渡类型
public enum TransitionType {
case coverVertical
case crossDissolve
case coverVerticalFromTop
case coverHorizontalFromRight
case coverHorizontalFromLeft
case custom(PresentrAnimation)
}
属性
属性是可选的,因为它们都有默认值。
Presentr 所需的仅是 展示类型。您可以使用其中一个初始化对象,但它之后可以被更改。
presenter.presentationType = .popup
您可以选择一个过渡类型,这将用于显示或关闭视图控制器。
presenter.transitionType = .coverVerticalFromTop
presenter.dismissTransitionType = .crossDissolve
您可以更改将要展示在视图控制器下面的背景视图的背景颜色和透明度。您还可以设置一个将在内置背景视图之上显示的自定义背景视图。
presenter.backgroundColor = UIColor.red
presenter.backgroundOpacity = 1.0
presenter.customBackgroundView = UIView()
还可以开启背景模糊效果,并更改其样式。如果开启模糊效果,背景颜色和透明度将被忽略。
presenter.blurBackground = true
presenter.blurStyle = UIBlurEffectStyle.light
您可以选择禁用将要显示的视图控制器的圆角。
presenter.roundCorners = false
如果设置为true,您可以修改圆角半径。
presenter.cornerRadius = 10
使用PresentrShadow结构可以为将要展示的视图控制器设置自定义阴影。
let shadow = PresentrShadow()
shadow.shadowColor = .black
shadow.shadowOpacity = 0.5
shadow.shadowOffset = CGSize(5,5)
shadow.shadowRadius = 4.0
presenter.dropShadow = shadow
您可以选择禁用在背景上点击时弹出视图控制器的行为。默认为true。或者,您也可以禁用 dismissOnTap 和 dismissOnSwipe 的动画。
presenter.dismissOnTap = false
presenter.dismissAnimated = false
您可以使 dismissOnSwipe 允许在将要展示的视图控制器内部滑动以关闭它。默认为false,因为如果您的视图控制器使用了任何类型的滚动视图,这不被推荐,因为它会干扰滚动。
您也可以设置方向,例如,如果你的 ViewController 是顶部的 Alert,的你希望通过向上滑动来关闭它。
presenter.dismissOnSwipe = true
presenter.dismissOnSwipeDirection = .top
如果您在模态视图中包含文本字段,且将 presentationType 属性设置为 popup,您可以使用 KeyboardTranslationType 来告诉 Presentr 如何处理键盘弹出时的模态视图。
presenter.keyboardTranslationType = .none
presenter.keyboardTranslationType = .moveUp
presenter.keyboardTranslationType = .compress
presenter.keyboardTranslationType = .stickToTop
如果您在一个 SplitViewController 或其他类型的容器/子 ViewController 情况下进行展示,您可以使用这些属性来正确处理它。
将 viewControllerForContext 设置为您想要 Presentr 使用的ViewController来设定展示上下文。shouldIgnoreTapOutsideContext 默认设置为 false。这处理了当点击外部上下文(在另一个 ViewController 上)时会发生什么。
请确保在展示之前设置 viewControllerForContext 属性,而不是在初始化时,这确保了自动布局已经完成工作,并且 ViewController 的框架是正确的。
@IBAction func didSelectShowAlert(_ sender: Any) {
presenter.viewControllerForContext = self
presenter.shouldIgnoreTapOutsideContext = true
customPresentViewController(presenter, viewController: alertController, animated: true, completion: nil)
}
其他 / 高级
需求
- iOS 9.0+
- Xcode 8.0+
- Swift 3.0+
文档
请阅读 文档。
作者
主要贡献者
加布里埃尔·皮亚特
标志设计:Eduardo Higareda,请访问 eldelentes.mx
警报设计:Noe Araujo,请访问 noearaujo.com
许可
Presentr 以 MIT 许可发布。
详细信息请参阅 LICENSE。