DMScaleTransition.m 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //
  2. // DMScaleTransition.m
  3. // DMCustomTransition
  4. //
  5. // Created by Thomas Ricouard on 26/11/13.
  6. // Copyright (c) 2013 Thomas Ricouard. All rights reserved.
  7. //
  8. #import "DMScaleTransition.h"
  9. @implementation DMScaleTransition
  10. #pragma mark - UIViewControllerAnimatedTransitioning
  11. - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
  12. {
  13. return 0.30f;
  14. }
  15. - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
  16. {
  17. UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
  18. UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
  19. UIView *containerView = [transitionContext containerView];
  20. if (self.isPresenting) {
  21. [containerView addSubview:toVC.view];
  22. [toVC.view setAlpha:0];
  23. CGAffineTransform xForm = toVC.view.transform;
  24. toVC.view.transform = CGAffineTransformScale(xForm, 2.0f, 2.0f);
  25. [UIView animateWithDuration:[self transitionDuration:transitionContext]
  26. animations:^{
  27. [toVC.view setAlpha:1];
  28. toVC.view.transform =
  29. CGAffineTransformScale(xForm, 1.0f, 1.0f);
  30. fromVC.view.transform =
  31. CGAffineTransformScale(fromVC.view.transform, 0.9f, 0.9f);
  32. }
  33. completion:^(BOOL finished) {
  34. [transitionContext completeTransition:YES];
  35. }];
  36. }
  37. else {
  38. [containerView addSubview:toVC.view];
  39. [containerView addSubview:fromVC.view];
  40. CGAffineTransform xForm = toVC.view.transform;
  41. toVC.view.transform = CGAffineTransformScale(toVC.view.transform, 0.9f, 0.9f);
  42. [UIView animateWithDuration:[self transitionDuration:transitionContext]
  43. animations:^{
  44. [fromVC.view setAlpha:0];
  45. fromVC.view.transform =
  46. CGAffineTransformScale(xForm, 2.0f, 2.0f);
  47. toVC.view.transform =
  48. CGAffineTransformScale(CGAffineTransformIdentity, 1.0f, 1.0f);
  49. }
  50. completion:^(BOOL finished) {
  51. [transitionContext completeTransition:YES];
  52. }];
  53. }
  54. }
  55. @end