Commit 6950bfde authored by banchichen's avatar banchichen

修复内存泄露的问题;修复iOS7下拍照的几个问题等

parent ea468ff9
File added
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = "TZImagePickerController" s.name = "TZImagePickerController"
s.version = "1.3.1" s.version = "1.3.3"
s.summary = "A clone of UIImagePickerController, support picking multiple photos、original photo and video" s.summary = "A clone of UIImagePickerController, support picking multiple photos、original photo and video"
s.homepage = "https://github.com/banchichen/TZImagePickerController" s.homepage = "https://github.com/banchichen/TZImagePickerController"
s.license = "MIT" s.license = "MIT"
s.author = { "banchichen" => "736420282@qq.com" } s.author = { "banchichen" => "736420282@qq.com" }
s.platform = :ios s.platform = :ios
s.ios.deployment_target = "6.0" s.ios.deployment_target = "6.0"
s.source = { :git => "https://github.com/banchichen/TZImagePickerController.git", :tag => "1.3.1" } s.source = { :git => "https://github.com/banchichen/TZImagePickerController.git", :tag => "1.3.3" }
s.requires_arc = true s.requires_arc = true
s.resources = "TZImagePickerController/TZImagePickerController/*.{png,xib,nib,bundle}" s.resources = "TZImagePickerController/TZImagePickerController/*.{png,xib,nib,bundle}"
s.source_files = "TZImagePickerController/TZImagePickerController/*.{h,m}" s.source_files = "TZImagePickerController/TZImagePickerController/*.{h,m}"
......
...@@ -37,6 +37,9 @@ ...@@ -37,6 +37,9 @@
- (void)getPhotoWithAsset:(id)asset photoWidth:(CGFloat)photoWidth completion:(void (^)(UIImage *photo,NSDictionary *info,BOOL isDegraded))completion; - (void)getPhotoWithAsset:(id)asset photoWidth:(CGFloat)photoWidth completion:(void (^)(UIImage *photo,NSDictionary *info,BOOL isDegraded))completion;
- (void)getOriginalPhotoWithAsset:(id)asset completion:(void (^)(UIImage *photo,NSDictionary *info))completion; - (void)getOriginalPhotoWithAsset:(id)asset completion:(void (^)(UIImage *photo,NSDictionary *info))completion;
/// Save photo 保存照片
- (void)savePhotoWithImage:(UIImage *)image completion:(void (^)())completion;
/// Get video 获得视频 /// Get video 获得视频
- (void)getVideoWithAsset:(id)asset completion:(void (^)(AVPlayerItem * playerItem, NSDictionary * info))completion; - (void)getVideoWithAsset:(id)asset completion:(void (^)(AVPlayerItem * playerItem, NSDictionary * info))completion;
......
...@@ -65,7 +65,6 @@ ...@@ -65,7 +65,6 @@
} }
} else { } else {
[self.assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { [self.assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if ([group numberOfAssets] < 1) return; if ([group numberOfAssets] < 1) return;
NSString *name = [group valueForProperty:ALAssetsGroupPropertyName]; NSString *name = [group valueForProperty:ALAssetsGroupPropertyName];
if ([name isEqualToString:@"Camera Roll"] || [name isEqualToString:@"相机胶卷"] || [name isEqualToString:@"所有照片"]) { if ([name isEqualToString:@"Camera Roll"] || [name isEqualToString:@"相机胶卷"] || [name isEqualToString:@"所有照片"]) {
...@@ -159,8 +158,13 @@ ...@@ -159,8 +158,13 @@
if (completion) completion(photoArr); if (completion) completion(photoArr);
} else if ([result isKindOfClass:[ALAssetsGroup class]]) { } else if ([result isKindOfClass:[ALAssetsGroup class]]) {
ALAssetsGroup *group = (ALAssetsGroup *)result; ALAssetsGroup *group = (ALAssetsGroup *)result;
if (!allowPickingVideo) [group setAssetsFilter:[ALAssetsFilter allPhotos]]; if (allowPickingImage && allowPickingVideo) {
if (!allowPickingImage) [group setAssetsFilter:[ALAssetsFilter allPhotos]]; [group setAssetsFilter:[ALAssetsFilter allAssets]];
} else if (allowPickingVideo) {
[group setAssetsFilter:[ALAssetsFilter allVideos]];
} else if (allowPickingImage) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
}
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result == nil) { if (result == nil) {
if (completion) completion(photoArr); if (completion) completion(photoArr);
...@@ -170,11 +174,6 @@ ...@@ -170,11 +174,6 @@
[photoArr addObject:[TZAssetModel modelWithAsset:result type:type]]; [photoArr addObject:[TZAssetModel modelWithAsset:result type:type]];
return; return;
} }
if (!allowPickingImage){
[photoArr addObject:[TZAssetModel modelWithAsset:result type:type]];
return;
}
/// Allow picking video /// Allow picking video
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) { if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
type = TZAssetModelMediaTypeVideo; type = TZAssetModelMediaTypeVideo;
...@@ -209,8 +208,13 @@ ...@@ -209,8 +208,13 @@
if (completion) completion(model); if (completion) completion(model);
} else if ([result isKindOfClass:[ALAssetsGroup class]]) { } else if ([result isKindOfClass:[ALAssetsGroup class]]) {
ALAssetsGroup *group = (ALAssetsGroup *)result; ALAssetsGroup *group = (ALAssetsGroup *)result;
if (!allowPickingVideo) [group setAssetsFilter:[ALAssetsFilter allPhotos]]; if (allowPickingImage && allowPickingVideo) {
if (!allowPickingImage) [group setAssetsFilter:[ALAssetsFilter allVideos]]; [group setAssetsFilter:[ALAssetsFilter allAssets]];
} else if (allowPickingVideo) {
[group setAssetsFilter:[ALAssetsFilter allVideos]];
} else if (allowPickingImage) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
}
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index]; NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];
[group enumerateAssetsAtIndexes:indexSet options:NSEnumerationConcurrent usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { [group enumerateAssetsAtIndexes:indexSet options:NSEnumerationConcurrent usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
TZAssetModel *model; TZAssetModel *model;
...@@ -220,12 +224,6 @@ ...@@ -220,12 +224,6 @@
if (completion) completion(model); if (completion) completion(model);
return; return;
} }
if (!allowPickingImage){
model = [TZAssetModel modelWithAsset:result type:type];
if (completion) completion(model);
return;
}
/// Allow picking video /// Allow picking video
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) { if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
type = TZAssetModelMediaTypeVideo; type = TZAssetModelMediaTypeVideo;
...@@ -392,6 +390,35 @@ ...@@ -392,6 +390,35 @@
} }
} }
#pragma mark - Save photo
- (void)savePhotoWithImage:(UIImage *)image completion:(void (^)())completion {
NSData *data = UIImageJPEGRepresentation(image, 0.9);
if (iOS8Later) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
[[PHAssetCreationRequest creationRequestForAsset] addResourceWithType:PHAssetResourceTypePhoto data:data options:nil];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
dispatch_sync(dispatch_get_main_queue(), ^{
if (success && completion) {
completion();
} else if (error) {
NSLog(@"保存照片出错:%@",error.localizedDescription);
}
});
}];
} else {
[self.assetLibrary writeImageToSavedPhotosAlbum:image.CGImage orientation:ALAssetOrientationUp completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
NSLog(@"保存图片失败:%@",error.localizedDescription);
} else {
if (completion) {
completion();
}
}
}];
}
}
#pragma mark - Get Video #pragma mark - Get Video
- (void)getVideoWithAsset:(id)asset completion:(void (^)(AVPlayerItem * _Nullable, NSDictionary * _Nullable))completion { - (void)getVideoWithAsset:(id)asset completion:(void (^)(AVPlayerItem * _Nullable, NSDictionary * _Nullable))completion {
......
...@@ -235,9 +235,8 @@ ...@@ -235,9 +235,8 @@
@interface TZAlbumPickerController ()<UITableViewDataSource,UITableViewDelegate> { @interface TZAlbumPickerController ()<UITableViewDataSource,UITableViewDelegate> {
UITableView *_tableView; UITableView *_tableView;
NSMutableArray *_albumArr;
} }
@property (nonatomic, strong) NSMutableArray *albumArr;
@end @end
@implementation TZAlbumPickerController @implementation TZAlbumPickerController
...@@ -319,8 +318,9 @@ ...@@ -319,8 +318,9 @@
TZPhotoPickerController *photoPickerVc = [[TZPhotoPickerController alloc] init]; TZPhotoPickerController *photoPickerVc = [[TZPhotoPickerController alloc] init];
TZAlbumModel *model = _albumArr[indexPath.row]; TZAlbumModel *model = _albumArr[indexPath.row];
photoPickerVc.model = model; photoPickerVc.model = model;
__weak typeof(self) weakSelf = self;
[photoPickerVc setBackButtonClickHandle:^(TZAlbumModel *model) { [photoPickerVc setBackButtonClickHandle:^(TZAlbumModel *model) {
[_albumArr replaceObjectAtIndex:indexPath.row withObject:model]; [weakSelf.albumArr replaceObjectAtIndex:indexPath.row withObject:model];
}]; }];
[self.navigationController pushViewController:photoPickerVc animated:YES]; [self.navigationController pushViewController:photoPickerVc animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:NO]; [tableView deselectRowAtIndexPath:indexPath animated:NO];
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#import "TZVideoPlayerController.h" #import "TZVideoPlayerController.h"
@interface TZPhotoPickerController ()<UICollectionViewDataSource,UICollectionViewDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate> { @interface TZPhotoPickerController ()<UICollectionViewDataSource,UICollectionViewDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate> {
UICollectionView *_collectionView;
NSMutableArray *_photoArr; NSMutableArray *_photoArr;
UIButton *_previewButton; UIButton *_previewButton;
...@@ -26,12 +25,12 @@ ...@@ -26,12 +25,12 @@
UIButton *_originalPhotoButton; UIButton *_originalPhotoButton;
UILabel *_originalPhotoLable; UILabel *_originalPhotoLable;
BOOL _isSelectOriginalPhoto;
BOOL _shouldScrollToBottom; BOOL _shouldScrollToBottom;
} }
@property CGRect previousPreheatRect; @property CGRect previousPreheatRect;
@property (nonatomic, assign) BOOL isSelectOriginalPhoto;
@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) UIImagePickerController *imagePickerVc; @property (nonatomic, strong) UIImagePickerController *imagePickerVc;
@property (nonatomic, strong) TZImagePickerController *tzImagePickerVc;
@end @end
static CGSize AssetGridThumbnailSize; static CGSize AssetGridThumbnailSize;
...@@ -42,7 +41,6 @@ static CGSize AssetGridThumbnailSize; ...@@ -42,7 +41,6 @@ static CGSize AssetGridThumbnailSize;
if (_imagePickerVc == nil) { if (_imagePickerVc == nil) {
_imagePickerVc = [[UIImagePickerController alloc] init]; _imagePickerVc = [[UIImagePickerController alloc] init];
_imagePickerVc.delegate = self; _imagePickerVc.delegate = self;
_imagePickerVc.allowsEditing = YES;
// set appearance / 改变相册选择页的导航栏外观 // set appearance / 改变相册选择页的导航栏外观
_imagePickerVc.navigationBar.barTintColor = self.navigationController.navigationBar.barTintColor; _imagePickerVc.navigationBar.barTintColor = self.navigationController.navigationBar.barTintColor;
_imagePickerVc.navigationBar.tintColor = self.navigationController.navigationBar.tintColor; _imagePickerVc.navigationBar.tintColor = self.navigationController.navigationBar.tintColor;
...@@ -62,15 +60,14 @@ static CGSize AssetGridThumbnailSize; ...@@ -62,15 +60,14 @@ static CGSize AssetGridThumbnailSize;
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
__weak typeof(self) weakSelf = self; TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
_tzImagePickerVc = (TZImagePickerController *)weakSelf.navigationController; _isSelectOriginalPhoto = tzImagePickerVc.isSelectOriginalPhoto;
_isSelectOriginalPhoto = _tzImagePickerVc.isSelectOriginalPhoto;
_shouldScrollToBottom = YES; _shouldScrollToBottom = YES;
self.view.backgroundColor = [UIColor whiteColor]; self.view.backgroundColor = [UIColor whiteColor];
self.navigationItem.title = _model.name; self.navigationItem.title = _model.name;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancel)]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancel)];
if ([_model.name isEqualToString:@"相机胶卷"] || [_model.name isEqualToString:@"Camera Roll"] || [_model.name isEqualToString:@"所有照片"] ) { if ([_model.name isEqualToString:@"相机胶卷"] || [_model.name isEqualToString:@"Camera Roll"] || [_model.name isEqualToString:@"所有照片"] || !iOS8Later) {
[[TZImageManager manager] getAssetsFromFetchResult:_model.result allowPickingVideo:_tzImagePickerVc.allowPickingVideo allowPickingImage:_tzImagePickerVc.allowPickingImage completion:^(NSArray<TZAssetModel *> *models) { [[TZImageManager manager] getAssetsFromFetchResult:_model.result allowPickingVideo:tzImagePickerVc.allowPickingVideo allowPickingImage:tzImagePickerVc.allowPickingImage completion:^(NSArray<TZAssetModel *> *models) {
_photoArr = [NSMutableArray arrayWithArray:models]; _photoArr = [NSMutableArray arrayWithArray:models];
[self initSubviews]; [self initSubviews];
}]; }];
...@@ -89,7 +86,8 @@ static CGSize AssetGridThumbnailSize; ...@@ -89,7 +86,8 @@ static CGSize AssetGridThumbnailSize;
- (void)viewWillDisappear:(BOOL)animated { - (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated]; [super viewWillDisappear:animated];
_tzImagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto; TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
tzImagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto;
if (self.backButtonClickHandle) { if (self.backButtonClickHandle) {
self.backButtonClickHandle(_model); self.backButtonClickHandle(_model);
} }
...@@ -138,6 +136,7 @@ static CGSize AssetGridThumbnailSize; ...@@ -138,6 +136,7 @@ static CGSize AssetGridThumbnailSize;
} }
- (void)configBottomToolBar { - (void)configBottomToolBar {
TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
UIView *bottomToolBar = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.tz_height - 50, self.view.tz_width, 50)]; UIView *bottomToolBar = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.tz_height - 50, self.view.tz_width, 50)];
CGFloat rgb = 253 / 255.0; CGFloat rgb = 253 / 255.0;
bottomToolBar.backgroundColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:1.0]; bottomToolBar.backgroundColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:1.0];
...@@ -150,9 +149,9 @@ static CGSize AssetGridThumbnailSize; ...@@ -150,9 +149,9 @@ static CGSize AssetGridThumbnailSize;
[_previewButton setTitle:@"预览" forState:UIControlStateDisabled]; [_previewButton setTitle:@"预览" forState:UIControlStateDisabled];
[_previewButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_previewButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_previewButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled]; [_previewButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled];
_previewButton.enabled = _tzImagePickerVc.selectedModels.count; _previewButton.enabled = tzImagePickerVc.selectedModels.count;
if (_tzImagePickerVc.allowPickingOriginalPhoto) { if (tzImagePickerVc.allowPickingOriginalPhoto) {
_originalPhotoButton = [UIButton buttonWithType:UIButtonTypeCustom]; _originalPhotoButton = [UIButton buttonWithType:UIButtonTypeCustom];
_originalPhotoButton.frame = CGRectMake(50, self.view.tz_height - 50, 130, 50); _originalPhotoButton.frame = CGRectMake(50, self.view.tz_height - 50, 130, 50);
_originalPhotoButton.imageEdgeInsets = UIEdgeInsetsMake(0, -8, 0, 0); _originalPhotoButton.imageEdgeInsets = UIEdgeInsetsMake(0, -8, 0, 0);
...@@ -166,7 +165,7 @@ static CGSize AssetGridThumbnailSize; ...@@ -166,7 +165,7 @@ static CGSize AssetGridThumbnailSize;
[_originalPhotoButton setImage:[UIImage imageNamedFromMyBundle:@"photo_original_def.png"] forState:UIControlStateNormal]; [_originalPhotoButton setImage:[UIImage imageNamedFromMyBundle:@"photo_original_def.png"] forState:UIControlStateNormal];
[_originalPhotoButton setImage:[UIImage imageNamedFromMyBundle:@"photo_original_sel.png"] forState:UIControlStateSelected]; [_originalPhotoButton setImage:[UIImage imageNamedFromMyBundle:@"photo_original_sel.png"] forState:UIControlStateSelected];
_originalPhotoButton.selected = _isSelectOriginalPhoto; _originalPhotoButton.selected = _isSelectOriginalPhoto;
_originalPhotoButton.enabled = _tzImagePickerVc.selectedModels.count > 0; _originalPhotoButton.enabled = tzImagePickerVc.selectedModels.count > 0;
_originalPhotoLable = [[UILabel alloc] init]; _originalPhotoLable = [[UILabel alloc] init];
_originalPhotoLable.frame = CGRectMake(70, 0, 60, 50); _originalPhotoLable.frame = CGRectMake(70, 0, 60, 50);
...@@ -182,13 +181,13 @@ static CGSize AssetGridThumbnailSize; ...@@ -182,13 +181,13 @@ static CGSize AssetGridThumbnailSize;
[_okButton addTarget:self action:@selector(okButtonClick) forControlEvents:UIControlEventTouchUpInside]; [_okButton addTarget:self action:@selector(okButtonClick) forControlEvents:UIControlEventTouchUpInside];
[_okButton setTitle:@"确定" forState:UIControlStateNormal]; [_okButton setTitle:@"确定" forState:UIControlStateNormal];
[_okButton setTitle:@"确定" forState:UIControlStateDisabled]; [_okButton setTitle:@"确定" forState:UIControlStateDisabled];
[_okButton setTitleColor:_tzImagePickerVc.oKButtonTitleColorNormal forState:UIControlStateNormal]; [_okButton setTitleColor:tzImagePickerVc.oKButtonTitleColorNormal forState:UIControlStateNormal];
[_okButton setTitleColor:_tzImagePickerVc.oKButtonTitleColorDisabled forState:UIControlStateDisabled]; [_okButton setTitleColor:tzImagePickerVc.oKButtonTitleColorDisabled forState:UIControlStateDisabled];
_okButton.enabled = _tzImagePickerVc.selectedModels.count; _okButton.enabled = tzImagePickerVc.selectedModels.count;
_numberImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamedFromMyBundle:@"photo_number_icon.png"]]; _numberImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamedFromMyBundle:@"photo_number_icon.png"]];
_numberImageView.frame = CGRectMake(self.view.tz_width - 56 - 24, 12, 26, 26); _numberImageView.frame = CGRectMake(self.view.tz_width - 56 - 24, 12, 26, 26);
_numberImageView.hidden = _tzImagePickerVc.selectedModels.count <= 0; _numberImageView.hidden = tzImagePickerVc.selectedModels.count <= 0;
_numberImageView.backgroundColor = [UIColor clearColor]; _numberImageView.backgroundColor = [UIColor clearColor];
_numberLable = [[UILabel alloc] init]; _numberLable = [[UILabel alloc] init];
...@@ -196,8 +195,8 @@ static CGSize AssetGridThumbnailSize; ...@@ -196,8 +195,8 @@ static CGSize AssetGridThumbnailSize;
_numberLable.font = [UIFont systemFontOfSize:16]; _numberLable.font = [UIFont systemFontOfSize:16];
_numberLable.textColor = [UIColor whiteColor]; _numberLable.textColor = [UIColor whiteColor];
_numberLable.textAlignment = NSTextAlignmentCenter; _numberLable.textAlignment = NSTextAlignmentCenter;
_numberLable.text = [NSString stringWithFormat:@"%zd",_tzImagePickerVc.selectedModels.count]; _numberLable.text = [NSString stringWithFormat:@"%zd",tzImagePickerVc.selectedModels.count];
_numberLable.hidden = _tzImagePickerVc.selectedModels.count <= 0; _numberLable.hidden = tzImagePickerVc.selectedModels.count <= 0;
_numberLable.backgroundColor = [UIColor clearColor]; _numberLable.backgroundColor = [UIColor clearColor];
UIView *divide = [[UIView alloc] init]; UIView *divide = [[UIView alloc] init];
...@@ -229,8 +228,9 @@ static CGSize AssetGridThumbnailSize; ...@@ -229,8 +228,9 @@ static CGSize AssetGridThumbnailSize;
} }
- (void)previewButtonClick { - (void)previewButtonClick {
TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
TZPhotoPreviewController *photoPreviewVc = [[TZPhotoPreviewController alloc] init]; TZPhotoPreviewController *photoPreviewVc = [[TZPhotoPreviewController alloc] init];
photoPreviewVc.photoArr = [NSArray arrayWithArray:_tzImagePickerVc.selectedModels]; photoPreviewVc.photoArr = [NSArray arrayWithArray:tzImagePickerVc.selectedModels];
[self pushPhotoPrevireViewController:photoPreviewVc]; [self pushPhotoPrevireViewController:photoPreviewVc];
} }
...@@ -242,19 +242,20 @@ static CGSize AssetGridThumbnailSize; ...@@ -242,19 +242,20 @@ static CGSize AssetGridThumbnailSize;
} }
- (void)okButtonClick { - (void)okButtonClick {
[_tzImagePickerVc showProgressHUD]; TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
[tzImagePickerVc showProgressHUD];
NSMutableArray *photos = [NSMutableArray array]; NSMutableArray *photos = [NSMutableArray array];
NSMutableArray *assets = [NSMutableArray array]; NSMutableArray *assets = [NSMutableArray array];
NSMutableArray *infoArr = [NSMutableArray array]; NSMutableArray *infoArr = [NSMutableArray array];
for (NSInteger i = 0; i < _tzImagePickerVc.selectedModels.count; i++) { [photos addObject:@1];[assets addObject:@1];[infoArr addObject:@1]; } for (NSInteger i = 0; i < tzImagePickerVc.selectedModels.count; i++) { [photos addObject:@1];[assets addObject:@1];[infoArr addObject:@1]; }
[TZImageManager manager].shouldFixOrientation = YES; [TZImageManager manager].shouldFixOrientation = YES;
for (NSInteger i = 0; i < _tzImagePickerVc.selectedModels.count; i++) { for (NSInteger i = 0; i < tzImagePickerVc.selectedModels.count; i++) {
TZAssetModel *model = _tzImagePickerVc.selectedModels[i]; TZAssetModel *model = tzImagePickerVc.selectedModels[i];
[[TZImageManager manager] getPhotoWithAsset:model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) { [[TZImageManager manager] getPhotoWithAsset:model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
if (isDegraded) return; if (isDegraded) return;
if (photo) { if (photo) {
photo = [self scaleImage:photo toSize:CGSizeMake(_tzImagePickerVc.photoWidth, _tzImagePickerVc.photoWidth * photo.size.height / photo.size.width)]; photo = [self scaleImage:photo toSize:CGSizeMake(tzImagePickerVc.photoWidth, tzImagePickerVc.photoWidth * photo.size.height / photo.size.width)];
[photos replaceObjectAtIndex:i withObject:photo]; [photos replaceObjectAtIndex:i withObject:photo];
} }
if (info) [infoArr replaceObjectAtIndex:i withObject:info]; if (info) [infoArr replaceObjectAtIndex:i withObject:info];
...@@ -262,19 +263,19 @@ static CGSize AssetGridThumbnailSize; ...@@ -262,19 +263,19 @@ static CGSize AssetGridThumbnailSize;
for (id item in photos) { if ([item isKindOfClass:[NSNumber class]]) return; } for (id item in photos) { if ([item isKindOfClass:[NSNumber class]]) return; }
if ([_tzImagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingPhotos:sourceAssets:isSelectOriginalPhoto:)]) { if ([tzImagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingPhotos:sourceAssets:isSelectOriginalPhoto:)]) {
[_tzImagePickerVc.pickerDelegate imagePickerController:_tzImagePickerVc didFinishPickingPhotos:photos sourceAssets:assets isSelectOriginalPhoto:_isSelectOriginalPhoto]; [tzImagePickerVc.pickerDelegate imagePickerController:tzImagePickerVc didFinishPickingPhotos:photos sourceAssets:assets isSelectOriginalPhoto:_isSelectOriginalPhoto];
} }
if ([_tzImagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingPhotos:sourceAssets:isSelectOriginalPhoto:infos:)]) { if ([tzImagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingPhotos:sourceAssets:isSelectOriginalPhoto:infos:)]) {
[_tzImagePickerVc.pickerDelegate imagePickerController:_tzImagePickerVc didFinishPickingPhotos:photos sourceAssets:assets isSelectOriginalPhoto:_isSelectOriginalPhoto infos:infoArr]; [tzImagePickerVc.pickerDelegate imagePickerController:tzImagePickerVc didFinishPickingPhotos:photos sourceAssets:assets isSelectOriginalPhoto:_isSelectOriginalPhoto infos:infoArr];
} }
if (_tzImagePickerVc.didFinishPickingPhotosHandle) { if (tzImagePickerVc.didFinishPickingPhotosHandle) {
_tzImagePickerVc.didFinishPickingPhotosHandle(photos,assets,_isSelectOriginalPhoto); tzImagePickerVc.didFinishPickingPhotosHandle(photos,assets,_isSelectOriginalPhoto);
} }
if (_tzImagePickerVc.didFinishPickingPhotosWithInfosHandle) { if (tzImagePickerVc.didFinishPickingPhotosWithInfosHandle) {
_tzImagePickerVc.didFinishPickingPhotosWithInfosHandle(photos,assets,_isSelectOriginalPhoto,infoArr); tzImagePickerVc.didFinishPickingPhotosWithInfosHandle(photos,assets,_isSelectOriginalPhoto,infoArr);
} }
[_tzImagePickerVc hideProgressHUD]; [tzImagePickerVc hideProgressHUD];
[self.navigationController dismissViewControllerAnimated:YES completion:nil]; [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}]; }];
} }
...@@ -284,7 +285,8 @@ static CGSize AssetGridThumbnailSize; ...@@ -284,7 +285,8 @@ static CGSize AssetGridThumbnailSize;
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
if ([_model.name isEqualToString:@"相机胶卷"] || [_model.name isEqualToString:@"Camera Roll"] || [_model.name isEqualToString:@"所有照片"] ) { if ([_model.name isEqualToString:@"相机胶卷"] || [_model.name isEqualToString:@"Camera Roll"] || [_model.name isEqualToString:@"所有照片"] ) {
if (_tzImagePickerVc.allowPickingImage) { TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
if (tzImagePickerVc.allowPickingImage) {
return _photoArr.count + 1; return _photoArr.count + 1;
} }
} }
...@@ -307,26 +309,27 @@ static CGSize AssetGridThumbnailSize; ...@@ -307,26 +309,27 @@ static CGSize AssetGridThumbnailSize;
__weak typeof(self) weakSelf = self; __weak typeof(self) weakSelf = self;
__weak typeof(_numberImageView.layer) weakLayer = _numberImageView.layer; __weak typeof(_numberImageView.layer) weakLayer = _numberImageView.layer;
cell.didSelectPhotoBlock = ^(BOOL isSelected) { cell.didSelectPhotoBlock = ^(BOOL isSelected) {
TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)weakSelf.navigationController;
// 1. cancel select / 取消选择 // 1. cancel select / 取消选择
if (isSelected) { if (isSelected) {
weakCell.selectPhotoButton.selected = NO; weakCell.selectPhotoButton.selected = NO;
model.isSelected = NO; model.isSelected = NO;
NSArray *selectedModels = [NSArray arrayWithArray:weakSelf.tzImagePickerVc.selectedModels]; NSArray *selectedModels = [NSArray arrayWithArray:tzImagePickerVc.selectedModels];
for (TZAssetModel *model_item in selectedModels) { for (TZAssetModel *model_item in selectedModels) {
if ([model.asset isEqual:model_item.asset]) { if ([model.asset isEqual:model_item.asset]) {
[weakSelf.tzImagePickerVc.selectedModels removeObject:model_item]; [tzImagePickerVc.selectedModels removeObject:model_item];
} }
} }
[weakSelf refreshBottomToolBarStatus]; [weakSelf refreshBottomToolBarStatus];
} else { } else {
// 2. select:check if over the maxImagesCount / 选择照片,检查是否超过了最大个数的限制 // 2. select:check if over the maxImagesCount / 选择照片,检查是否超过了最大个数的限制
if (weakSelf.tzImagePickerVc.selectedModels.count < weakSelf.tzImagePickerVc.maxImagesCount) { if (tzImagePickerVc.selectedModels.count < tzImagePickerVc.maxImagesCount) {
weakCell.selectPhotoButton.selected = YES; weakCell.selectPhotoButton.selected = YES;
model.isSelected = YES; model.isSelected = YES;
[weakSelf.tzImagePickerVc.selectedModels addObject:model]; [tzImagePickerVc.selectedModels addObject:model];
[weakSelf refreshBottomToolBarStatus]; [weakSelf refreshBottomToolBarStatus];
} else { } else {
[weakSelf.tzImagePickerVc showAlertWithTitle:[NSString stringWithFormat:@"你最多只能选择%zd张照片",weakSelf.tzImagePickerVc.maxImagesCount]]; [tzImagePickerVc showAlertWithTitle:[NSString stringWithFormat:@"你最多只能选择%zd张照片",tzImagePickerVc.maxImagesCount]];
} }
} }
[UIView showOscillatoryAnimationWithLayer:weakLayer type:TZOscillatoryAnimationToSmaller]; [UIView showOscillatoryAnimationWithLayer:weakLayer type:TZOscillatoryAnimationToSmaller];
...@@ -341,8 +344,9 @@ static CGSize AssetGridThumbnailSize; ...@@ -341,8 +344,9 @@ static CGSize AssetGridThumbnailSize;
} }
// preview phote or video / 预览照片或视频 // preview phote or video / 预览照片或视频
TZAssetModel *model = _photoArr[indexPath.row]; TZAssetModel *model = _photoArr[indexPath.row];
TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
if (model.type == TZAssetModelMediaTypeVideo) { if (model.type == TZAssetModelMediaTypeVideo) {
if (_tzImagePickerVc.selectedModels.count > 0) { if (tzImagePickerVc.selectedModels.count > 0) {
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController; TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
[imagePickerVc showAlertWithTitle:@"选择照片时不能选择视频"]; [imagePickerVc showAlertWithTitle:@"选择照片时不能选择视频"];
} else { } else {
...@@ -398,16 +402,17 @@ static CGSize AssetGridThumbnailSize; ...@@ -398,16 +402,17 @@ static CGSize AssetGridThumbnailSize;
} }
- (void)pushPhotoPrevireViewController:(TZPhotoPreviewController *)photoPreviewVc { - (void)pushPhotoPrevireViewController:(TZPhotoPreviewController *)photoPreviewVc {
__weak typeof(self) weakSelf = self;
photoPreviewVc.isSelectOriginalPhoto = _isSelectOriginalPhoto; photoPreviewVc.isSelectOriginalPhoto = _isSelectOriginalPhoto;
photoPreviewVc.backButtonClickBlock = ^(BOOL isSelectOriginalPhoto) { photoPreviewVc.backButtonClickBlock = ^(BOOL isSelectOriginalPhoto) {
_isSelectOriginalPhoto = isSelectOriginalPhoto; weakSelf.isSelectOriginalPhoto = isSelectOriginalPhoto;
[self checkSelectedModels]; [weakSelf checkSelectedModels];
[_collectionView reloadData]; [weakSelf.collectionView reloadData];
[self refreshBottomToolBarStatus]; [weakSelf refreshBottomToolBarStatus];
}; };
photoPreviewVc.okButtonClickBlock = ^(BOOL isSelectOriginalPhoto){ photoPreviewVc.okButtonClickBlock = ^(BOOL isSelectOriginalPhoto){
_isSelectOriginalPhoto = isSelectOriginalPhoto; weakSelf.isSelectOriginalPhoto = isSelectOriginalPhoto;
[self okButtonClick]; [weakSelf okButtonClick];
}; };
[self.navigationController pushViewController:photoPreviewVc animated:YES]; [self.navigationController pushViewController:photoPreviewVc animated:YES];
} }
...@@ -432,7 +437,8 @@ static CGSize AssetGridThumbnailSize; ...@@ -432,7 +437,8 @@ static CGSize AssetGridThumbnailSize;
if (_shouldScrollToBottom && _photoArr.count > 0) { if (_shouldScrollToBottom && _photoArr.count > 0) {
NSInteger item = _photoArr.count - 1; NSInteger item = _photoArr.count - 1;
if ([_model.name isEqualToString:@"相机胶卷"] || [_model.name isEqualToString:@"Camera Roll"] || [_model.name isEqualToString:@"所有照片"] ) { if ([_model.name isEqualToString:@"相机胶卷"] || [_model.name isEqualToString:@"Camera Roll"] || [_model.name isEqualToString:@"所有照片"] ) {
if (_tzImagePickerVc.allowPickingImage) { TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
if (tzImagePickerVc.allowPickingImage) {
item += 1; item += 1;
} }
} }
...@@ -445,7 +451,8 @@ static CGSize AssetGridThumbnailSize; ...@@ -445,7 +451,8 @@ static CGSize AssetGridThumbnailSize;
for (TZAssetModel *model in _photoArr) { for (TZAssetModel *model in _photoArr) {
model.isSelected = NO; model.isSelected = NO;
NSMutableArray *selectedAssets = [NSMutableArray array]; NSMutableArray *selectedAssets = [NSMutableArray array];
for (TZAssetModel *model in _tzImagePickerVc.selectedModels) { TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
for (TZAssetModel *model in tzImagePickerVc.selectedModels) {
[selectedAssets addObject:model.asset]; [selectedAssets addObject:model.asset];
} }
if ([selectedAssets containsObject:model.asset]) { if ([selectedAssets containsObject:model.asset]) {
...@@ -462,26 +469,25 @@ static CGSize AssetGridThumbnailSize; ...@@ -462,26 +469,25 @@ static CGSize AssetGridThumbnailSize;
if ([type isEqualToString:@"public.image"]) { if ([type isEqualToString:@"public.image"]) {
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController; TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
[imagePickerVc showProgressHUD]; [imagePickerVc showProgressHUD];
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); [[TZImageManager manager] savePhotoWithImage:image completion:^{
[self reloadPhotoArray];
}];
} }
} }
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { - (void)reloadPhotoArray {
if (error) { TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
[_tzImagePickerVc hideProgressHUD]; [[TZImageManager manager] getCameraRollAlbum:tzImagePickerVc.allowPickingVideo allowPickingImage:tzImagePickerVc.allowPickingImage completion:^(TZAlbumModel *model) {
[_tzImagePickerVc showAlertWithTitle:error.localizedDescription];
} else {
[[TZImageManager manager] getCameraRollAlbum:_tzImagePickerVc.allowPickingVideo allowPickingImage:_tzImagePickerVc.allowPickingImage completion:^(TZAlbumModel *model) {
_model = model; _model = model;
[[TZImageManager manager] getAssetsFromFetchResult:_model.result allowPickingVideo:_tzImagePickerVc.allowPickingVideo allowPickingImage:_tzImagePickerVc.allowPickingImage completion:^(NSArray<TZAssetModel *> *models) { [[TZImageManager manager] getAssetsFromFetchResult:_model.result allowPickingVideo:tzImagePickerVc.allowPickingVideo allowPickingImage:tzImagePickerVc.allowPickingImage completion:^(NSArray<TZAssetModel *> *models) {
[_tzImagePickerVc hideProgressHUD]; [tzImagePickerVc hideProgressHUD];
TZAssetModel *model = [models lastObject]; TZAssetModel *model = [models lastObject];
[_photoArr addObject:model]; [_photoArr addObject:model];
if (_tzImagePickerVc.selectedModels.count < _tzImagePickerVc.maxImagesCount) { if (tzImagePickerVc.selectedModels.count < tzImagePickerVc.maxImagesCount) {
model.isSelected = YES; model.isSelected = YES;
[_tzImagePickerVc.selectedModels addObject:model]; [tzImagePickerVc.selectedModels addObject:model];
[self refreshBottomToolBarStatus]; [self refreshBottomToolBarStatus];
} }
[_collectionView reloadData]; [_collectionView reloadData];
...@@ -490,7 +496,6 @@ static CGSize AssetGridThumbnailSize; ...@@ -490,7 +496,6 @@ static CGSize AssetGridThumbnailSize;
[self scrollCollectionViewToBottom]; [self scrollCollectionViewToBottom];
}]; }];
}]; }];
}
} }
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
......
...@@ -75,15 +75,17 @@ ...@@ -75,15 +75,17 @@
} }
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == _selectedPhotos.count) { [self pickPhotoButtonClick:nil];} if (indexPath.row == _selectedPhotos.count) {
[self pickPhotoButtonClick:nil];
}
} }
- (void)collectionView:(UICollectionView *)collectionView itemAtIndexPath:(NSIndexPath *)sourceIndexPath didMoveToIndexPath:(NSIndexPath *)destinationIndexPath { - (void)collectionView:(UICollectionView *)collectionView itemAtIndexPath:(NSIndexPath *)sourceIndexPath didMoveToIndexPath:(NSIndexPath *)destinationIndexPath {
if (sourceIndexPath.item >= _selectedPhotos.count || destinationIndexPath.item >= _selectedPhotos.count) return; if (sourceIndexPath.item >= _selectedPhotos.count || destinationIndexPath.item >= _selectedPhotos.count) return;
UIImage *image = _selectedPhotos[sourceIndexPath.item]; UIImage *image = _selectedPhotos[sourceIndexPath.item];
if (image) { if (image) {
[_selectedPhotos removeObjectAtIndex:sourceIndexPath.item]; [_selectedPhotos exchangeObjectAtIndex:sourceIndexPath.item withObjectAtIndex:destinationIndexPath.item];
[_selectedPhotos insertObject:image atIndex:destinationIndexPath.item]; [_selectedAssets exchangeObjectAtIndex:sourceIndexPath.item withObjectAtIndex:destinationIndexPath.item];
[_collectionView reloadData]; [_collectionView reloadData];
} }
} }
...@@ -149,17 +151,16 @@ ...@@ -149,17 +151,16 @@
/// User finish picking video, /// User finish picking video,
/// 用户选择好了视频 /// 用户选择好了视频
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingVideo:(UIImage *)coverImage sourceAssets:(id)asset { - (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingVideo:(UIImage *)coverImage sourceAssets:(id)asset {
[_selectedPhotos addObjectsFromArray:@[coverImage]]; _selectedPhotos = [NSMutableArray arrayWithArray:@[coverImage]];
_selectedAssets = [NSMutableArray arrayWithArray:@[asset]];
_layout.itemCount = _selectedPhotos.count; _layout.itemCount = _selectedPhotos.count;
/*
// open this code to send video / 打开这段代码发送视频 // open this code to send video / 打开这段代码发送视频
[[TZImageManager manager] getVideoOutputPathWithAsset:asset completion:^(NSString *outputPath) { // [[TZImageManager manager] getVideoOutputPathWithAsset:asset completion:^(NSString *outputPath) {
NSLog(@"视频导出到本地完成,沙盒路径为:%@",outputPath); // NSLog(@"视频导出到本地完成,沙盒路径为:%@",outputPath);
// Export completed, send video here, send by outputPath or NSData // Export completed, send video here, send by outputPath or NSData
// 导出完成,在这里写上传代码,通过路径或者通过NSData上传 // 导出完成,在这里写上传代码,通过路径或者通过NSData上传
}]; // }];
*/
[_collectionView reloadData]; [_collectionView reloadData];
_collectionView.contentSize = CGSizeMake(0, ((_selectedPhotos.count + 2) / 3 ) * (_margin + _itemWH)); _collectionView.contentSize = CGSizeMake(0, ((_selectedPhotos.count + 2) / 3 ) * (_margin + _itemWH));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment