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/TZPhotoPreviewController.m |  557 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 557 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewController.m b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewController.m
new file mode 100644
index 0000000..b41e710
--- /dev/null
+++ b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPreviewController.m
@@ -0,0 +1,557 @@
+//
+//  TZPhotoPreviewController.m
+//  TZImagePickerController
+//
+//  Created by ������ on 15/12/24.
+//  Copyright �� 2015��� ������. All rights reserved.
+//
+
+#import "TZPhotoPreviewController.h"
+#import "TZPhotoPreviewCell.h"
+#import "TZAssetModel.h"
+#import "UIView+Layout.h"
+#import "TZImagePickerController.h"
+#import "TZImageManager.h"
+#import "TZImageCropManager.h"
+
+@interface TZPhotoPreviewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UIScrollViewDelegate> {
+    UICollectionView *_collectionView;
+    UICollectionViewFlowLayout *_layout;
+    NSArray *_photosTemp;
+    NSArray *_assetsTemp;
+    
+    UIView *_naviBar;
+    UIButton *_backButton;
+    UIButton *_selectButton;
+    UILabel *_indexLabel;
+    
+    UIView *_toolBar;
+    UIButton *_doneButton;
+    UIImageView *_numberImageView;
+    UILabel *_numberLabel;
+    UIButton *_originalPhotoButton;
+    UILabel *_originalPhotoLabel;
+    
+    CGFloat _offsetItemCount;
+}
+@property (nonatomic, assign) BOOL isHideNaviBar;
+@property (nonatomic, strong) UIView *cropBgView;
+@property (nonatomic, strong) UIView *cropView;
+
+@property (nonatomic, assign) double progress;
+@property (strong, nonatomic) id alertView;
+@end
+
+@implementation TZPhotoPreviewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [TZImageManager manager].shouldFixOrientation = YES;
+    __weak typeof(self) weakSelf = self;
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)weakSelf.navigationController;
+    if (!self.models.count) {
+        self.models = [NSMutableArray arrayWithArray:_tzImagePickerVc.selectedModels];
+        _assetsTemp = [NSMutableArray arrayWithArray:_tzImagePickerVc.selectedAssets];
+    }
+    [self configCollectionView];
+    [self configCustomNaviBar];
+    [self configBottomToolBar];
+    self.view.clipsToBounds = YES;
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didChangeStatusBarOrientationNotification:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];    
+}
+
+- (void)setPhotos:(NSMutableArray *)photos {
+    _photos = photos;
+    _photosTemp = [NSArray arrayWithArray:photos];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self.navigationController setNavigationBarHidden:YES animated:YES];
+    if (iOS7Later) [UIApplication sharedApplication].statusBarHidden = YES;
+    if (_currentIndex) [_collectionView setContentOffset:CGPointMake((self.view.tz_width + 20) * _currentIndex, 0) animated:NO];
+    [self refreshNaviBarAndBottomBarState];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    [self.navigationController setNavigationBarHidden:NO animated:YES];
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (tzImagePickerVc.needShowStatusBar && iOS7Later) {
+        [UIApplication sharedApplication].statusBarHidden = NO;
+    }
+    [TZImageManager manager].shouldFixOrientation = NO;
+}
+
+- (BOOL)prefersStatusBarHidden {
+    return YES;
+}
+
+- (void)configCustomNaviBar {
+    TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    
+    _naviBar = [[UIView alloc] initWithFrame:CGRectZero];
+    _naviBar.backgroundColor = [UIColor colorWithRed:(34/255.0) green:(34/255.0)  blue:(34/255.0) alpha:0.7];
+    
+    _backButton = [[UIButton alloc] initWithFrame:CGRectZero];
+    [_backButton setImage:[UIImage imageNamedFromMyBundle:@"navi_back"] forState:UIControlStateNormal];
+    [_backButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    [_backButton addTarget:self action:@selector(backButtonClick) forControlEvents:UIControlEventTouchUpInside];
+    
+    _selectButton = [[UIButton alloc] initWithFrame:CGRectZero];
+    [_selectButton setImage:tzImagePickerVc.photoDefImage forState:UIControlStateNormal];
+    [_selectButton setImage:tzImagePickerVc.photoSelImage forState:UIControlStateSelected];
+    _selectButton.imageView.clipsToBounds = YES;
+    _selectButton.imageEdgeInsets = UIEdgeInsetsMake(10, 0, 10, 0);
+    _selectButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
+    [_selectButton addTarget:self action:@selector(select:) forControlEvents:UIControlEventTouchUpInside];
+    _selectButton.hidden = !tzImagePickerVc.showSelectBtn;
+    
+    _indexLabel = [[UILabel alloc] init];
+    _indexLabel.font = [UIFont systemFontOfSize:14];
+    _indexLabel.textColor = [UIColor whiteColor];
+    _indexLabel.textAlignment = NSTextAlignmentCenter;
+    
+    [_naviBar addSubview:_selectButton];
+    [_naviBar addSubview:_indexLabel];
+    [_naviBar addSubview:_backButton];
+    [self.view addSubview:_naviBar];
+}
+
+- (void)configBottomToolBar {
+    _toolBar = [[UIView alloc] initWithFrame:CGRectZero];
+    static CGFloat rgb = 34 / 255.0;
+    _toolBar.backgroundColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:0.7];
+    
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (_tzImagePickerVc.allowPickingOriginalPhoto) {
+        _originalPhotoButton = [UIButton buttonWithType:UIButtonTypeCustom];
+        _originalPhotoButton.imageEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
+        _originalPhotoButton.backgroundColor = [UIColor clearColor];
+        [_originalPhotoButton addTarget:self action:@selector(originalPhotoButtonClick) forControlEvents:UIControlEventTouchUpInside];
+        _originalPhotoButton.titleLabel.font = [UIFont systemFontOfSize:13];
+        [_originalPhotoButton setTitle:_tzImagePickerVc.fullImageBtnTitleStr forState:UIControlStateNormal];
+        [_originalPhotoButton setTitle:_tzImagePickerVc.fullImageBtnTitleStr forState:UIControlStateSelected];
+        [_originalPhotoButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
+        [_originalPhotoButton setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
+        [_originalPhotoButton setImage:_tzImagePickerVc.photoPreviewOriginDefImage forState:UIControlStateNormal];
+        [_originalPhotoButton setImage:_tzImagePickerVc.photoOriginSelImage forState:UIControlStateSelected];
+        
+        _originalPhotoLabel = [[UILabel alloc] init];
+        _originalPhotoLabel.textAlignment = NSTextAlignmentLeft;
+        _originalPhotoLabel.font = [UIFont systemFontOfSize:13];
+        _originalPhotoLabel.textColor = [UIColor whiteColor];
+        _originalPhotoLabel.backgroundColor = [UIColor clearColor];
+        if (_isSelectOriginalPhoto) [self showPhotoBytes];
+    }
+    
+    _doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    _doneButton.titleLabel.font = [UIFont systemFontOfSize:16];
+    [_doneButton addTarget:self action:@selector(doneButtonClick) forControlEvents:UIControlEventTouchUpInside];
+    [_doneButton setTitle:_tzImagePickerVc.doneBtnTitleStr forState:UIControlStateNormal];
+    [_doneButton setTitleColor:_tzImagePickerVc.oKButtonTitleColorNormal forState:UIControlStateNormal];
+    
+    _numberImageView = [[UIImageView alloc] initWithImage:_tzImagePickerVc.photoNumberIconImage];
+    _numberImageView.backgroundColor = [UIColor clearColor];
+    _numberImageView.clipsToBounds = YES;
+    _numberImageView.contentMode = UIViewContentModeScaleAspectFit;
+    _numberImageView.hidden = _tzImagePickerVc.selectedModels.count <= 0;
+    
+    _numberLabel = [[UILabel alloc] init];
+    _numberLabel.font = [UIFont systemFontOfSize:15];
+    _numberLabel.textColor = [UIColor whiteColor];
+    _numberLabel.textAlignment = NSTextAlignmentCenter;
+    _numberLabel.text = [NSString stringWithFormat:@"%zd",_tzImagePickerVc.selectedModels.count];
+    _numberLabel.hidden = _tzImagePickerVc.selectedModels.count <= 0;
+    _numberLabel.backgroundColor = [UIColor clearColor];
+    
+    [_originalPhotoButton addSubview:_originalPhotoLabel];
+    [_toolBar addSubview:_doneButton];
+    [_toolBar addSubview:_originalPhotoButton];
+    [_toolBar addSubview:_numberImageView];
+    [_toolBar addSubview:_numberLabel];
+    [self.view addSubview:_toolBar];
+    
+    if (_tzImagePickerVc.photoPreviewPageUIConfigBlock) {
+        _tzImagePickerVc.photoPreviewPageUIConfigBlock(_collectionView, _naviBar, _backButton, _selectButton, _indexLabel, _toolBar, _originalPhotoButton, _originalPhotoLabel, _doneButton, _numberImageView, _numberLabel);
+    }
+}
+
+- (void)configCollectionView {
+    _layout = [[UICollectionViewFlowLayout alloc] init];
+    _layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:_layout];
+    _collectionView.backgroundColor = [UIColor blackColor];
+    _collectionView.dataSource = self;
+    _collectionView.delegate = self;
+    _collectionView.pagingEnabled = YES;
+    _collectionView.scrollsToTop = NO;
+    _collectionView.showsHorizontalScrollIndicator = NO;
+    _collectionView.contentOffset = CGPointMake(0, 0);
+    _collectionView.contentSize = CGSizeMake(self.models.count * (self.view.tz_width + 20), 0);
+    [self.view addSubview:_collectionView];
+    [_collectionView registerClass:[TZPhotoPreviewCell class] forCellWithReuseIdentifier:@"TZPhotoPreviewCell"];
+    [_collectionView registerClass:[TZVideoPreviewCell class] forCellWithReuseIdentifier:@"TZVideoPreviewCell"];
+    [_collectionView registerClass:[TZGifPreviewCell class] forCellWithReuseIdentifier:@"TZGifPreviewCell"];
+}
+
+- (void)configCropView {
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    if (_tzImagePickerVc.maxImagesCount <= 1 && _tzImagePickerVc.allowCrop) {
+        [_cropView removeFromSuperview];
+        [_cropBgView removeFromSuperview];
+        
+        _cropBgView = [UIView new];
+        _cropBgView.userInteractionEnabled = NO;
+        _cropBgView.frame = self.view.bounds;
+        _cropBgView.backgroundColor = [UIColor clearColor];
+        [self.view addSubview:_cropBgView];
+        [TZImageCropManager overlayClippingWithView:_cropBgView cropRect:_tzImagePickerVc.cropRect containerView:self.view needCircleCrop:_tzImagePickerVc.needCircleCrop];
+        
+        _cropView = [UIView new];
+        _cropView.userInteractionEnabled = NO;
+        _cropView.frame = _tzImagePickerVc.cropRect;
+        _cropView.backgroundColor = [UIColor clearColor];
+        _cropView.layer.borderColor = [UIColor whiteColor].CGColor;
+        _cropView.layer.borderWidth = 1.0;
+        if (_tzImagePickerVc.needCircleCrop) {
+            _cropView.layer.cornerRadius = _tzImagePickerVc.cropRect.size.width / 2;
+            _cropView.clipsToBounds = YES;
+        }
+        [self.view addSubview:_cropView];
+        if (_tzImagePickerVc.cropViewSettingBlock) {
+            _tzImagePickerVc.cropViewSettingBlock(_cropView);
+        }
+        
+        [self.view bringSubviewToFront:_naviBar];
+        [self.view bringSubviewToFront:_toolBar];
+    }
+}
+
+#pragma mark - Layout
+
+- (void)viewDidLayoutSubviews {
+    [super viewDidLayoutSubviews];
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+
+    CGFloat statusBarHeight = [TZCommonTools tz_statusBarHeight];
+    CGFloat statusBarHeightInterval = statusBarHeight - 20;
+    CGFloat naviBarHeight = statusBarHeight + _tzImagePickerVc.navigationBar.tz_height;
+    _naviBar.frame = CGRectMake(0, 0, self.view.tz_width, naviBarHeight);
+    _backButton.frame = CGRectMake(10, 10 + statusBarHeightInterval, 44, 44);
+    _selectButton.frame = CGRectMake(self.view.tz_width - 56, 10 + statusBarHeightInterval, 44, 44);
+    _indexLabel.frame = _selectButton.frame;
+    
+    _layout.itemSize = CGSizeMake(self.view.tz_width + 20, self.view.tz_height);
+    _layout.minimumInteritemSpacing = 0;
+    _layout.minimumLineSpacing = 0;
+    _collectionView.frame = CGRectMake(-10, 0, self.view.tz_width + 20, self.view.tz_height);
+    [_collectionView setCollectionViewLayout:_layout];
+    if (_offsetItemCount > 0) {
+        CGFloat offsetX = _offsetItemCount * _layout.itemSize.width;
+        [_collectionView setContentOffset:CGPointMake(offsetX, 0)];
+    }
+    if (_tzImagePickerVc.allowCrop) {
+        [_collectionView reloadData];
+    }
+    
+    CGFloat toolBarHeight = [TZCommonTools tz_isIPhoneX] ? 44 + (83 - 49) : 44;
+    CGFloat toolBarTop = self.view.tz_height - toolBarHeight;
+    _toolBar.frame = CGRectMake(0, toolBarTop, self.view.tz_width, toolBarHeight);
+    if (_tzImagePickerVc.allowPickingOriginalPhoto) {
+        CGFloat fullImageWidth = [_tzImagePickerVc.fullImageBtnTitleStr tz_calculateSizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13]} maxSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)].width;
+        _originalPhotoButton.frame = CGRectMake(0, 0, fullImageWidth + 56, 44);
+        _originalPhotoLabel.frame = CGRectMake(fullImageWidth + 42, 0, 80, 44);
+    }
+    [_doneButton sizeToFit];
+    _doneButton.frame = CGRectMake(self.view.tz_width - _doneButton.tz_width - 12, 0, _doneButton.tz_width, 44);
+    _numberImageView.frame = CGRectMake(_doneButton.tz_left - 24 - 5, 10, 24, 24);
+    _numberLabel.frame = _numberImageView.frame;
+    
+    [self configCropView];
+    
+    if (_tzImagePickerVc.photoPreviewPageDidLayoutSubviewsBlock) {
+        _tzImagePickerVc.photoPreviewPageDidLayoutSubviewsBlock(_collectionView, _naviBar, _backButton, _selectButton, _indexLabel, _toolBar, _originalPhotoButton, _originalPhotoLabel, _doneButton, _numberImageView, _numberLabel);
+    }
+}
+
+#pragma mark - Notification
+
+- (void)didChangeStatusBarOrientationNotification:(NSNotification *)noti {
+    _offsetItemCount = _collectionView.contentOffset.x / _layout.itemSize.width;
+}
+
+#pragma mark - Click Event
+
+- (void)select:(UIButton *)selectButton {
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    TZAssetModel *model = _models[_currentIndex];
+    if (!selectButton.isSelected) {
+        // 1. select:check if over the maxImagesCount / ������������,������������������������������������������
+        if (_tzImagePickerVc.selectedModels.count >= _tzImagePickerVc.maxImagesCount) {
+            NSString *title = [NSString stringWithFormat:[NSBundle tz_localizedStringForKey:@"Select a maximum of %zd photos"], _tzImagePickerVc.maxImagesCount];
+            [_tzImagePickerVc showAlertWithTitle:title];
+            return;
+            // 2. if not over the maxImagesCount / ������������������������������������
+        } else {
+            [_tzImagePickerVc addSelectedModel:model];
+            if (self.photos) {
+                [_tzImagePickerVc.selectedAssets addObject:_assetsTemp[_currentIndex]];
+                [self.photos addObject:_photosTemp[_currentIndex]];
+            }
+            if (model.type == TZAssetModelMediaTypeVideo && !_tzImagePickerVc.allowPickingMultipleVideo) {
+                [_tzImagePickerVc showAlertWithTitle:[NSBundle tz_localizedStringForKey:@"Select the video when in multi state, we will handle the video as a photo"]];
+            }
+        }
+    } else {
+        NSArray *selectedModels = [NSArray arrayWithArray:_tzImagePickerVc.selectedModels];
+        for (TZAssetModel *model_item in selectedModels) {
+            if ([[[TZImageManager manager] getAssetIdentifier:model.asset] isEqualToString:[[TZImageManager manager] getAssetIdentifier:model_item.asset]]) {
+                // 1.6.7������������:������������������������model,���������������������
+                NSArray *selectedModelsTmp = [NSArray arrayWithArray:_tzImagePickerVc.selectedModels];
+                for (NSInteger i = 0; i < selectedModelsTmp.count; i++) {
+                    TZAssetModel *model = selectedModelsTmp[i];
+                    if ([model isEqual:model_item]) {
+                        [_tzImagePickerVc removeSelectedModel:model];
+                        // [_tzImagePickerVc.selectedModels removeObjectAtIndex:i];
+                        break;
+                    }
+                }
+                if (self.photos) {
+                    // 1.6.7������������:������������������������asset,���������������������
+                    NSArray *selectedAssetsTmp = [NSArray arrayWithArray:_tzImagePickerVc.selectedAssets];
+                    for (NSInteger i = 0; i < selectedAssetsTmp.count; i++) {
+                        id asset = selectedAssetsTmp[i];
+                        if ([asset isEqual:_assetsTemp[_currentIndex]]) {
+                            [_tzImagePickerVc.selectedAssets removeObjectAtIndex:i];
+                            break;
+                        }
+                    }
+                    // [_tzImagePickerVc.selectedAssets removeObject:_assetsTemp[_currentIndex]];
+                    [self.photos removeObject:_photosTemp[_currentIndex]];
+                }
+                break;
+            }
+        }
+    }
+    model.isSelected = !selectButton.isSelected;
+    [self refreshNaviBarAndBottomBarState];
+    if (model.isSelected) {
+        [UIView showOscillatoryAnimationWithLayer:selectButton.imageView.layer type:TZOscillatoryAnimationToBigger];
+    }
+    [UIView showOscillatoryAnimationWithLayer:_numberImageView.layer type:TZOscillatoryAnimationToSmaller];
+}
+
+- (void)backButtonClick {
+    if (self.navigationController.childViewControllers.count < 2) {
+        [self.navigationController dismissViewControllerAnimated:YES completion:nil];
+        return;
+    }
+    [self.navigationController popViewControllerAnimated:YES];
+    if (self.backButtonClickBlock) {
+        self.backButtonClickBlock(_isSelectOriginalPhoto);
+    }
+}
+
+- (void)doneButtonClick {
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    // ���������������������iCloud���������,������������
+    if (_progress > 0 && _progress < 1 && (_selectButton.isSelected || !_tzImagePickerVc.selectedModels.count )) {
+        _alertView = [_tzImagePickerVc showAlertWithTitle:[NSBundle tz_localizedStringForKey:@"Synchronizing photos from iCloud"]];
+        return;
+    }
+    
+    // ��������������������������� ������������������������������������������
+    if (_tzImagePickerVc.selectedModels.count == 0 && _tzImagePickerVc.minImagesCount <= 0) {
+        TZAssetModel *model = _models[_currentIndex];
+        [_tzImagePickerVc addSelectedModel:model];
+    }
+    if (_tzImagePickerVc.allowCrop) { // ������������
+        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:_currentIndex inSection:0];
+        TZPhotoPreviewCell *cell = (TZPhotoPreviewCell *)[_collectionView cellForItemAtIndexPath:indexPath];
+        UIImage *cropedImage = [TZImageCropManager cropImageView:cell.previewView.imageView toRect:_tzImagePickerVc.cropRect zoomScale:cell.previewView.scrollView.zoomScale containerView:self.view];
+        if (_tzImagePickerVc.needCircleCrop) {
+            cropedImage = [TZImageCropManager circularClipImage:cropedImage];
+        }
+        if (self.doneButtonClickBlockCropMode) {
+            TZAssetModel *model = _models[_currentIndex];
+            self.doneButtonClickBlockCropMode(cropedImage,model.asset);
+        }
+    } else if (self.doneButtonClickBlock) { // ���������������
+        self.doneButtonClickBlock(_isSelectOriginalPhoto);
+    }
+    if (self.doneButtonClickBlockWithPreviewType) {
+        self.doneButtonClickBlockWithPreviewType(self.photos,_tzImagePickerVc.selectedAssets,self.isSelectOriginalPhoto);
+    }
+}
+
+- (void)originalPhotoButtonClick {
+    _originalPhotoButton.selected = !_originalPhotoButton.isSelected;
+    _isSelectOriginalPhoto = _originalPhotoButton.isSelected;
+    _originalPhotoLabel.hidden = !_originalPhotoButton.isSelected;
+    if (_isSelectOriginalPhoto) {
+        [self showPhotoBytes];
+        if (!_selectButton.isSelected) {
+            // ��������������������������������� < ������������������ && ������������������������1���������������������
+            TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+            if (_tzImagePickerVc.selectedModels.count < _tzImagePickerVc.maxImagesCount && _tzImagePickerVc.showSelectBtn) {
+                [self select:_selectButton];
+            }
+        }
+    }
+}
+
+- (void)didTapPreviewCell {
+    self.isHideNaviBar = !self.isHideNaviBar;
+    _naviBar.hidden = self.isHideNaviBar;
+    _toolBar.hidden = self.isHideNaviBar;
+}
+
+#pragma mark - UIScrollViewDelegate
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    CGFloat offSetWidth = scrollView.contentOffset.x;
+    offSetWidth = offSetWidth +  ((self.view.tz_width + 20) * 0.5);
+    
+    NSInteger currentIndex = offSetWidth / (self.view.tz_width + 20);
+    
+    if (currentIndex < _models.count && _currentIndex != currentIndex) {
+        _currentIndex = currentIndex;
+        [self refreshNaviBarAndBottomBarState];
+    }
+    
+    [[NSNotificationCenter defaultCenter] postNotificationName:@"photoPreviewCollectionViewDidScroll" object:nil];
+}
+
+#pragma mark - UICollectionViewDataSource && Delegate
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return _models.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    TZAssetModel *model = _models[indexPath.item];
+    
+    TZAssetPreviewCell *cell;
+    __weak typeof(self) weakSelf = self;
+    if (_tzImagePickerVc.allowPickingMultipleVideo && model.type == TZAssetModelMediaTypeVideo) {
+        cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TZVideoPreviewCell" forIndexPath:indexPath];
+    } else if (_tzImagePickerVc.allowPickingMultipleVideo && model.type == TZAssetModelMediaTypePhotoGif && _tzImagePickerVc.allowPickingGif) {
+        cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TZGifPreviewCell" forIndexPath:indexPath];
+    } else {
+        cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TZPhotoPreviewCell" forIndexPath:indexPath];
+        TZPhotoPreviewCell *photoPreviewCell = (TZPhotoPreviewCell *)cell;
+        photoPreviewCell.cropRect = _tzImagePickerVc.cropRect;
+        photoPreviewCell.allowCrop = _tzImagePickerVc.allowCrop;
+        __weak typeof(_tzImagePickerVc) weakTzImagePickerVc = _tzImagePickerVc;
+        __weak typeof(_collectionView) weakCollectionView = _collectionView;
+        __weak typeof(photoPreviewCell) weakCell = photoPreviewCell;
+        [photoPreviewCell setImageProgressUpdateBlock:^(double progress) {
+            __strong typeof(weakSelf) strongSelf = weakSelf;
+            __strong typeof(weakTzImagePickerVc) strongTzImagePickerVc = weakTzImagePickerVc;
+            __strong typeof(weakCollectionView) strongCollectionView = weakCollectionView;
+            __strong typeof(weakCell) strongCell = weakCell;
+            strongSelf.progress = progress;
+            if (progress >= 1) {
+                if (strongSelf.isSelectOriginalPhoto) [strongSelf showPhotoBytes];
+                if (strongSelf.alertView && [strongCollectionView.visibleCells containsObject:strongCell]) {
+                    [strongTzImagePickerVc hideAlertView:strongSelf.alertView];
+                    strongSelf.alertView = nil;
+                    [strongSelf doneButtonClick];
+                }
+            }
+        }];
+    }
+    
+    cell.model = model;
+    [cell setSingleTapGestureBlock:^{
+        __strong typeof(weakSelf) strongSelf = weakSelf;
+        [strongSelf didTapPreviewCell];
+    }];
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
+    if ([cell isKindOfClass:[TZPhotoPreviewCell class]]) {
+        [(TZPhotoPreviewCell *)cell recoverSubviews];
+    }
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
+    if ([cell isKindOfClass:[TZPhotoPreviewCell class]]) {
+        [(TZPhotoPreviewCell *)cell recoverSubviews];
+    } else if ([cell isKindOfClass:[TZVideoPreviewCell class]]) {
+        [(TZVideoPreviewCell *)cell pausePlayerAndShowNaviBar];
+    }
+}
+
+#pragma mark - Private Method
+
+- (void)dealloc {
+    // NSLog(@"%@ dealloc",NSStringFromClass(self.class));
+}
+
+- (void)refreshNaviBarAndBottomBarState {
+    TZImagePickerController *_tzImagePickerVc = (TZImagePickerController *)self.navigationController;
+    TZAssetModel *model = _models[_currentIndex];
+    _selectButton.selected = model.isSelected;
+    [self refreshSelectButtonImageViewContentMode];
+    if (_selectButton.isSelected && _tzImagePickerVc.showSelectedIndex) {
+        NSString *assetId = [[TZImageManager manager] getAssetIdentifier:model.asset];
+        NSString *index = [NSString stringWithFormat:@"%zd", [_tzImagePickerVc.selectedAssetIds indexOfObject:assetId] + 1];
+        _indexLabel.text = index;
+        _indexLabel.hidden = NO;
+    } else {
+        _indexLabel.hidden = YES;
+    }
+    _numberLabel.text = [NSString stringWithFormat:@"%zd",_tzImagePickerVc.selectedModels.count];
+    _numberImageView.hidden = (_tzImagePickerVc.selectedModels.count <= 0 || _isHideNaviBar || _isCropImage);
+    _numberLabel.hidden = (_tzImagePickerVc.selectedModels.count <= 0 || _isHideNaviBar || _isCropImage);
+    
+    _originalPhotoButton.selected = _isSelectOriginalPhoto;
+    _originalPhotoLabel.hidden = !_originalPhotoButton.isSelected;
+    if (_isSelectOriginalPhoto) [self showPhotoBytes];
+    
+    // If is previewing video, hide original photo button
+    // ���������������������������������������������������
+    if (!_isHideNaviBar) {
+        if (model.type == TZAssetModelMediaTypeVideo) {
+            _originalPhotoButton.hidden = YES;
+            _originalPhotoLabel.hidden = YES;
+        } else {
+            _originalPhotoButton.hidden = NO;
+            if (_isSelectOriginalPhoto)  _originalPhotoLabel.hidden = NO;
+        }
+    }
+    
+    _doneButton.hidden = NO;
+    _selectButton.hidden = !_tzImagePickerVc.showSelectBtn;
+    // ���������/������������ ������������������������ ���������������������
+    if (![[TZImageManager manager] isPhotoSelectableWithAsset:model.asset]) {
+        _numberLabel.hidden = YES;
+        _numberImageView.hidden = YES;
+        _selectButton.hidden = YES;
+        _originalPhotoButton.hidden = YES;
+        _originalPhotoLabel.hidden = YES;
+        _doneButton.hidden = YES;
+    }
+}
+
+- (void)refreshSelectButtonImageViewContentMode {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        if (self->_selectButton.imageView.image.size.width <= 27) {
+            self->_selectButton.imageView.contentMode = UIViewContentModeCenter;
+        } else {
+            self->_selectButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
+        }
+    });
+}
+
+- (void)showPhotoBytes {
+    [[TZImageManager manager] getPhotosBytesWithArray:@[_models[_currentIndex]] completion:^(NSString *totalBytes) {
+        self->_originalPhotoLabel.text = [NSString stringWithFormat:@"(%@)",totalBytes];
+    }];
+}
+
+@end

--
Gitblit v1.8.0