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