LZImageBrowserTranslation.m 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // LZImageBrowserTranslation.m
  3. // LZImageDetail
  4. //
  5. // Created by shenzhenshihua on 2018/7/16.
  6. // Copyright © 2018年 shenzhenshihua. All rights reserved.
  7. //
  8. #import "LZImageBrowserTranslation.h"
  9. #import "LZImageBrowserMainView.h"
  10. #import "LZImageBrowserModel.h"
  11. @interface LZImageBrowserTranslation ()
  12. @end
  13. @implementation LZImageBrowserTranslation
  14. /* 自定义转场动画 */
  15. //动画时间
  16. - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
  17. return 0.3;
  18. }
  19. //转场动画
  20. - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
  21. NSMutableArray * dataM = [self.mainBrowserMainView dataSource];
  22. NSInteger currentIndex = [self.mainBrowserMainView selectPage];
  23. LZImageBrowserModel * currentModel = [dataM objectAtIndex:currentIndex];
  24. //转场过程中显示的view,所有动画控件都应该加在这上面
  25. UIView * containerView = [transitionContext containerView];
  26. //转场去往的控制器
  27. UIViewController * toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
  28. if (_isBrowserMainView) {
  29. //是进入
  30. [containerView addSubview:toViewController.view];
  31. CGRect frame = [currentModel smallImageViewframeOriginWindow];
  32. UIImage * image = [currentModel getCurrentImage];
  33. UIImageView * imageView = [self addShadowImageViewWithFrame:frame image:image];
  34. //隐藏子组件
  35. [self.mainBrowserMainView subViewHidden:YES];
  36. self.browserControllerView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.0];
  37. [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
  38. imageView.frame = [currentModel imageViewframeShowWindow];
  39. self.browserControllerView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:1.0];
  40. } completion:^(BOOL finished) {
  41. if ([transitionContext transitionWasCancelled]) {
  42. [transitionContext completeTransition:NO];
  43. } else {
  44. [transitionContext completeTransition:YES];
  45. [self.mainBrowserMainView subViewHidden:NO];
  46. [imageView removeFromSuperview];
  47. }
  48. }];
  49. } else {
  50. //是离开
  51. CGRect frame = [currentModel bigImageViewFrameOnScrollView];
  52. UIImage * image = [currentModel getCurrentImage];
  53. UIImageView * imageView = [self addShadowImageViewWithFrame:frame image:image];
  54. [self.mainBrowserMainView subViewHidden:YES];
  55. [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
  56. imageView.frame = [currentModel smallImageViewframeOriginWindow];
  57. self.browserControllerView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.0];
  58. } completion:^(BOOL finished) {
  59. if ([transitionContext transitionWasCancelled]) {
  60. [transitionContext completeTransition:NO];
  61. } else {
  62. [transitionContext completeTransition:YES];
  63. [imageView removeFromSuperview];
  64. }
  65. }];
  66. }
  67. }
  68. - (UIImageView *)addShadowImageViewWithFrame:(CGRect)frame image:(UIImage *)image {
  69. UIImageView * imageView = [[UIImageView alloc] initWithFrame:frame];
  70. imageView.contentMode = UIViewContentModeScaleAspectFill;
  71. imageView.clipsToBounds = YES;
  72. imageView.image = image;
  73. [self.browserControllerView addSubview:imageView];
  74. return imageView;
  75. }
  76. @end