TransitionManager 0.3

TransitionManager 0.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新版本2018年10月
SPM支持 SPM

Cem Olcay 维护。



TransitionManager

无痛定制的转场。易于扩展,易于设置,只需关注动画。

安装

CocoaPods

您可以使用 CocoaPods 通过将其添加到您的 Podfile 来安装 TransitionManager

platform :ios, '8.0'
use_frameworks!
pod 'TransitionManager'

为了获得全部好处,请将 TransitionManager 导入到您导入 UIKit 的任何地方

import UIKit
import TransitionManager

手动安装

  1. 下载并将 /TransitionManager 文件夹拖到您的项目中。
  2. 恭喜您!

使用方法

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