UINavigationController+Transition.m 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // UINavigationController+Transition.m
  3. // CommonLibrary
  4. //
  5. // Created by Alexi on 3/18/14.
  6. // Copyright (c) 2014 Alexi. All rights reserved.
  7. //
  8. #import "UINavigationController+Transition.h"
  9. @implementation UINavigationController (Transition)
  10. - (CATransition *)pushAnimation
  11. {
  12. CATransition* transition = [CATransition animation];
  13. transition.duration = 0.3;
  14. transition.type = kCATransitionFade;
  15. transition.subtype = kCATransitionFromBottom;
  16. transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  17. transition.autoreverses = NO;
  18. return transition;
  19. }
  20. - (CATransition *)popAnimation
  21. {
  22. CATransition* transition = [CATransition animation];
  23. transition.duration = 0.3;
  24. transition.type = kCATransitionFade;
  25. transition.subtype = kCATransitionFromTop;
  26. transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
  27. transition.autoreverses = NO;
  28. return transition;
  29. }
  30. - (void)pushViewController:(UIViewController *)viewController withAnimation:(void (^)(void))animation duration:(CGFloat)duration
  31. {
  32. if (animation)
  33. {
  34. [self pushViewController:viewController animated:NO];
  35. [UIView animateWithDuration:duration animations:^{
  36. animation();
  37. }];
  38. // [self.view.layer addAnimation:transition forKey:kCATransition];
  39. }
  40. else
  41. {
  42. [self pushViewController:viewController animated:YES];
  43. }
  44. }
  45. - (void)pushViewController:(UIViewController *)viewController withTransition:(CATransition *)transition
  46. {
  47. if (transition)
  48. {
  49. [self pushViewController:viewController animated:NO];
  50. [self.view.layer addAnimation:transition forKey:kCATransition];
  51. }
  52. else
  53. {
  54. [self pushViewController:viewController animated:YES];
  55. }
  56. }
  57. - (void)pushViewController:(UIViewController *)viewController withBackTitle:(NSString *)backTitle animated:(BOOL)animated
  58. {
  59. [self pushViewController:viewController animated:animated];
  60. }
  61. - (void)pushViewController:(UIViewController *)viewController withBackTitle:(NSString *)backTitle action:(FWVoidBlock)backAction animated:(BOOL)animated
  62. {
  63. [self pushViewController:viewController animated:animated];
  64. }
  65. - (UIViewController *)popViewControllerTransition:(CATransition *)transition
  66. {
  67. if (transition)
  68. {
  69. [self.view.layer addAnimation:transition forKey:kCATransition];
  70. return [self popViewControllerAnimated:NO];
  71. }
  72. else
  73. {
  74. return [self popViewControllerAnimated:YES];
  75. }
  76. }
  77. - (NSArray *)popToRootViewControllerTransition:(CATransition *)transition
  78. {
  79. if (transition)
  80. {
  81. [self.view.layer addAnimation:transition forKey:kCATransition];
  82. return [self popToRootViewControllerAnimated:NO];
  83. }
  84. else
  85. {
  86. return [self popToRootViewControllerAnimated:YES];
  87. }
  88. }
  89. - (NSArray *)popToViewController:(UIViewController *)viewController withTransition:(CATransition *)transition
  90. {
  91. if (transition)
  92. {
  93. [self.view.layer addAnimation:transition forKey:kCATransition];
  94. return [self popToViewController:viewController animated:NO];
  95. }
  96. else
  97. {
  98. return [self popToViewController:viewController animated:NO];
  99. }
  100. }
  101. @end