RMPZoomTransitionAnimator-Swift
provide a custom transition zooming animation.
Not only UICollectionView
, this is possible to use any other UIViewController
transition.
This transition animation is like the "Pinterest" animation, but this is very simple and small library.
Simply add the following line to your Podfile
:
pod 'RMPZoomTransitionAnimator-Swift'
Simply add the following line to your Cartfile
:
github "yhirano/RMPZoomTransitionAnimator-Swift"
Setup is as below:
Refer to the example project for details.
- Import
RMPZoomTransitionAnimator-Swift
- Adopt
RMPZoomTransitionAnimating
- Implement the
RMPZoomTransitionAnimating
protocol below, both source view controller and destination view controllervar transitionSourceImageView: UIImageView { get }
var transitionSourceBackgroundColor: UIColor? { get }
var transitionDestinationImageViewFrame: CGRect { get }
- Returns RMPZoomTransitionAnimator instance in the UINavigationController delegate method
// 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;
}
Refer to the example project for details.
- Import
RMPZoomTransitionAnimator-Swift
- Adopt
RMPZoomTransitionAnimating
- Implement
RMPZoomTransitionAnimating
protocol below, both source view controller and destination view controllervar transitionSourceImageView: UIImageView { get }
var transitionSourceBackgroundColor: UIColor? { get }
var transitionDestinationImageViewFrame: CGRect { get }
- Set the transitioningDelegate in
prepare(for segue: UIStoryboardSegue, sender: Any?)
- Returns RMPZoomTransitionAnimator instance in the UIViewControllerTransitioningDelegate method
// 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 or higher
RMPZoomTransitionAnimator-Swift is available under the MIT license.