DMSlideTransition.m 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // DMSlideTransition.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 "DMSlideTransition.h"
  9. @implementation DMSlideTransition
  10. #pragma mark - UIViewControllerAnimatedTransitioning
  11. - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
  12. {
  13. return 0.50f;
  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. [containerView setBackgroundColor:self.backgroundColor ? self.backgroundColor : [UIColor whiteColor]];
  21. if (self.isPresenting) {
  22. [containerView addSubview:toVC.view];
  23. CGRect fromFrame = fromVC.view.frame;
  24. CGRect toFrame = toVC.view.frame;
  25. fromFrame.origin.y = -fromFrame.size.height/2;
  26. toFrame.origin.y = containerView.frame.size.height;
  27. [toVC.view setFrame:toFrame];
  28. toFrame.origin.y = 0;
  29. [UIView animateWithDuration:[self transitionDuration:transitionContext]
  30. delay:0
  31. usingSpringWithDamping:0.92f
  32. initialSpringVelocity:17
  33. options:UIViewAnimationOptionCurveEaseIn
  34. animations:^{
  35. [fromVC.view setFrame:fromFrame];
  36. [toVC.view setFrame:toFrame];
  37. } completion:^(BOOL finished) {
  38. [transitionContext completeTransition:YES];
  39. }];
  40. }
  41. else {
  42. [containerView addSubview:toVC.view];
  43. [containerView addSubview:fromVC.view];
  44. CGRect fromFrame = fromVC.view.frame;
  45. CGRect toFrame = toVC.view.frame;
  46. fromFrame.origin.y = containerView.frame.size.height;
  47. toFrame.origin.y = -containerView.frame.size.height;
  48. [toVC.view setFrame:toFrame];
  49. toFrame.origin.y = 0;
  50. [UIView animateWithDuration:[self transitionDuration:transitionContext]
  51. delay:0
  52. usingSpringWithDamping:0.92f
  53. initialSpringVelocity:17
  54. options:UIViewAnimationOptionCurveEaseIn
  55. animations:^{
  56. [fromVC.view setFrame:fromFrame];
  57. [toVC.view setFrame:toFrame];
  58. } completion:^(BOOL finished) {
  59. [transitionContext completeTransition:YES];
  60. }];
  61. }
  62. }
  63. @end