From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m |  451 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 451 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m
new file mode 100644
index 0000000..73d6ed7
--- /dev/null
+++ b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewCell.m
@@ -0,0 +1,451 @@
+//
+//  TZPhotoPreviewCell.m
+//  TZImagePickerController
+//
+//  Created by ������ on 15/12/24.
+//  Copyright �� 2015��� ������. All rights reserved.
+//
+
+#import "TZPhotoPreviewCell.h"
+#import "TZAssetModel.h"
+#import "UIView+Layout.h"
+#import "TZImageManager.h"
+#import "TZProgressView.h"
+#import "TZImageCropManager.h"
+#import <MediaPlayer/MediaPlayer.h>
+#import "TZImagePickerController.h"
+
+@implementation TZAssetPreviewCell
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = [UIColor blackColor];
+        [self configSubviews];
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(photoPreviewCollectionViewDidScroll) name:@"photoPreviewCollectionViewDidScroll" object:nil];
+    }
+    return self;
+}
+
+- (void)configSubviews {
+    
+}
+
+#pragma mark - Notification
+
+- (void)photoPreviewCollectionViewDidScroll {
+    
+}
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+@end
+
+
+@implementation TZPhotoPreviewCell
+
+- (void)configSubviews {
+    self.previewView = [[TZPhotoPreviewView alloc] initWithFrame:CGRectZero];
+    __weak typeof(self) weakSelf = self;
+    [self.previewView setSingleTapGestureBlock:^{
+        __strong typeof(weakSelf) strongSelf = weakSelf;
+        if (strongSelf.singleTapGestureBlock) {
+            strongSelf.singleTapGestureBlock();
+        }
+    }];
+    [self.previewView setImageProgressUpdateBlock:^(double progress) {
+        __strong typeof(weakSelf) strongSelf = weakSelf;
+        if (strongSelf.imageProgressUpdateBlock) {
+            strongSelf.imageProgressUpdateBlock(progress);
+        }
+    }];
+    [self addSubview:self.previewView];
+}
+
+- (void)setModel:(TZAssetModel *)model {
+    [super setModel:model];
+    _previewView.asset = model.asset;
+}
+
+- (void)recoverSubviews {
+    [_previewView recoverSubviews];
+}
+
+- (void)setAllowCrop:(BOOL)allowCrop {
+    _allowCrop = allowCrop;
+    _previewView.allowCrop = allowCrop;
+}
+
+- (void)setCropRect:(CGRect)cropRect {
+    _cropRect = cropRect;
+    _previewView.cropRect = cropRect;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    self.previewView.frame = self.bounds;
+}
+
+@end
+
+
+@interface TZPhotoPreviewView ()<UIScrollViewDelegate>
+
+@end
+
+@implementation TZPhotoPreviewView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        _scrollView = [[UIScrollView alloc] init];
+        _scrollView.bouncesZoom = YES;
+        _scrollView.maximumZoomScale = 2.5;
+        _scrollView.minimumZoomScale = 1.0;
+        _scrollView.multipleTouchEnabled = YES;
+        _scrollView.delegate = self;
+        _scrollView.scrollsToTop = NO;
+        _scrollView.showsHorizontalScrollIndicator = NO;
+        _scrollView.showsVerticalScrollIndicator = YES;
+        _scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+        _scrollView.delaysContentTouches = NO;
+        _scrollView.canCancelContentTouches = YES;
+        _scrollView.alwaysBounceVertical = NO;
+        if (iOS11Later) {
+            _scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        }
+        [self addSubview:_scrollView];
+        
+        _imageContainerView = [[UIView alloc] init];
+        _imageContainerView.clipsToBounds = YES;
+        _imageContainerView.contentMode = UIViewContentModeScaleAspectFill;
+        [_scrollView addSubview:_imageContainerView];
+        
+        _imageView = [[UIImageView alloc] init];
+        _imageView.backgroundColor = [UIColor colorWithWhite:1.000 alpha:0.500];
+        _imageView.contentMode = UIViewContentModeScaleAspectFill;
+        _imageView.clipsToBounds = YES;
+        [_imageContainerView addSubview:_imageView];
+        
+        UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
+        [self addGestureRecognizer:tap1];
+        UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTap:)];
+        tap2.numberOfTapsRequired = 2;
+        [tap1 requireGestureRecognizerToFail:tap2];
+        [self addGestureRecognizer:tap2];
+        
+        [self configProgressView];
+    }
+    return self;
+}
+
+- (void)configProgressView {
+    _progressView = [[TZProgressView alloc] init];
+    _progressView.hidden = YES;
+    [self addSubview:_progressView];
+}
+
+- (void)setModel:(TZAssetModel *)model {
+    _model = model;
+    [_scrollView setZoomScale:1.0 animated:NO];
+    if (model.type == TZAssetModelMediaTypePhotoGif) {
+        // ������������������
+        [[TZImageManager manager] getPhotoWithAsset:model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
+            self.imageView.image = photo;
+            [self resizeSubviews];
+            // ���������gif������
+            [[TZImageManager manager] getOriginalPhotoDataWithAsset:model.asset completion:^(NSData *data, NSDictionary *info, BOOL isDegraded) {
+                if (!isDegraded) {
+                    self.imageView.image = [UIImage sd_tz_animatedGIFWithData:data];
+                    [self resizeSubviews];
+                }
+            }];
+        } progressHandler:nil networkAccessAllowed:NO];
+    } else {
+        self.asset = model.asset;
+    }
+}
+
+- (void)setAsset:(id)asset {
+    if (_asset && self.imageRequestID) {
+        [[PHImageManager defaultManager] cancelImageRequest:self.imageRequestID];
+    }
+    
+    _asset = asset;
+    self.imageRequestID = [[TZImageManager manager] getPhotoWithAsset:asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
+        if (![asset isEqual:self->_asset]) return;
+        self.imageView.image = photo;
+        [self resizeSubviews];
+        self->_progressView.hidden = YES;
+        if (self.imageProgressUpdateBlock) {
+            self.imageProgressUpdateBlock(1);
+        }
+        if (!isDegraded) {
+            self.imageRequestID = 0;
+        }
+    } progressHandler:^(double progress, NSError *error, BOOL *stop, NSDictionary *info) {
+        if (![asset isEqual:self->_asset]) return;
+        self->_progressView.hidden = NO;
+        [self bringSubviewToFront:self->_progressView];
+        progress = progress > 0.02 ? progress : 0.02;
+        self->_progressView.progress = progress;
+        if (self.imageProgressUpdateBlock && progress < 1) {
+            self.imageProgressUpdateBlock(progress);
+        }
+        
+        if (progress >= 1) {
+            self->_progressView.hidden = YES;
+            self.imageRequestID = 0;
+        }
+    } networkAccessAllowed:YES];
+}
+
+- (void)recoverSubviews {
+    [_scrollView setZoomScale:1.0 animated:NO];
+    [self resizeSubviews];
+}
+
+- (void)resizeSubviews {
+    _imageContainerView.tz_origin = CGPointZero;
+    _imageContainerView.tz_width = self.scrollView.tz_width;
+    
+    UIImage *image = _imageView.image;
+    if (image.size.height / image.size.width > self.tz_height / self.scrollView.tz_width) {
+        _imageContainerView.tz_height = floor(image.size.height / (image.size.width / self.scrollView.tz_width));
+    } else {
+        CGFloat height = image.size.height / image.size.width * self.scrollView.tz_width;
+        if (height < 1 || isnan(height)) height = self.tz_height;
+        height = floor(height);
+        _imageContainerView.tz_height = height;
+        _imageContainerView.tz_centerY = self.tz_height / 2;
+    }
+    if (_imageContainerView.tz_height > self.tz_height && _imageContainerView.tz_height - self.tz_height <= 1) {
+        _imageContainerView.tz_height = self.tz_height;
+    }
+    CGFloat contentSizeH = MAX(_imageContainerView.tz_height, self.tz_height);
+    _scrollView.contentSize = CGSizeMake(self.scrollView.tz_width, contentSizeH);
+    [_scrollView scrollRectToVisible:self.bounds animated:NO];
+    _scrollView.alwaysBounceVertical = _imageContainerView.tz_height <= self.tz_height ? NO : YES;
+    _imageView.frame = _imageContainerView.bounds;
+    
+    [self refreshScrollViewContentSize];
+}
+
+- (void)setAllowCrop:(BOOL)allowCrop {
+    _allowCrop = allowCrop;
+    _scrollView.maximumZoomScale = allowCrop ? 4.0 : 2.5;
+    
+    if ([self.asset isKindOfClass:[PHAsset class]]) {
+        PHAsset *phAsset = (PHAsset *)self.asset;
+        CGFloat aspectRatio = phAsset.pixelWidth / (CGFloat)phAsset.pixelHeight;
+        // ���������������������������
+        if (aspectRatio > 1.5) {
+            self.scrollView.maximumZoomScale *= aspectRatio / 1.5;
+        }
+    }
+}
+
+- (void)refreshScrollViewContentSize {
+    if (_allowCrop) {
+        // 1.7.2 ������������������,���������������������������������������������������������������_scrollView���������������������
+        // 1.���contentSize������(���������������������������������)
+        CGFloat contentWidthAdd = self.scrollView.tz_width - CGRectGetMaxX(_cropRect);
+        CGFloat contentHeightAdd = (MIN(_imageContainerView.tz_height, self.tz_height) - self.cropRect.size.height) / 2;
+        CGFloat newSizeW = self.scrollView.contentSize.width + contentWidthAdd;
+        CGFloat newSizeH = MAX(self.scrollView.contentSize.height, self.tz_height) + contentHeightAdd;
+        _scrollView.contentSize = CGSizeMake(newSizeW, newSizeH);
+        _scrollView.alwaysBounceVertical = YES;
+        // 2.���scrollView���������������������������������������������������������
+        if (contentHeightAdd > 0 || contentWidthAdd > 0) {
+            _scrollView.contentInset = UIEdgeInsetsMake(contentHeightAdd, _cropRect.origin.x, 0, 0);
+        } else {
+            _scrollView.contentInset = UIEdgeInsetsZero;
+        }
+    }
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    _scrollView.frame = CGRectMake(10, 0, self.tz_width - 20, self.tz_height);
+    static CGFloat progressWH = 40;
+    CGFloat progressX = (self.tz_width - progressWH) / 2;
+    CGFloat progressY = (self.tz_height - progressWH) / 2;
+    _progressView.frame = CGRectMake(progressX, progressY, progressWH, progressWH);
+    
+    [self recoverSubviews];
+}
+
+#pragma mark - UITapGestureRecognizer Event
+
+- (void)doubleTap:(UITapGestureRecognizer *)tap {
+    if (_scrollView.zoomScale > 1.0) {
+        _scrollView.contentInset = UIEdgeInsetsZero;
+        [_scrollView setZoomScale:1.0 animated:YES];
+    } else {
+        CGPoint touchPoint = [tap locationInView:self.imageView];
+        CGFloat newZoomScale = _scrollView.maximumZoomScale;
+        CGFloat xsize = self.frame.size.width / newZoomScale;
+        CGFloat ysize = self.frame.size.height / newZoomScale;
+        [_scrollView zoomToRect:CGRectMake(touchPoint.x - xsize/2, touchPoint.y - ysize/2, xsize, ysize) animated:YES];
+    }
+}
+
+- (void)singleTap:(UITapGestureRecognizer *)tap {
+    if (self.singleTapGestureBlock) {
+        self.singleTapGestureBlock();
+    }
+}
+
+#pragma mark - UIScrollViewDelegate
+
+- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
+    return _imageContainerView;
+}
+
+- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
+    scrollView.contentInset = UIEdgeInsetsZero;
+}
+
+- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
+    [self refreshImageContainerViewCenter];
+}
+
+- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
+    [self refreshScrollViewContentSize];
+}
+
+#pragma mark - Private
+
+- (void)refreshImageContainerViewCenter {
+    CGFloat offsetX = (_scrollView.tz_width > _scrollView.contentSize.width) ? ((_scrollView.tz_width - _scrollView.contentSize.width) * 0.5) : 0.0;
+    CGFloat offsetY = (_scrollView.tz_height > _scrollView.contentSize.height) ? ((_scrollView.tz_height - _scrollView.contentSize.height) * 0.5) : 0.0;
+    self.imageContainerView.center = CGPointMake(_scrollView.contentSize.width * 0.5 + offsetX, _scrollView.contentSize.height * 0.5 + offsetY);
+}
+
+@end
+
+
+@implementation TZVideoPreviewCell
+
+- (void)configSubviews {
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:UIApplicationWillResignActiveNotification object:nil];
+}
+
+- (void)configPlayButton {
+    if (_playButton) {
+        [_playButton removeFromSuperview];
+    }
+    _playButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal];
+    [_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlayHL"] forState:UIControlStateHighlighted];
+    [_playButton addTarget:self action:@selector(playButtonClick) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:_playButton];
+}
+
+- (void)setModel:(TZAssetModel *)model {
+    [super setModel:model];
+    [self configMoviePlayer];
+}
+
+- (void)configMoviePlayer {
+    if (_player) {
+        [_playerLayer removeFromSuperlayer];
+        _playerLayer = nil;
+        [_player pause];
+        _player = nil;
+    }
+    
+    [[TZImageManager manager] getPhotoWithAsset:self.model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
+        self->_cover = photo;
+    }];
+    [[TZImageManager manager] getVideoWithAsset:self.model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            self->_player = [AVPlayer playerWithPlayerItem:playerItem];
+            self->_playerLayer = [AVPlayerLayer playerLayerWithPlayer:self->_player];
+            self->_playerLayer.backgroundColor = [UIColor blackColor].CGColor;
+            self->_playerLayer.frame = self.bounds;
+            [self.layer addSublayer:self->_playerLayer];
+            [self configPlayButton];
+            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:AVPlayerItemDidPlayToEndTimeNotification object:self->_player.currentItem];
+        });
+    }];
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    _playerLayer.frame = self.bounds;
+    _playButton.frame = CGRectMake(0, 64, self.tz_width, self.tz_height - 64 - 44);
+}
+
+- (void)photoPreviewCollectionViewDidScroll {
+    [self pausePlayerAndShowNaviBar];
+}
+
+#pragma mark - Click Event
+
+- (void)playButtonClick {
+    CMTime currentTime = _player.currentItem.currentTime;
+    CMTime durationTime = _player.currentItem.duration;
+    if (_player.rate == 0.0f) {
+        if (currentTime.value == durationTime.value) [_player.currentItem seekToTime:CMTimeMake(0, 1)];
+        [_player play];
+        [_playButton setImage:nil forState:UIControlStateNormal];
+        if (iOS7Later) [UIApplication sharedApplication].statusBarHidden = YES;
+        if (self.singleTapGestureBlock) {
+            self.singleTapGestureBlock();
+        }
+    } else {
+        [self pausePlayerAndShowNaviBar];
+    }
+}
+
+- (void)pausePlayerAndShowNaviBar {
+    if (_player.rate != 0.0) {
+        [_player pause];
+        [_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlay"] forState:UIControlStateNormal];
+        if (self.singleTapGestureBlock) {
+            self.singleTapGestureBlock();
+        }
+    }
+}
+
+@end
+
+
+@implementation TZGifPreviewCell
+
+- (void)configSubviews {
+    [self configPreviewView];
+}
+
+- (void)configPreviewView {
+    _previewView = [[TZPhotoPreviewView alloc] initWithFrame:CGRectZero];
+    __weak typeof(self) weakSelf = self;
+    [_previewView setSingleTapGestureBlock:^{
+        __strong typeof(weakSelf) strongSelf = weakSelf;
+        [strongSelf signleTapAction];
+    }];
+    [self addSubview:_previewView];
+}
+
+- (void)setModel:(TZAssetModel *)model {
+    [super setModel:model];
+    _previewView.model = self.model;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    _previewView.frame = self.bounds;
+}
+
+#pragma mark - Click Event
+
+- (void)signleTapAction {    
+    if (self.singleTapGestureBlock) {
+        self.singleTapGestureBlock();
+    }
+}
+
+@end

--
Gitblit v1.8.0