RMPZoomTransitionAnimator-Swift
RMPZoomTransitionAnimator-Swift
提供了自定义的缩放动画过渡效果。
不仅限于 UICollectionView
,还可以用于任何其他 UIViewController
过渡。
这种过渡动画类似于 “Pinterest” 动画,但这个库非常简单且体积小。
安装
CocoaPods
只需将以下行添加到您的 Podfile
:
pod 'RMPZoomTransitionAnimator-Swift'
Cartage
只需将以下行添加到您的 Cartfile
:
github "yhirano/RMPZoomTransitionAnimator-Swift"
使用方法
设置如下所示
用于 UINavigationController 推送过渡
详细信息请参考示例项目。
- 导入
RMPZoomTransitionAnimator-Swift
- 采用
RMPZoomTransitionAnimating
- 以下实现
RMPZoomTransitionAnimating
协议,包括源视图控制器和目标视图控制器var transitionSourceImageView: UIImageView { get }
var transitionSourceBackgroundColor: UIColor? { get }
var transitionDestinationImageViewFrame: CGRect { get }
- 在 UINavigationController 代理方法中返回 RMPZoomTransitionAnimator 实例
// UINavigationControllerDelegate
func navigationController(_ navigationController: UINavigationController,
animationControllerFor operation: UINavigationController.Operation,
from fromVC: UIViewController,
to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
guard let sourceTransition = fromVC as? RMPZoomTransitionAnimating,
let destinationTransition = toVC as? RMPZoomTransitionable else {
return nil
}
// minimum implementation for example
let animator = RMPZoomTransitionAnimator()
animator.goingForward = (operation == .push)
animator.sourceTransition = sourceTransition
animator.destinationTransition = destinationTransition
return animator;
}
用于模态过渡
详细信息请参考示例项目。
- 导入
RMPZoomTransitionAnimator-Swift
- 采用
RMPZoomTransitionAnimating
- 以下实现
RMPZoomTransitionAnimating
协议,包括源视图控制器和目标视图控制器var transitionSourceImageView: UIImageView { get }
var transitionSourceBackgroundColor: UIColor? { get }
var transitionDestinationImageViewFrame: CGRect { get }
- 在
prepare(for segue: UIStoryboardSegue, sender: Any?)
中设置 transitioningDelegate - 在 UIViewControllerTransitioningDelegate 方法中返回 RMPZoomTransitionAnimator 实例
// UIViewControllerTransitioningDelegate
func animationController(forPresented presented: UIViewController,
presenting: UIViewController,
source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
guard let sourceTransition = source as? RMPZoomTransitionAnimating,
let destinationTransition = presented as? RMPZoomTransitionable else {
return nil
}
let animator = RMPZoomTransitionAnimator()
animator.goingForward = true
animator.sourceTransition = sourceTransition
animator.destinationTransition = destinationTransition
return animator;
}
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
guard let sourceTransition = dismissed as? RMPZoomTransitionable else {
return nil
}
let destinationTransition = self
// minimum implementation for example
let animator = RMPZoomTransitionAnimator()
animator.goingForward = false
animator.sourceTransition = sourceTransition
animator.destinationTransition = destinationTransition
return animator;
}
需求
- iOS 10.0 或更高版本
许可
RMPZoomTransitionAnimator-Swift 基于 MIT 许可证。