TransitionManager
无痛定制的转场。易于扩展,易于设置,只需关注动画。
安装
CocoaPods
您可以使用 CocoaPods 通过将其添加到您的 Podfile
来安装 TransitionManager
platform :ios, '8.0'
use_frameworks!
pod 'TransitionManager'
为了获得全部好处,请将 TransitionManager
导入到您导入 UIKit 的任何地方
import UIKit
import TransitionManager
手动安装
- 下载并将
/TransitionManager
文件夹拖到您的项目中。 - 恭喜您!
使用方法
将TransitionManager.swift
文件复制粘贴到您的项目中。
- 声明一个
TransitionManager
对象。 - 用
初始化它TransitionManagerAnimation
- 如果您使用导航控制器,请将其分配为您的导航控制器委托。
- 否则,将其分配为您的视图控制器的
transitioningDelegate
。
var transition: TransitionManager!
override func viewDidLoad() {
super.viewDidLoad()
transition = TransitionManager (transitionAnimation: FadeTransitionAnimation())
navigationController?.delegate = transition
}
创建转换动画
创建一个TransitionManagerAnimation
的子类
class FadeTransitionAnimation: TransitionManagerAnimation {
}
TransitionManagerAnimation
类实现了TransitionManagerDelegate
协议。
TransitionManagerDelegate
protocol TransitionManagerDelegate {
/// Transition nimation method implementation
func transition(
container: UIView,
fromViewController: UIViewController,
toViewController: UIViewController,
isDismissing: Bool,
duration: NSTimeInterval,
completion: () -> Void)
/// Interactive transitions,
/// update percent in gesture handler
var interactionTransitionController: UIPercentDrivenInteractiveTransition? { get set }
}
对于转换动画,我们应该重写transition
函数,并在其中编写我们的自定义动画。
class FadeTransitionAnimation: TransitionManagerAnimation {
override func transition(
container: UIView,
fromViewController: UIViewController,
toViewController: UIViewController,
isDismissing: Bool,
duration: NSTimeInterval,
completion: () -> Void) {
if isDismissing {
closeAnimation(container,
fromViewController: fromViewController,
toViewController: toViewController,
duration: duration,
completion: completion)
} else {
openAnimation(container,
fromViewController: fromViewController,
toViewController: toViewController,
duration: duration,
completion: completion)
}
}
}
一个重要部分是必须调用completion()
,因为TransitionManager
在调用它后才会结束转换。
交互转换
交互转换有3个部分
- 初始化
interactionTransitionController
,在手势(交互)开始时弹出或推送导航控制器。 - 在手势变化时计算您的
percent
值,并使用该百分比值调用updateInteractiveTransition:
。 - 在手势结束时,决定您的转换是否完成,并使用
finishInteractiveTransition ()
和cancelInteractiveTransition ()
将信息提供给您的interactionTransitionController
。
TransitionManager
配置
更简单的您可以为所有动画创建一个TransitionManagerAnimation
容器枚举。
enum TransitionManagerAnimations {
case Fade
case Pull
}
编写一个函数,返回枚举中的正确转换动画。
enum TransitionManagerAnimations {
case Fade
case Pull
func transitionAnimation () -> TransitionManagerAnimation {
switch self {
case .Fade:
return FadeTransitionAnimation()
case .Pull:
return PullTransitionAnimation()
}
}
}
扩展TransitionManager
并编写一个新的初始化方法
extension TransitionManager {
convenience init(transition: TransitionManagerAnimations) {
self.init(transitionAnimation: transition.transitionAnimation())
}
}
现在您可以在视图控制器中创建TransitionManager
,例如:
transition = TransitionManager(transition: .Pull)
navigationController?.delegate = transition