HUPhotoBrowserCell.m 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. //
  2. // HUPhotoBrowserCell.m
  3. // HUPhotoBrowser
  4. //
  5. // Created by mac on 16/2/24.
  6. // Copyright (c) 2016年 jinhuadiqigan. All rights reserved.
  7. //
  8. #import "HUPhotoBrowserCell.h"
  9. #import "hu_const.h"
  10. //#import "UIImageView+HUWebImage.h"
  11. @interface HUPhotoBrowserCell () <UIScrollViewDelegate>
  12. @property (nonatomic, strong) UIScrollView *scrollView;
  13. @property (nonatomic,strong) UITapGestureRecognizer *doubleTap;
  14. @property (nonatomic,strong) UITapGestureRecognizer *singleTap;
  15. @end
  16. @implementation HUPhotoBrowserCell
  17. - (instancetype)initWithFrame:(CGRect)frame {
  18. self = [super initWithFrame:frame];
  19. if (self) {
  20. self.backgroundColor = [UIColor blackColor];
  21. [self youpaifsetupView];
  22. [self addGestureRecognizer:self.singleTap];
  23. [self addGestureRecognizer:self.doubleTap];
  24. }
  25. return self;
  26. }
  27. - (void)youpaifsetupView {
  28. _scrollView = [[UIScrollView alloc] init];
  29. _scrollView.backgroundColor = [UIColor blackColor];
  30. _scrollView.showsHorizontalScrollIndicator = NO;
  31. _scrollView.showsVerticalScrollIndicator = NO;
  32. _scrollView.maximumZoomScale = 2;
  33. _scrollView.minimumZoomScale = 0.5;
  34. _scrollView.delegate = self;
  35. [self addSubview:_scrollView];
  36. UIImageView *imageView = [[UIImageView alloc] init];
  37. imageView.contentMode = UIViewContentModeScaleAspectFit;
  38. [_scrollView addSubview:imageView];
  39. _imageView = imageView;
  40. }
  41. - (void)resetZoomingScale {
  42. if (self.scrollView.zoomScale !=1) {
  43. self.scrollView.zoomScale = 1;
  44. }
  45. }
  46. - (void)layoutSubviews {
  47. [super layoutSubviews];
  48. _scrollView.frame = self.bounds;
  49. _imageView.frame = _scrollView.bounds;
  50. }
  51. - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
  52. return self.imageView;
  53. }
  54. #pragma mark UIScrollViewDelegate
  55. - (void)scrollViewDidZoom:(UIScrollView *)scrollView {
  56. self.imageView.center = [self centerOfScrollViewContent:scrollView];
  57. }
  58. - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
  59. [[NSNotificationCenter defaultCenter] postNotificationName:kPhotoCellDidZommingNotification object:_indexPath];
  60. }
  61. #pragma mark - gesture handler
  62. - (void)doubleTapGestrueHandle:(UITapGestureRecognizer *)sender {
  63. CGPoint p = [sender locationInView:self];
  64. if (self.scrollView.zoomScale <=1.0) {
  65. CGFloat scaleX = p.x + self.scrollView.contentOffset.x;
  66. CGFloat scaley = p.y + self.scrollView.contentOffset.y;
  67. [self.scrollView zoomToRect:CGRectMake(scaleX, scaley, 10, 10) animated:YES];
  68. }
  69. else {
  70. [self.scrollView setZoomScale:1.0 animated:YES];
  71. }
  72. }
  73. - (void)singleTapGestrueHandle:(UITapGestureRecognizer *)sender {
  74. if (self.tapActionBlock) {
  75. self.tapActionBlock(sender);
  76. }
  77. }
  78. #pragma mark - private
  79. - (CGPoint)centerOfScrollViewContent:(UIScrollView *)scrollView {
  80. CGFloat offsetX = (scrollView.bounds.size.width > scrollView.contentSize.width)?
  81. (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;
  82. CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height)?
  83. (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;
  84. CGPoint actualCenter = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX,
  85. scrollView.contentSize.height * 0.5 + offsetY);
  86. return actualCenter;
  87. }
  88. //- (void)configureCellWithURLStrings:(NSString *)URLStrings {
  89. // // self.imageView.image = self.placeholderImage;
  90. // NSURL *url = [NSURL URLWithString:URLStrings];
  91. //// [[HUWebImageDownloader sharedInstance] downloadImageWithURL:url completed:^(UIImage *image, NSError *error, NSURL *imageUrl) {
  92. //// self.imageView.image = image;
  93. //// }];
  94. // [self.imageView hu_setImageWithURL:url placeholderImage:self.placeholderImage completed:^(UIImage *image, NSError *error, NSURL *imageUrl) {
  95. // if (image) {
  96. // [[NSNotificationCenter defaultCenter] postNotificationName:kPhotoCellDidImageLoadedNotification object:nil];
  97. // }
  98. // }];
  99. //}
  100. #pragma mark - getter
  101. - (UITapGestureRecognizer *)doubleTap {
  102. if (!_doubleTap) {
  103. _doubleTap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestrueHandle:)];
  104. _doubleTap.numberOfTapsRequired = 2;
  105. _doubleTap.numberOfTouchesRequired = 1;
  106. }
  107. return _doubleTap;
  108. }
  109. - (UITapGestureRecognizer *)singleTap {
  110. if (!_singleTap) {
  111. _singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestrueHandle:)];
  112. _singleTap.numberOfTapsRequired = 1;
  113. _singleTap.numberOfTouchesRequired = 1;
  114. [_singleTap requireGestureRecognizerToFail:self.doubleTap];
  115. }
  116. return _singleTap;
  117. }
  118. @end