一個模仿微博networkcamera的照片選擇器
github地址:https://github.com/LoveZYForever/HXWeiboPhotoPicker
仿微博照片選擇器 支持 iOS8 以上
前言
Demo 使用networkcamera的是PhotoKit框架來獲取系統(tǒng)相冊以及照片/視頻
關(guān)于PhotoKit框架說明可以看看此文章
http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html
安裝方式
Cocoapods:pod 'HXWeiboPhotoPicker' '~> 2.0.4'搜索不到庫或最新版請執(zhí)行pod repo update
手動導入:將項目中的“HXWeiboPhotoPicker”文件夾拖入項目中
網(wǎng)絡(luò)圖片加載使用的是SDWebImage v4.0.0
只使用照片選擇功能 導入頭文件 "HXPhotoviewController.h"
選完照片/視頻后自動布局功能 導入頭文件 "HXPhotoView.h"
主要功能:
1、查看/選擇 GIF圖片
2、查看/選擇 LivePhoto
3、支持 3DTouch 預覽
4、照片和視頻可設(shè)置是否支持同時選擇
5、自定義相機拍照/錄制視頻
6、自定義轉(zhuǎn)場動畫(完全模仿微博效果)
7、選完之后圖片九宮格排列(View自動更新高度、通過代理返回)
8、圖片長按拖動更變順序
9、圖片設(shè)置最大上限networkcamera,加號按鈕自動隱藏
10、支持瀏覽網(wǎng)絡(luò)圖片
11、支持裁剪圖片
效果圖如下:
HXPhotoManager 照片管理類相關(guān)屬性介紹
HXPhotoManagerSelectedTypePhoto // 只選擇圖片
HXPhotoManagerSelectedTypeVideo // 只選擇視頻
HXPhotoManagerSelectedTypePhotoAndVideo // 圖片和視頻一起
HXPhotoManagerCameraTypeHalfScreen // 半屏相機
HXPhotoManagerCameraTypefullScreen // 全屏相機
HXPhotoManagerCameraTypeSystem // 系統(tǒng)相機
/**
* 管理UI的類
*/
HXPhotoUIManager *UIManager;
/**
* 拍攝的 照片/視頻 是否保存到系統(tǒng)相冊 默認NO 此功能需要配合 監(jiān)聽系統(tǒng)相冊 和 緩存相冊 功能 (請不要關(guān)閉)
*/
BOOL saveSystemAblum;
/**
* 視頻能選擇的最大秒數(shù) - 默認 5分鐘/300秒
*/
NSTimeInterval videoMaxDuration;
/**
* 是否緩存相冊, manager會監(jiān)聽系統(tǒng)相冊變化(需要此功能時請不要關(guān)閉監(jiān)聽系統(tǒng)相冊功能) 默認YES
*/
BOOL cacheAlbum;
/**
* 是否監(jiān)聽系統(tǒng)相冊 默認 YES
*/
BOOL monitorSystemAlbum;
/**
是否為單選模式 默認 NO
*/
BOOL singleSelected;
/**
單選模式下是否需要裁剪 默認YES
*/
BOOL singleSelecteClip;
/**
是否開啟3DTouch預覽功能 默認NO
*/
BOOL open3DTouchPreview;
/**
相機界面類型 // 默認 半屏
*/
HXPhotoManagerCameraType cameraType;
/**
刪除網(wǎng)絡(luò)圖片時是否顯示Alert // 默認不顯示
*/
BOOL showDeleteNetworkPhotoAlert;
/**
網(wǎng)絡(luò)圖片地址數(shù)組
*/
NSMutableArray *networkPhotoUrls;
/**
是否把相機功能放在外面 默認 NO 使用 HXPhotoView 時有用
*/
BOOL outerCamera;
/**
是否打開相機功能
*/
BOOL openCamera;
/**
是否開啟查看GIF圖片功能 - 默認開啟
*/
BOOL lookGifPhoto;
/**
是否開啟查看LivePhoto功能呢 - 默認NO
*/
BOOL lookLivePhoto;
/**
是否一開始就進入相機界面
*/
BOOL goCamera;
/**
最大選擇數(shù) 等于 圖片最大數(shù) + 視頻最大數(shù) 默認10 - 必填
*/
NSInteger maxNum;
/**
圖片最大選擇數(shù) 默認9 - 必填
*/
NSInteger photoMaxNum;
/**
視頻最大選擇數(shù) // 默認1 - 必填
*/
NSInteger videoMaxNum;
/**
圖片和視頻是否能夠同時選擇 默認支持
*/
BOOL selectTogether;
/**
相冊列表每行多少個照片 默認4個 iphone 4s / 5 默認3個
*/
NSInteger rowCount;
HXPhotoUIManager類相關(guān)屬性
/** HXPhotoView添加按鈕圖片 */
NSString *photoViewAddImageName;
/** 網(wǎng)絡(luò)圖片占位圖 */
NSString *placeholderImageName;
/*-------------------導航欄相關(guān)屬性------------------*/
/** 導航欄背景顏色 */
UIColor *navBackgroundColor;
/** 導航欄背景圖片 */
NSString *navBackgroundImageName;
/** 導航欄左邊按鈕文字顏色 */
UIColor *navLeftBtntitleColor;
/** 導航欄 標題/相冊名 文字顏色 */
UIColor *navTitleColor;
/** 導航欄標題箭頭圖標 */
NSString *navTitleImageName;
/** 導航欄右邊按鈕普通狀態(tài)背景顏色 */
UIColor *navRightBtnNormalBgColor;
/** 導航欄右邊按鈕普通狀態(tài)文字顏色 */
UIColor *navRightBtnNormalTitleColor;
/** 導航欄右邊按鈕禁用狀態(tài)背景顏色 */
UIColor *navRightBtnDisabledBgColor;
/** 導航欄右邊按鈕禁用狀態(tài)文字顏色 */
UIColor *navRightBtnDisabledTitleColor;
/** 導航欄右邊按鈕禁用狀態(tài)下的 layer.borderColor 邊框線顏色 */
UIColor *navRightBtnBorderColor;
/*-------------------相冊列表視圖------------------*/
/** 相冊列表有選擇內(nèi)容的提醒圖標 */
NSString *albumViewSelectImageName;
/** 相冊名稱文字顏色 */
UIColor *albumNameTitleColor;
/** 照片數(shù)量文字顏色 */
UIColor *photosNumberTitleColor;
/** 相冊列表視圖背景顏色 */
UIColor *albumViewBgColor;
/** 相冊列表cell選中顏色 */
UIColor *albumViewCellSelectedColor;
/*-------------------Cell------------------*/
/** cell相機照片圖片 */
NSString *cellCameraPhotoImageName;
/** cell相機視頻圖片 */
NSString *cellCameraVideoImageName;
/** 選擇按鈕普通狀態(tài)圖片 */
NSString *cellSelectBtnNormalimageName;
/** 選擇按鈕選中狀態(tài)圖片 */
NSString *cellSelectBtnSelectedImageName;
/** gif標示圖標 */
NSString *cellGitIconImageName;
/*-------------------底部預覽、原圖按鈕視圖------------------*/
/** 是否開啟毛玻璃效果開啟了自動屏蔽背景顏色 */
BOOL blurEffect;
/** 底部視圖背景顏色 */
UIColor *bottomViewBgColor;
/** 預覽按鈕普通狀態(tài)文字顏色 */
UIColor *previewBtnNormalTitleColor;
/** 預覽按鈕禁用狀態(tài)文字顏色 */
UIColor *previewBtnDisabledTitleColor;
/** 預覽按鈕普通狀態(tài)背景圖片 */
NSString *previewBtnNormalBgImageName;
/** 預覽按鈕禁用狀態(tài)背景圖片 */
NSString *previewBtnDisabledBgImageName;
/** 原圖按鈕普通狀態(tài)文字顏色 */
UIColor *originalBtnNormalTitleColor;
/** 原圖按鈕禁用狀態(tài)文字顏色 */
UIColor *originalBtnDisabledTitleColor;
/** 原圖按鈕邊框線顏色 */
UIColor *originalBtnBorderColor;
/** 原圖按鈕背景顏色 */
UIColor *originalBtnBgColor;
/** 原圖按鈕普通狀態(tài)圖片 */
NSString *originalBtnNormalimageName;
/** 原圖按鈕選中狀態(tài)圖片 */
NSString *originalBtnSelectedImageName;
/*-------------------半屏相機界面------------------*/
/** 返回按鈕X普通狀態(tài)圖片 */
NSString *cameraCloseNormalImageName;
/** 返回按鈕X高亮狀態(tài)圖片 */
NSString *cameraCloseHighlightedImageName;
/** 閃光燈自動模式圖片 */
NSString *flashAutoImageName;
/** 閃光燈打開模型圖片 */
NSString *flashOnImageName;
/** 閃光燈關(guān)閉模式圖片 */
NSString *flashOffImageName;
/** 反轉(zhuǎn)相機普通狀態(tài)圖片 */
NSString *cameraReverseNormalImageName;
/** 反轉(zhuǎn)相機高亮狀態(tài)圖片 */
NSString *cameraReverseHighlightedImageName;
/** 中心圓點下照片and視頻普通狀態(tài)文字顏色 */
UIColor *cameraPhotoVideoNormalTitleColor;
/** 中心圓點下照片and視頻選中狀態(tài)文字顏色 */
UIColor *cameraPhotoVideoSelectedTitleColor;
/** 拍照按鈕普通狀態(tài)圖片 */
NSString *takePicturesBtnNormalImageName;
/** 拍照按鈕高亮狀態(tài)圖片 */
NSString *takePicturesBtnHighlightedImageName;
/** 錄制按鈕普通狀態(tài)圖片 */
NSString *recordedBtnNormalImageName;
/** 錄制按鈕高亮狀態(tài)圖片 */
NSString *recordedBtnHighlightedImageName;
/** 刪除拍攝的照片/視頻圖片 */
NSString *cameraDeleteBtnImageName;
/** 確定拍攝的照片/視頻普通狀態(tài)圖片 */
NSString *cameraNextBtnNormalImageName;
/** 確定拍攝的照片/視頻高亮狀態(tài)圖片 */
NSString *cameraNextBtnHighlightedImageName;
/** 中心圓點圖片 */
NSString *cameraCenterDotImageName;
/** 相機聚焦圖片 */
NSString *cameraFocusImageName;
/** 全屏相機界面下一步按鈕文字顏色 */
UIColor *fullScreenCameraNextBtnTitleColor;
/** 全屏相機界面下一步按鈕背景顏色 */
UIColor *fullScreenCameraNextBtnBgColor;
HXPhotoResultModel相關(guān)屬性介紹
HXPhotoResultModelMediaTypePhoto // 照片
HXPhotoResultModelMediaTypeVideo // 視頻
/** 資源類型 */
HXPhotoResultModelMediaType type;
/** 原圖URL */
NSURL *fullSizeImageURL;
/** 原尺寸image 如果資源為視頻時此字段為視頻封面圖片 */
UIImage *displaySizeImage;
/** 原圖方向 */
int fullSizeImageOrientation;
/** 視頻Asset */
AVAsset *avAsset;
/** 視頻URL */
NSURL *videoURL;
/** 創(chuàng)建日期 */
NSDate *creationDate;
/** 位置信息 */
CLLocation *location;
Demo1
// 懶加載 照片管理類
- (HXPhotoManager *)manager {
if (!_manager) {
_manager = [[HXPhotoManager alloc] initWithType:HXPhotoManagerSelectedTypePhotoAndVideo];
}
return _manager;
}
// 照片選擇控制器
HXPhotoViewController *vc = [[HXPhotoViewController alloc] init];
vc.delegate = self;
vc.manager = self.manager;
[self presentViewController:[[UINavigationController alloc] initWithRootViewController:vc] animated:YES completion:nil];
// 通過 HXPhotoViewControllerDelegate 代理返回選擇的圖片以及視頻
- (void)photoViewControllerDidNext:(NSArray *)allList Photos:(NSArray *)photos Videos:(NSArray *)videos Original:(BOOL)original
// 點擊取消
- (void)photoViewControllerDidCancel
Demo2
// 懶加載 照片管理類
- (HXPhotoManager *)manager {
if (!_manager) {
_manager = [[HXPhotoManager alloc] initWithType:HXPhotoManagerSelectedTypePhotoAndVideo];
}
return _manager;
}
self.navigationController.navigationBar.translucent = NO;
self.automaticallyAdjustsScrollViewInsets = YES;
HXPhotoView *photoView = [[HXPhotoView alloc] initWithFrame:CGRectMake((414 - 375) / 2, 100, 375, 400) WithManager:self.manager];
photoView.delegate = self;
photoView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:photoView];
// 代理返回 選擇、移動順序、刪除之后的圖片以及視頻
- (void)photoView:(HXPhotoView *)photoView changeComplete:(NSArray<HXPhotoModel *> *)allList photos:(NSArray<HXPhotoModel *> *)photos videos:(NSArray<HXPhotoModel *> *)videos original:(BOOL)isOriginal;
// 當view更新高度時調(diào)用
- (void)photoView:(HXPhotoView *)photoView updateFrame:(CGRect)frame;
// 刪除網(wǎng)絡(luò)圖片的地址
- (void)photoView:(HXPhotoView *)photoView deleteNetworkPhoto:(NSString *)networkPhotoUrl;
// 網(wǎng)絡(luò)圖片全部下載完成時調(diào)用
- (void)photoViewAllNetworkingPhotoDownloadComplete:(HXPhotoView *)photoView;
關(guān)于HXPhotoTools獲取資源信息 具體代碼還是請下載Demo
// 將HXPhotoModel模型數(shù)組轉(zhuǎn)化成HXPhotoResultModel模型數(shù)組 - 已按選擇順序排序
// !!!! 必須是全部類型的那個數(shù)組 就是 allList 這個數(shù)組 !!!!
[HXPhotoTools getSelectedListResultModel:allList complete:^(NSArray<HXPhotoResultModel *> *alls, NSArray<HXPhotoResultModel *> *photos, NSArray<HXPhotoResultModel *> *videos) {
NSSLog(@"全部類型:%@照片:%@視頻:%@",alls,photos,videos);
}];
HXPhotoTools提供一個方法可以根據(jù)傳入的模型數(shù)組轉(zhuǎn)換成圖片(UIImage)數(shù)組
type是個枚舉
HXPhotoToolsFetchHDImageType = 0, // 高清
HXPhotoToolsFetchOriginalImageTpe, // 原圖
[HXPhotoTools getImageForSelectedPhoto:photos type:HXPhotoToolsFetchHDImageType completion:^(NSArray<UIImage *> *images) {
NSSLog(@"%@",images);
for (UIImage *image in images) {
if (image.images.count > 0) {
// 到這里了說明這個image 是個gif圖
}
}
}];
作者:楓葉丶
鏈接:http://www.jianshu.com/p/435d4af3c453
來源:簡書
iOS開發(fā)整理發(fā)布,轉(zhuǎn)載請聯(lián)系作者授權(quán)