RMPZoomTransitionAnimator-Swift 2.0

RMPZoomTransitionAnimator-Swift 2.0

Yuichi Hirano 维护。



  • Yuichi Hirano

RMPZoomTransitionAnimator-Swift

platforms GitHub license Language: Swift 4.0 Version Carthage compatible

RMPZoomTransitionAnimator-Swift 提供了自定义的缩放动画过渡效果。

不仅限于 UICollectionView,还可以用于任何其他 UIViewController 过渡。

这种过渡动画类似于 “Pinterest” 动画,但这个库非常简单且体积小。

Screen shot Screen shot

安装

CocoaPods

只需将以下行添加到您的 Podfile

pod 'RMPZoomTransitionAnimator-Swift'

Cartage

只需将以下行添加到您的 Cartfile

github "yhirano/RMPZoomTransitionAnimator-Swift"

使用方法

设置如下所示

用于 UINavigationController 推送过渡

详细信息请参考示例项目。

  • 导入 RMPZoomTransitionAnimator-Swift
  • 采用 RMPZoomTransitionAnimating
  • 以下实现 RMPZoomTransitionAnimating 协议,包括源视图控制器和目标视图控制器
    1. var transitionSourceImageView: UIImageView { get }
    2. var transitionSourceBackgroundColor: UIColor? { get }
    3. 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 协议,包括源视图控制器和目标视图控制器
    1. var transitionSourceImageView: UIImageView { get }
    2. var transitionSourceBackgroundColor: UIColor? { get }
    3. 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 许可证。