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/TZAssetCell.m | 443 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 443 insertions(+), 0 deletions(-) diff --git a/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.m b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.m new file mode 100644 index 0000000..f7f2717 --- /dev/null +++ b/screendisplay/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.m @@ -0,0 +1,443 @@ +// +// TZAssetCell.m +// TZImagePickerController +// +// Created by ������ on 15/12/24. +// Copyright �� 2015��� ������. All rights reserved. +// + +#import "TZAssetCell.h" +#import "TZAssetModel.h" +#import "UIView+Layout.h" +#import "TZImageManager.h" +#import "TZImagePickerController.h" +#import "TZProgressView.h" + +@interface TZAssetCell () +@property (weak, nonatomic) UIImageView *imageView; // The photo / ������ +@property (weak, nonatomic) UIImageView *selectImageView; +@property (weak, nonatomic) UILabel *indexLabel; +@property (weak, nonatomic) UIView *bottomView; +@property (weak, nonatomic) UILabel *timeLength; + +@property (nonatomic, weak) UIImageView *videoImgView; +@property (nonatomic, strong) TZProgressView *progressView; +@property (nonatomic, assign) int32_t bigImageRequestID; +@end + +@implementation TZAssetCell + +- (void)setModel:(TZAssetModel *)model { + _model = model; + if (iOS8Later) { + self.representedAssetIdentifier = [[TZImageManager manager] getAssetIdentifier:model.asset]; + } + if (self.useCachedImage && model.cachedImage) { + self.imageView.image = model.cachedImage; + } else { + self.model.cachedImage = nil; + int32_t imageRequestID = [[TZImageManager manager] getPhotoWithAsset:model.asset photoWidth:self.tz_width completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) { + // Set the cell's thumbnail image if it's still showing the same asset. + if (!iOS8Later) { + self.imageView.image = photo; + self.model.cachedImage = photo; + [self hideProgressView]; + return; + } + if ([self.representedAssetIdentifier isEqualToString:[[TZImageManager manager] getAssetIdentifier:model.asset]]) { + self.imageView.image = photo; + self.model.cachedImage = photo; + } else { + // NSLog(@"this cell is showing other asset"); + [[PHImageManager defaultManager] cancelImageRequest:self.imageRequestID]; + } + if (!isDegraded) { + [self hideProgressView]; + self.imageRequestID = 0; + } + } progressHandler:nil networkAccessAllowed:NO]; + if (imageRequestID && self.imageRequestID && imageRequestID != self.imageRequestID) { + [[PHImageManager defaultManager] cancelImageRequest:self.imageRequestID]; + // NSLog(@"cancelImageRequest %d",self.imageRequestID); + } + self.imageRequestID = imageRequestID; + } + self.selectPhotoButton.selected = model.isSelected; + self.selectImageView.image = self.selectPhotoButton.isSelected ? self.photoSelImage : self.photoDefImage; + self.indexLabel.hidden = !self.selectPhotoButton.isSelected; + + self.type = (NSInteger)model.type; + // ���������/������������ ������������������������ ��������������������� + if (![[TZImageManager manager] isPhotoSelectableWithAsset:model.asset]) { + if (_selectImageView.hidden == NO) { + self.selectPhotoButton.hidden = YES; + _selectImageView.hidden = YES; + } + } + // ��������������������������������������������������������� + if (model.isSelected) { + [self requestBigImage]; + } else { + [self cancelBigImageRequest]; + } + if (model.needOscillatoryAnimation) { + [UIView showOscillatoryAnimationWithLayer:self.selectImageView.layer type:TZOscillatoryAnimationToBigger]; + } + model.needOscillatoryAnimation = NO; + [self setNeedsLayout]; + + if (self.assetCellDidSetModelBlock) { + self.assetCellDidSetModelBlock(self, _imageView, _selectImageView, _indexLabel, _bottomView, _timeLength, _videoImgView); + } +} + +- (void)setIndex:(NSInteger)index { + _index = index; + self.indexLabel.text = [NSString stringWithFormat:@"%zd", index]; + [self.contentView bringSubviewToFront:self.indexLabel]; +} + +- (void)setShowSelectBtn:(BOOL)showSelectBtn { + _showSelectBtn = showSelectBtn; + if (!self.selectPhotoButton.hidden) { + self.selectPhotoButton.hidden = !showSelectBtn; + } + if (!self.selectImageView.hidden) { + self.selectImageView.hidden = !showSelectBtn; + } +} + +- (void)setType:(TZAssetCellType)type { + _type = type; + if (type == TZAssetCellTypePhoto || type == TZAssetCellTypeLivePhoto || (type == TZAssetCellTypePhotoGif && !self.allowPickingGif) || self.allowPickingMultipleVideo) { + _selectImageView.hidden = NO; + _selectPhotoButton.hidden = NO; + _bottomView.hidden = YES; + } else { // Video of Gif + _selectImageView.hidden = YES; + _selectPhotoButton.hidden = YES; + } + + if (type == TZAssetCellTypeVideo) { + self.bottomView.hidden = NO; + self.timeLength.text = _model.timeLength; + self.videoImgView.hidden = NO; + _timeLength.tz_left = self.videoImgView.tz_right; + _timeLength.textAlignment = NSTextAlignmentRight; + } else if (type == TZAssetCellTypePhotoGif && self.allowPickingGif) { + self.bottomView.hidden = NO; + self.timeLength.text = @"GIF"; + self.videoImgView.hidden = YES; + _timeLength.tz_left = 5; + _timeLength.textAlignment = NSTextAlignmentLeft; + } +} + +- (void)selectPhotoButtonClick:(UIButton *)sender { + if (self.didSelectPhotoBlock) { + self.didSelectPhotoBlock(sender.isSelected); + } + self.selectImageView.image = sender.isSelected ? self.photoSelImage : self.photoDefImage; + if (sender.isSelected) { + if (![TZImagePickerConfig sharedInstance].showSelectedIndex && ![TZImagePickerConfig sharedInstance].showPhotoCannotSelectLayer) { + [UIView showOscillatoryAnimationWithLayer:_selectImageView.layer type:TZOscillatoryAnimationToBigger]; + } + // ��������������������������������������������������� + [self requestBigImage]; + } else { // ������������������������������������ + [self cancelBigImageRequest]; + } +} + +- (void)hideProgressView { + if (_progressView) { + self.progressView.hidden = YES; + self.imageView.alpha = 1.0; + } +} + +- (void)requestBigImage { + if (_bigImageRequestID) { + [[PHImageManager defaultManager] cancelImageRequest:_bigImageRequestID]; + } + + _bigImageRequestID = [[TZImageManager manager] requestImageDataForAsset:_model.asset completion:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { + [self hideProgressView]; + } progressHandler:^(double progress, NSError *error, BOOL *stop, NSDictionary *info) { + if (self.model.isSelected) { + progress = progress > 0.02 ? progress : 0.02;; + self.progressView.progress = progress; + self.progressView.hidden = NO; + self.imageView.alpha = 0.4; + if (progress >= 1) { + [self hideProgressView]; + } + } else { + *stop = YES; + [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; + [self cancelBigImageRequest]; + } + }]; +} + +- (void)cancelBigImageRequest { + if (_bigImageRequestID) { + [[PHImageManager defaultManager] cancelImageRequest:_bigImageRequestID]; + } + [self hideProgressView]; +} + +#pragma mark - Lazy load + +- (UIButton *)selectPhotoButton { + if (_selectPhotoButton == nil) { + UIButton *selectPhotoButton = [[UIButton alloc] init]; + [selectPhotoButton addTarget:self action:@selector(selectPhotoButtonClick:) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:selectPhotoButton]; + _selectPhotoButton = selectPhotoButton; + } + return _selectPhotoButton; +} + +- (UIImageView *)imageView { + if (_imageView == nil) { + UIImageView *imageView = [[UIImageView alloc] init]; + imageView.contentMode = UIViewContentModeScaleAspectFill; + imageView.clipsToBounds = YES; + [self.contentView addSubview:imageView]; + _imageView = imageView; + } + return _imageView; +} + +- (UIImageView *)selectImageView { + if (_selectImageView == nil) { + UIImageView *selectImageView = [[UIImageView alloc] init]; + selectImageView.contentMode = UIViewContentModeCenter; + selectImageView.clipsToBounds = YES; + [self.contentView addSubview:selectImageView]; + _selectImageView = selectImageView; + } + return _selectImageView; +} + +- (UIView *)bottomView { + if (_bottomView == nil) { + UIView *bottomView = [[UIView alloc] init]; + static NSInteger rgb = 0; + bottomView.backgroundColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:0.8]; + [self.contentView addSubview:bottomView]; + _bottomView = bottomView; + } + return _bottomView; +} + +- (UIButton *)cannotSelectLayerButton { + if (_cannotSelectLayerButton == nil) { + UIButton *cannotSelectLayerButton = [[UIButton alloc] init]; + [self.contentView addSubview:cannotSelectLayerButton]; + _cannotSelectLayerButton = cannotSelectLayerButton; + } + return _cannotSelectLayerButton; +} + +- (UIImageView *)videoImgView { + if (_videoImgView == nil) { + UIImageView *videoImgView = [[UIImageView alloc] init]; + [videoImgView setImage:[UIImage imageNamedFromMyBundle:@"VideoSendIcon"]]; + [self.bottomView addSubview:videoImgView]; + _videoImgView = videoImgView; + } + return _videoImgView; +} + +- (UILabel *)timeLength { + if (_timeLength == nil) { + UILabel *timeLength = [[UILabel alloc] init]; + timeLength.font = [UIFont boldSystemFontOfSize:11]; + timeLength.textColor = [UIColor whiteColor]; + timeLength.textAlignment = NSTextAlignmentRight; + [self.bottomView addSubview:timeLength]; + _timeLength = timeLength; + } + return _timeLength; +} + +- (UILabel *)indexLabel { + if (_indexLabel == nil) { + UILabel *indexLabel = [[UILabel alloc] init]; + indexLabel.font = [UIFont systemFontOfSize:14]; + indexLabel.textColor = [UIColor whiteColor]; + indexLabel.textAlignment = NSTextAlignmentCenter; + [self.contentView addSubview:indexLabel]; + _indexLabel = indexLabel; + } + return _indexLabel; +} + +- (TZProgressView *)progressView { + if (_progressView == nil) { + _progressView = [[TZProgressView alloc] init]; + _progressView.hidden = YES; + [self addSubview:_progressView]; + } + return _progressView; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + _cannotSelectLayerButton.frame = self.bounds; + if (self.allowPreview) { + _selectPhotoButton.frame = CGRectMake(self.tz_width - 44, 0, 44, 44); + } else { + _selectPhotoButton.frame = self.bounds; + } + _selectImageView.frame = CGRectMake(self.tz_width - 27, 3, 24, 24); + if (_selectImageView.image.size.width <= 27) { + _selectImageView.contentMode = UIViewContentModeCenter; + } else { + _selectImageView.contentMode = UIViewContentModeScaleAspectFit; + } + _indexLabel.frame = _selectImageView.frame; + _imageView.frame = CGRectMake(0, 0, self.tz_width, self.tz_height); + + static CGFloat progressWH = 20; + CGFloat progressXY = (self.tz_width - progressWH) / 2; + _progressView.frame = CGRectMake(progressXY, progressXY, progressWH, progressWH); + + _bottomView.frame = CGRectMake(0, self.tz_height - 17, self.tz_width, 17); + _videoImgView.frame = CGRectMake(8, 0, 17, 17); + _timeLength.frame = CGRectMake(self.videoImgView.tz_right, 0, self.tz_width - self.videoImgView.tz_right - 5, 17); + + self.type = (NSInteger)self.model.type; + self.showSelectBtn = self.showSelectBtn; + + [self.contentView bringSubviewToFront:_bottomView]; + [self.contentView bringSubviewToFront:_cannotSelectLayerButton]; + [self.contentView bringSubviewToFront:_selectPhotoButton]; + [self.contentView bringSubviewToFront:_selectImageView]; + [self.contentView bringSubviewToFront:_indexLabel]; + + if (self.assetCellDidLayoutSubviewsBlock) { + self.assetCellDidLayoutSubviewsBlock(self, _imageView, _selectImageView, _indexLabel, _bottomView, _timeLength, _videoImgView); + } +} + +@end + +@interface TZAlbumCell () +@property (weak, nonatomic) UIImageView *posterImageView; +@property (weak, nonatomic) UILabel *titleLabel; +@end + +@implementation TZAlbumCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + self.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + return self; +} + +- (void)setModel:(TZAlbumModel *)model { + _model = model; + + NSMutableAttributedString *nameString = [[NSMutableAttributedString alloc] initWithString:model.name attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor blackColor]}]; + NSAttributedString *countString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@" (%zd)",model.count] attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16],NSForegroundColorAttributeName:[UIColor lightGrayColor]}]; + [nameString appendAttributedString:countString]; + self.titleLabel.attributedText = nameString; + [[TZImageManager manager] getPostImageWithAlbumModel:model completion:^(UIImage *postImage) { + self.posterImageView.image = postImage; + }]; + if (model.selectedCount) { + self.selectedCountButton.hidden = NO; + [self.selectedCountButton setTitle:[NSString stringWithFormat:@"%zd",model.selectedCount] forState:UIControlStateNormal]; + } else { + self.selectedCountButton.hidden = YES; + } + + if (self.albumCellDidSetModelBlock) { + self.albumCellDidSetModelBlock(self, _posterImageView, _titleLabel); + } +} + +/// For fitting iOS6 +- (void)layoutSubviews { + if (iOS7Later) [super layoutSubviews]; + _selectedCountButton.frame = CGRectMake(self.tz_width - 24 - 30, 23, 24, 24); + NSInteger titleHeight = ceil(self.titleLabel.font.lineHeight); + self.titleLabel.frame = CGRectMake(80, (self.tz_height - titleHeight) / 2, self.tz_width - 80 - 50, titleHeight); + self.posterImageView.frame = CGRectMake(0, 0, 70, 70); + + if (self.albumCellDidLayoutSubviewsBlock) { + self.albumCellDidLayoutSubviewsBlock(self, _posterImageView, _titleLabel); + } +} + +- (void)layoutSublayersOfLayer:(CALayer *)layer { + if (iOS7Later) [super layoutSublayersOfLayer:layer]; +} + +#pragma mark - Lazy load + +- (UIImageView *)posterImageView { + if (_posterImageView == nil) { + UIImageView *posterImageView = [[UIImageView alloc] init]; + posterImageView.contentMode = UIViewContentModeScaleAspectFill; + posterImageView.clipsToBounds = YES; + [self.contentView addSubview:posterImageView]; + _posterImageView = posterImageView; + } + return _posterImageView; +} + +- (UILabel *)titleLabel { + if (_titleLabel == nil) { + UILabel *titleLabel = [[UILabel alloc] init]; + titleLabel.font = [UIFont boldSystemFontOfSize:17]; + titleLabel.textColor = [UIColor blackColor]; + titleLabel.textAlignment = NSTextAlignmentLeft; + [self.contentView addSubview:titleLabel]; + _titleLabel = titleLabel; + } + return _titleLabel; +} + +- (UIButton *)selectedCountButton { + if (_selectedCountButton == nil) { + UIButton *selectedCountButton = [[UIButton alloc] init]; + selectedCountButton.layer.cornerRadius = 12; + selectedCountButton.clipsToBounds = YES; + selectedCountButton.backgroundColor = [UIColor redColor]; + [selectedCountButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + selectedCountButton.titleLabel.font = [UIFont systemFontOfSize:15]; + [self.contentView addSubview:selectedCountButton]; + _selectedCountButton = selectedCountButton; + } + return _selectedCountButton; +} + +@end + + + +@implementation TZAssetCameraCell + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + _imageView = [[UIImageView alloc] init]; + _imageView.backgroundColor = [UIColor colorWithWhite:1.000 alpha:0.500]; + _imageView.contentMode = UIViewContentModeScaleAspectFill; + [self.contentView addSubview:_imageView]; + self.clipsToBounds = YES; + } + return self; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + _imageView.frame = self.bounds; +} + +@end -- Gitblit v1.8.0