//
|
// TZImagePickerController.m
|
// TZImagePickerController
|
//
|
// Created by 谭真 on 15/12/24.
|
// Copyright © 2015年 谭真. All rights reserved.
|
// version 1.7.8 - 2016.12.20
|
|
#import "TZImagePickerController.h"
|
#import "TZPhotoPickerController.h"
|
#import "TZPhotoPreviewController.h"
|
#import "TZAssetModel.h"
|
#import "TZAssetCell.h"
|
#import "UIView+Layout.h"
|
#import "TZImageManager.h"
|
|
@interface TZImagePickerController () {
|
NSTimer *_timer;
|
UILabel *_tipLabel;
|
UIButton *_settingBtn;
|
BOOL _pushPhotoPickerVc;
|
BOOL _didPushPhotoPickerVc;
|
|
UIButton *_progressHUD;
|
UIView *_HUDContainer;
|
UIActivityIndicatorView *_HUDIndicatorView;
|
UILabel *_HUDLabel;
|
|
UIStatusBarStyle _originStatusBarStyle;
|
}
|
/// Default is 4, Use in photos collectionView in TZPhotoPickerController
|
/// 默认4列, TZPhotoPickerController中的照片collectionView
|
@property (nonatomic, assign) NSInteger columnNumber;
|
@end
|
|
@implementation TZImagePickerController
|
|
#pragma clang diagnostic push
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
- (void)viewDidLoad {
|
[super viewDidLoad];
|
self.view.backgroundColor = [UIColor whiteColor];
|
self.navigationBar.barStyle = UIBarStyleBlack;
|
self.navigationBar.translucent = YES;
|
[TZImageManager manager].shouldFixOrientation = NO;
|
|
// Default appearance, you can reset these after this method
|
// 默认的外观,你可以在这个方法后重置
|
self.oKButtonTitleColorNormal = [UIColor colorWithRed:(83/255.0) green:(179/255.0) blue:(17/255.0) alpha:1.0];
|
self.oKButtonTitleColorDisabled = [UIColor colorWithRed:(83/255.0) green:(179/255.0) blue:(17/255.0) alpha:0.5];
|
|
if (iOS7Later) {
|
self.navigationBar.barTintColor = [UIColor colorWithRed:(34/255.0) green:(34/255.0) blue:(34/255.0) alpha:1.0];
|
self.navigationBar.tintColor = [UIColor whiteColor];
|
self.automaticallyAdjustsScrollViewInsets = NO;
|
}
|
}
|
|
- (void)setNaviBgColor:(UIColor *)naviBgColor {
|
_naviBgColor = naviBgColor;
|
self.navigationBar.barTintColor = naviBgColor;
|
}
|
|
- (void)setNaviTitleColor:(UIColor *)naviTitleColor {
|
_naviTitleColor = naviTitleColor;
|
[self configNaviTitleAppearance];
|
}
|
|
- (void)setNaviTitleFont:(UIFont *)naviTitleFont {
|
_naviTitleFont = naviTitleFont;
|
[self configNaviTitleAppearance];
|
}
|
|
- (void)configNaviTitleAppearance {
|
NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
|
textAttrs[NSForegroundColorAttributeName] = self.naviTitleColor;
|
textAttrs[NSFontAttributeName] = self.naviTitleFont;
|
self.navigationBar.titleTextAttributes = textAttrs;
|
}
|
|
- (void)setBarItemTextFont:(UIFont *)barItemTextFont {
|
_barItemTextFont = barItemTextFont;
|
[self configBarButtonItemAppearance];
|
}
|
|
- (void)setBarItemTextColor:(UIColor *)barItemTextColor {
|
_barItemTextColor = barItemTextColor;
|
[self configBarButtonItemAppearance];
|
}
|
|
- (void)configBarButtonItemAppearance {
|
UIBarButtonItem *barItem;
|
if (iOS9Later) {
|
barItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[TZImagePickerController class]]];
|
} else {
|
barItem = [UIBarButtonItem appearanceWhenContainedIn:[TZImagePickerController class], nil];
|
}
|
NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
|
textAttrs[NSForegroundColorAttributeName] = self.barItemTextColor;
|
textAttrs[NSFontAttributeName] = self.barItemTextFont;
|
[barItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
|
}
|
|
- (void)viewWillAppear:(BOOL)animated {
|
[super viewWillAppear:animated];
|
_originStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
|
[UIApplication sharedApplication].statusBarStyle = iOS7Later ? UIStatusBarStyleLightContent : UIStatusBarStyleBlackOpaque;
|
}
|
|
- (void)viewWillDisappear:(BOOL)animated {
|
[super viewWillDisappear:animated];
|
[UIApplication sharedApplication].statusBarStyle = _originStatusBarStyle;
|
[self hideProgressHUD];
|
}
|
|
- (instancetype)initWithMaxImagesCount:(NSInteger)maxImagesCount delegate:(id<TZImagePickerControllerDelegate>)delegate {
|
return [self initWithMaxImagesCount:maxImagesCount columnNumber:4 delegate:delegate pushPhotoPickerVc:YES];
|
}
|
|
- (instancetype)initWithMaxImagesCount:(NSInteger)maxImagesCount columnNumber:(NSInteger)columnNumber delegate:(id<TZImagePickerControllerDelegate>)delegate {
|
return [self initWithMaxImagesCount:maxImagesCount columnNumber:columnNumber delegate:delegate pushPhotoPickerVc:YES];
|
}
|
|
- (instancetype)initWithMaxImagesCount:(NSInteger)maxImagesCount columnNumber:(NSInteger)columnNumber delegate:(id<TZImagePickerControllerDelegate>)delegate pushPhotoPickerVc:(BOOL)pushPhotoPickerVc {
|
_pushPhotoPickerVc = pushPhotoPickerVc;
|
TZAlbumPickerController *albumPickerVc = [[TZAlbumPickerController alloc] init];
|
albumPickerVc.columnNumber = columnNumber;
|
self = [super initWithRootViewController:albumPickerVc];
|
if (self) {
|
self.maxImagesCount = maxImagesCount > 0 ? maxImagesCount : 9; // Default is 9 / 默认最大可选9张图片
|
self.pickerDelegate = delegate;
|
self.selectedModels = [NSMutableArray array];
|
|
// Allow user picking original photo and video, you also can set No after this method
|
// 默认准许用户选择原图和视频, 你也可以在这个方法后置为NO
|
self.allowPickingOriginalPhoto = YES;
|
self.allowPickingVideo = YES;
|
self.allowPickingImage = YES;
|
self.allowTakePicture = YES;
|
self.sortAscendingByModificationDate = YES;
|
self.autoDismiss = YES;
|
self.columnNumber = columnNumber;
|
[self configDefaultSetting];
|
|
if (![[TZImageManager manager] authorizationStatusAuthorized]) {
|
_tipLabel = [[UILabel alloc] init];
|
_tipLabel.frame = CGRectMake(8, 120, self.view.tz_width - 16, 60);
|
_tipLabel.textAlignment = NSTextAlignmentCenter;
|
_tipLabel.numberOfLines = 0;
|
_tipLabel.font = [UIFont systemFontOfSize:16];
|
_tipLabel.textColor = [UIColor blackColor];
|
NSString *appName = [[NSBundle mainBundle].infoDictionary valueForKey:@"CFBundleDisplayName"];
|
if (!appName) appName = [[NSBundle mainBundle].infoDictionary valueForKey:@"CFBundleName"];
|
NSString *tipText = [NSString stringWithFormat:[NSBundle tz_localizedStringForKey:@"Allow %@ to access your album in \"Settings -> Privacy -> Photos\""],appName];
|
_tipLabel.text = tipText;
|
[self.view addSubview:_tipLabel];
|
|
_settingBtn = [UIButton buttonWithType:UIButtonTypeSystem];
|
[_settingBtn setTitle:self.settingBtnTitleStr forState:UIControlStateNormal];
|
_settingBtn.frame = CGRectMake(0, 180, self.view.tz_width, 44);
|
_settingBtn.titleLabel.font = [UIFont systemFontOfSize:18];
|
[_settingBtn addTarget:self action:@selector(settingBtnClick) forControlEvents:UIControlEventTouchUpInside];
|
[self.view addSubview:_settingBtn];
|
|
_timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(observeAuthrizationStatusChange) userInfo:nil repeats:YES];
|
} else {
|
[self pushPhotoPickerVc];
|
}
|
}
|
return self;
|
}
|
|
/// This init method just for previewing photos / 用这个初始化方法以预览图片
|
- (instancetype)initWithSelectedAssets:(NSMutableArray *)selectedAssets selectedPhotos:(NSMutableArray *)selectedPhotos index:(NSInteger)index{
|
TZPhotoPreviewController *previewVc = [[TZPhotoPreviewController alloc] init];
|
self = [super initWithRootViewController:previewVc];
|
if (self) {
|
self.selectedAssets = [NSMutableArray arrayWithArray:selectedAssets];
|
self.allowPickingOriginalPhoto = self.allowPickingOriginalPhoto;
|
[self configDefaultSetting];
|
|
previewVc.photos = [NSMutableArray arrayWithArray:selectedPhotos];
|
previewVc.currentIndex = index;
|
__weak typeof(self) weakSelf = self;
|
[previewVc setDoneButtonClickBlockWithPreviewType:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
|
[weakSelf dismissViewControllerAnimated:YES completion:^{
|
if (weakSelf.didFinishPickingPhotosHandle) {
|
weakSelf.didFinishPickingPhotosHandle(photos,assets,isSelectOriginalPhoto);
|
}
|
}];
|
}];
|
}
|
return self;
|
}
|
|
/// This init method for crop photo / 用这个初始化方法以裁剪图片
|
- (instancetype)initCropTypeWithAsset:(id)asset photo:(UIImage *)photo completion:(void (^)(UIImage *cropImage,id asset))completion {
|
TZPhotoPreviewController *previewVc = [[TZPhotoPreviewController alloc] init];
|
self = [super initWithRootViewController:previewVc];
|
if (self) {
|
self.maxImagesCount = 1;
|
self.allowCrop = YES;
|
self.selectedAssets = [NSMutableArray arrayWithArray:@[asset]];
|
[self configDefaultSetting];
|
|
previewVc.photos = [NSMutableArray arrayWithArray:@[photo]];
|
previewVc.isCropImage = YES;
|
previewVc.currentIndex = 0;
|
__weak typeof(self) weakSelf = self;
|
[previewVc setDoneButtonClickBlockCropMode:^(UIImage *cropImage, id asset) {
|
[weakSelf dismissViewControllerAnimated:YES completion:^{
|
if (completion) {
|
completion(cropImage,asset);
|
}
|
}];
|
}];
|
}
|
return self;
|
}
|
|
- (void)configDefaultSetting {
|
self.timeout = 15;
|
self.photoWidth = 828.0;
|
self.photoPreviewMaxWidth = 600;
|
self.naviTitleColor = [UIColor whiteColor];
|
self.naviTitleFont = [UIFont systemFontOfSize:17];
|
self.barItemTextFont = [UIFont systemFontOfSize:15];
|
self.barItemTextColor = [UIColor whiteColor];
|
self.allowPreview = YES;
|
|
[self configDefaultImageName];
|
[self configDefaultBtnTitle];
|
}
|
|
- (void)configDefaultImageName {
|
self.takePictureImageName = @"takePicture.png";
|
self.photoSelImageName = @"photo_sel_photoPickerVc.png";
|
self.photoDefImageName = @"photo_def_photoPickerVc.png";
|
self.photoNumberIconImageName = @"photo_number_icon.png";
|
self.photoPreviewOriginDefImageName = @"preview_original_def.png";
|
self.photoOriginDefImageName = @"photo_original_def.png";
|
self.photoOriginSelImageName = @"photo_original_sel.png";
|
}
|
|
- (void)configDefaultBtnTitle {
|
self.doneBtnTitleStr = [NSBundle tz_localizedStringForKey:@"Done"];
|
self.cancelBtnTitleStr = [NSBundle tz_localizedStringForKey:@"Cancel"];
|
self.previewBtnTitleStr = [NSBundle tz_localizedStringForKey:@"Preview"];
|
self.fullImageBtnTitleStr = [NSBundle tz_localizedStringForKey:@"Full image"];
|
self.settingBtnTitleStr = [NSBundle tz_localizedStringForKey:@"Setting"];
|
self.processHintStr = [NSBundle tz_localizedStringForKey:@"Processing..."];
|
}
|
|
- (void)observeAuthrizationStatusChange {
|
if ([[TZImageManager manager] authorizationStatusAuthorized]) {
|
[_tipLabel removeFromSuperview];
|
[_settingBtn removeFromSuperview];
|
[_timer invalidate];
|
_timer = nil;
|
[self pushPhotoPickerVc];
|
}
|
}
|
|
- (void)pushPhotoPickerVc {
|
_didPushPhotoPickerVc = NO;
|
// 1.6.8 判断是否需要push到照片选择页,如果_pushPhotoPickerVc为NO,则不push
|
if (!_didPushPhotoPickerVc && _pushPhotoPickerVc) {
|
TZPhotoPickerController *photoPickerVc = [[TZPhotoPickerController alloc] init];
|
photoPickerVc.isFirstAppear = YES;
|
photoPickerVc.columnNumber = self.columnNumber;
|
[[TZImageManager manager] getCameraRollAlbum:self.allowPickingVideo allowPickingImage:self.allowPickingImage completion:^(TZAlbumModel *model) {
|
photoPickerVc.model = model;
|
[self pushViewController:photoPickerVc animated:YES];
|
_didPushPhotoPickerVc = YES;
|
}];
|
}
|
}
|
|
- (void)showAlertWithTitle:(NSString *)title {
|
if (iOS8Later) {
|
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleAlert];
|
[alertController addAction:[UIAlertAction actionWithTitle:[NSBundle tz_localizedStringForKey:@"OK"] style:UIAlertActionStyleDefault handler:nil]];
|
[self presentViewController:alertController animated:YES completion:nil];
|
} else {
|
[[[UIAlertView alloc] initWithTitle:title message:nil delegate:nil cancelButtonTitle:[NSBundle tz_localizedStringForKey:@"OK"] otherButtonTitles:nil, nil] show];
|
}
|
}
|
|
- (void)showProgressHUD {
|
if (!_progressHUD) {
|
_progressHUD = [UIButton buttonWithType:UIButtonTypeCustom];
|
[_progressHUD setBackgroundColor:[UIColor clearColor]];
|
|
_HUDContainer = [[UIView alloc] init];
|
_HUDContainer.frame = CGRectMake((self.view.tz_width - 120) / 2, (self.view.tz_height - 90) / 2, 120, 90);
|
_HUDContainer.layer.cornerRadius = 8;
|
_HUDContainer.clipsToBounds = YES;
|
_HUDContainer.backgroundColor = [UIColor darkGrayColor];
|
_HUDContainer.alpha = 0.7;
|
|
_HUDIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
|
_HUDIndicatorView.frame = CGRectMake(45, 15, 30, 30);
|
|
_HUDLabel = [[UILabel alloc] init];
|
_HUDLabel.frame = CGRectMake(0,40, 120, 50);
|
_HUDLabel.textAlignment = NSTextAlignmentCenter;
|
_HUDLabel.text = self.processHintStr;
|
_HUDLabel.font = [UIFont systemFontOfSize:15];
|
_HUDLabel.textColor = [UIColor whiteColor];
|
|
[_HUDContainer addSubview:_HUDLabel];
|
[_HUDContainer addSubview:_HUDIndicatorView];
|
[_progressHUD addSubview:_HUDContainer];
|
}
|
[_HUDIndicatorView startAnimating];
|
[[UIApplication sharedApplication].keyWindow addSubview:_progressHUD];
|
|
// if over time, dismiss HUD automatic
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.timeout * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
[self hideProgressHUD];
|
});
|
}
|
|
- (void)hideProgressHUD {
|
if (_progressHUD) {
|
[_HUDIndicatorView stopAnimating];
|
[_progressHUD removeFromSuperview];
|
}
|
}
|
|
- (void)setMaxImagesCount:(NSInteger)maxImagesCount {
|
_maxImagesCount = maxImagesCount;
|
if (maxImagesCount > 1) {
|
_showSelectBtn = YES;
|
_allowCrop = NO;
|
}
|
}
|
|
- (void)setShowSelectBtn:(BOOL)showSelectBtn {
|
_showSelectBtn = showSelectBtn;
|
// 多选模式下,不允许让showSelectBtn为NO
|
if (!showSelectBtn && _maxImagesCount > 1) {
|
_showSelectBtn = YES;
|
}
|
}
|
|
- (void)setAllowCrop:(BOOL)allowCrop {
|
_allowCrop = _maxImagesCount > 1 ? NO : allowCrop;
|
if (allowCrop) { // 允许裁剪的时候,不能选原图和GIF
|
self.allowPickingOriginalPhoto = NO;
|
self.allowPickingGif = NO;
|
}
|
}
|
|
- (void)setCircleCropRadius:(NSInteger)circleCropRadius {
|
_circleCropRadius = circleCropRadius;
|
_cropRect = CGRectMake(self.view.tz_width / 2 - circleCropRadius, self.view.tz_height / 2 - _circleCropRadius, _circleCropRadius * 2, _circleCropRadius * 2);
|
}
|
|
- (CGRect)cropRect {
|
if (_cropRect.size.width > 0) {
|
return _cropRect;
|
}
|
CGFloat cropViewWH = self.view.tz_width;
|
return CGRectMake(0, (self.view.tz_height - self.view.tz_width) / 2, cropViewWH, cropViewWH);
|
}
|
|
- (void)setTimeout:(NSInteger)timeout {
|
_timeout = timeout;
|
if (timeout < 5) {
|
_timeout = 5;
|
} else if (_timeout > 60) {
|
_timeout = 60;
|
}
|
}
|
|
- (void)setColumnNumber:(NSInteger)columnNumber {
|
_columnNumber = columnNumber;
|
if (columnNumber <= 2) {
|
_columnNumber = 2;
|
} else if (columnNumber >= 6) {
|
_columnNumber = 6;
|
}
|
|
TZAlbumPickerController *albumPickerVc = [self.childViewControllers firstObject];
|
albumPickerVc.columnNumber = _columnNumber;
|
[TZImageManager manager].columnNumber = _columnNumber;
|
}
|
|
- (void)setMinPhotoWidthSelectable:(NSInteger)minPhotoWidthSelectable {
|
_minPhotoWidthSelectable = minPhotoWidthSelectable;
|
[TZImageManager manager].minPhotoWidthSelectable = minPhotoWidthSelectable;
|
}
|
|
- (void)setMinPhotoHeightSelectable:(NSInteger)minPhotoHeightSelectable {
|
_minPhotoHeightSelectable = minPhotoHeightSelectable;
|
[TZImageManager manager].minPhotoHeightSelectable = minPhotoHeightSelectable;
|
}
|
|
- (void)setHideWhenCanNotSelect:(BOOL)hideWhenCanNotSelect {
|
_hideWhenCanNotSelect = hideWhenCanNotSelect;
|
[TZImageManager manager].hideWhenCanNotSelect = hideWhenCanNotSelect;
|
}
|
|
- (void)setPhotoPreviewMaxWidth:(CGFloat)photoPreviewMaxWidth {
|
_photoPreviewMaxWidth = photoPreviewMaxWidth;
|
if (photoPreviewMaxWidth > 800) {
|
_photoPreviewMaxWidth = 800;
|
} else if (photoPreviewMaxWidth < 500) {
|
_photoPreviewMaxWidth = 500;
|
}
|
[TZImageManager manager].photoPreviewMaxWidth = _photoPreviewMaxWidth;
|
}
|
|
- (void)setSelectedAssets:(NSMutableArray *)selectedAssets {
|
_selectedAssets = selectedAssets;
|
_selectedModels = [NSMutableArray array];
|
for (id asset in selectedAssets) {
|
TZAssetModel *model = [TZAssetModel modelWithAsset:asset type:TZAssetModelMediaTypePhoto];
|
model.isSelected = YES;
|
[_selectedModels addObject:model];
|
}
|
}
|
|
- (void)setAllowPickingImage:(BOOL)allowPickingImage {
|
_allowPickingImage = allowPickingImage;
|
NSString *allowPickingImageStr = _allowPickingImage ? @"1" : @"0";
|
[[NSUserDefaults standardUserDefaults] setObject:allowPickingImageStr forKey:@"tz_allowPickingImage"];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
- (void)setAllowPickingVideo:(BOOL)allowPickingVideo {
|
_allowPickingVideo = allowPickingVideo;
|
NSString *allowPickingVideoStr = _allowPickingVideo ? @"1" : @"0";
|
[[NSUserDefaults standardUserDefaults] setObject:allowPickingVideoStr forKey:@"tz_allowPickingVideo"];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
- (void)setSortAscendingByModificationDate:(BOOL)sortAscendingByModificationDate {
|
_sortAscendingByModificationDate = sortAscendingByModificationDate;
|
[TZImageManager manager].sortAscendingByModificationDate = sortAscendingByModificationDate;
|
}
|
|
- (void)settingBtnClick {
|
if (iOS8Later) {
|
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
|
} else {
|
NSURL *privacyUrl = [NSURL URLWithString:@"prefs:root=Privacy&path=PHOTOS"];
|
if ([[UIApplication sharedApplication] canOpenURL:privacyUrl]) {
|
[[UIApplication sharedApplication] openURL:privacyUrl];
|
} else {
|
NSString *message = [NSBundle tz_localizedStringForKey:@"Can not jump to the privacy settings page, please go to the settings page by self, thank you"];
|
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:[NSBundle tz_localizedStringForKey:@"Sorry"] message:message delegate:nil cancelButtonTitle:[NSBundle tz_localizedStringForKey:@"OK"] otherButtonTitles: nil];
|
[alert show];
|
}
|
}
|
}
|
|
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
|
if (iOS7Later) viewController.automaticallyAdjustsScrollViewInsets = NO;
|
if (_timer) { [_timer invalidate]; _timer = nil;}
|
[super pushViewController:viewController animated:animated];
|
}
|
|
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
|
return UIInterfaceOrientationMaskPortrait;
|
}
|
|
#pragma mark - Public
|
|
- (void)cancelButtonClick {
|
if (self.autoDismiss) {
|
[self dismissViewControllerAnimated:YES completion:^{
|
[self callDelegateMethod];
|
}];
|
} else {
|
[self callDelegateMethod];
|
}
|
}
|
|
- (void)callDelegateMethod {
|
// 兼容旧版本
|
if ([self.pickerDelegate respondsToSelector:@selector(imagePickerControllerDidCancel:)]) {
|
[self.pickerDelegate imagePickerControllerDidCancel:self];
|
}
|
if ([self.pickerDelegate respondsToSelector:@selector(tz_imagePickerControllerDidCancel:)]) {
|
[self.pickerDelegate tz_imagePickerControllerDidCancel:self];
|
}
|
if (self.imagePickerControllerDidCancelHandle) {
|
self.imagePickerControllerDidCancelHandle();
|
}
|
}
|
|
@end
|
|
|
@interface TZAlbumPickerController ()<UITableViewDataSource,UITableViewDelegate> {
|
UITableView *_tableView;
|
}
|
@property (nonatomic, strong) NSMutableArray *albumArr;
|
@end
|
|
@implementation TZAlbumPickerController
|
|
- (void)viewDidLoad {
|
[super viewDidLoad];
|
self.view.backgroundColor = [UIColor whiteColor];
|
self.navigationItem.title = [NSBundle tz_localizedStringForKey:@"Photos"];
|
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
|
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:imagePickerVc.cancelBtnTitleStr style:UIBarButtonItemStylePlain target:imagePickerVc action:@selector(cancelButtonClick)];
|
[self configTableView];
|
// 1.6.10 采用微信的方式,只在相册列表页定义backBarButtonItem为返回,其余的顺系统的做法
|
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:[NSBundle tz_localizedStringForKey:@"Back"] style:UIBarButtonItemStylePlain target:nil action:nil];
|
}
|
|
- (void)viewWillAppear:(BOOL)animated {
|
[super viewWillAppear:animated];
|
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
|
[imagePickerVc hideProgressHUD];
|
if (_albumArr) {
|
for (TZAlbumModel *albumModel in _albumArr) {
|
albumModel.selectedModels = imagePickerVc.selectedModels;
|
}
|
[_tableView reloadData];
|
} else {
|
[self configTableView];
|
}
|
if (imagePickerVc.allowTakePicture) {
|
self.navigationItem.title = [NSBundle tz_localizedStringForKey:@"Photos"];
|
} else if (imagePickerVc.allowPickingVideo) {
|
self.navigationItem.title = [NSBundle tz_localizedStringForKey:@"Videos"];
|
}
|
}
|
|
- (void)configTableView {
|
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
|
[[TZImageManager manager] getAllAlbums:imagePickerVc.allowPickingVideo allowPickingImage:imagePickerVc.allowPickingImage completion:^(NSArray<TZAlbumModel *> *models) {
|
_albumArr = [NSMutableArray arrayWithArray:models];
|
for (TZAlbumModel *albumModel in _albumArr) {
|
albumModel.selectedModels = imagePickerVc.selectedModels;
|
}
|
if (!_tableView) {
|
|
CGFloat top = 0;
|
CGFloat tableViewHeight = 0;
|
if (self.navigationController.navigationBar.isTranslucent) {
|
top = 44;
|
if (iOS7Later) top += 20;
|
tableViewHeight = self.view.tz_height - top;
|
} else {
|
CGFloat navigationHeight = 44;
|
if (iOS7Later) navigationHeight += 20;
|
tableViewHeight = self.view.tz_height - navigationHeight;
|
}
|
|
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, top, self.view.tz_width, tableViewHeight) style:UITableViewStylePlain];
|
_tableView.rowHeight = 70;
|
_tableView.tableFooterView = [[UIView alloc] init];
|
_tableView.dataSource = self;
|
_tableView.delegate = self;
|
[_tableView registerClass:[TZAlbumCell class] forCellReuseIdentifier:@"TZAlbumCell"];
|
[self.view addSubview:_tableView];
|
} else {
|
[_tableView reloadData];
|
}
|
}];
|
}
|
|
#pragma mark - UITableViewDataSource && Delegate
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
return _albumArr.count;
|
}
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
TZAlbumCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TZAlbumCell"];
|
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
|
cell.selectedCountButton.backgroundColor = imagePickerVc.oKButtonTitleColorNormal;
|
cell.model = _albumArr[indexPath.row];
|
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
|
return cell;
|
}
|
|
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
|
TZPhotoPickerController *photoPickerVc = [[TZPhotoPickerController alloc] init];
|
photoPickerVc.columnNumber = self.columnNumber;
|
TZAlbumModel *model = _albumArr[indexPath.row];
|
photoPickerVc.model = model;
|
__weak typeof(self) weakSelf = self;
|
[photoPickerVc setBackButtonClickHandle:^(TZAlbumModel *model) {
|
[weakSelf.albumArr replaceObjectAtIndex:indexPath.row withObject:model];
|
}];
|
[self.navigationController pushViewController:photoPickerVc animated:YES];
|
[tableView deselectRowAtIndexPath:indexPath animated:NO];
|
}
|
#pragma clang diagnostic pop
|
|
@end
|
|
|
@implementation UIImage (MyBundle)
|
|
+ (UIImage *)imageNamedFromMyBundle:(NSString *)name {
|
UIImage *image = [UIImage imageNamed:[@"TZImagePickerController.bundle" stringByAppendingPathComponent:name]];
|
if (image) {
|
return image;
|
} else {
|
image = [UIImage imageNamed:[@"Frameworks/TZImagePickerController.framework/TZImagePickerController.bundle" stringByAppendingPathComponent:name]];
|
if (!image) {
|
image = [UIImage imageNamed:name];
|
}
|
return image;
|
}
|
}
|
|
@end
|