思路
- 為了兼容iOS7(
AssetsLibaray),iOS8+(PhotoKit),統(tǒng)一使用一個單例類XMNPhotoManager來獲取圖片 - 使用
XMNAssetModel和XMNAlbumModel封裝下獲取的result - 自定義
XMNPhotoPickerController繼承UINavigationController來作為選擇圖片的入口
1. XMNPhotoPickerKit
1.1 照片管理Manager
1.1.1 相關(guān)類
1.1.1.1. XMNAlbumModel : 專輯信息
| 屬性 | 屬性說明 | 作用 |
|---|---|---|
| name | album 名稱 | |
| count | 照片數(shù)量 | |
| result | 包含的圖片數(shù)組,PHFetchResult<PHAsset> or ALAssetsGroup<ALAsset> |
| 方法 | 方法說明 | 作用 |
|---|---|---|
| albumWithResult: | Class方法 | 通過獲取的PHFetchResult<PHAsset> or ALAssetsGroup<ALAsset> |
| setName: | 重寫name的setter方法 | 設(shè)置name為中文字符串 |
1.1.1.2. XMNAssetModel : 照片,視頻等信息
| 屬性 | 屬性說明 | 作用 |
|---|---|---|
| asset | 資源類型,PHAsset or ALAsset | |
| selected | 是否被選中 | |
| type | readonly | 圖片,視頻,livePhoto,audio等 |
| timeLength | readonly | 視頻長度 |
| originImage | readOnly | 原圖 |
| thumbnail | readonly | 縮略圖,默認(rèn)大小的縮略圖 |
| previewImage | readonly | 適合當(dāng)前屏幕的預(yù)覽圖 |
| imageOrientation | readonly | 圖片方向 |
1.1.1.3. XMNPhotoManager : 獲取所有專輯,專輯內(nèi)照片視頻等
- iOS6,7 使用
AssetsLibarayiOS8+使用PhotoKit - 使用單例模式,并且iOS8+使用了
PHCachingImageManager在獲取圖片的時候緩存,保證XMNPhotoCollectionController的滑動流暢
| 方法 | 方法說明 | 作用 |
|---|---|---|
| hasAuthorized | classMethods | 判斷是否授權(quán) |
| requestOriginImageWithAsset:WithCompletion: | 方法 | 獲取asset的原圖 |
| requestThumbnailWithAsset:WithCompletion: | 方法 | 獲取asset的對應(yīng)的縮略圖 |
| requestPreviewImageWithAsset:WithCompletion: | 方法 | 獲取asset對應(yīng)的預(yù)覽圖,適應(yīng)當(dāng)前屏幕的尺寸 |
| imageOrientationWithAsset:WithCompletion: | 方法 | 獲取對應(yīng)asset的圖片方向 |
1.2 照片選擇ViewController
1.2.1 XMNPhotoPickerController
- 繼承
UINavigationController - 默認(rèn)rootController是
XMNAlbumListController - 除了
didCancelPickingBlock會自動dismissXMNPhotoPickerController,其他回調(diào)方式均不會自動dismiss,需要手動dismiss
| 屬性 | 屬性說明 | 作用 |
|---|---|---|
| pickingVideoEnable | 是否允許選擇視頻 | |
| autoPushToPhotoCollection | 是否自動push到photoCollectionController界面 | |
| maxCount | 最大選擇數(shù)量 ,默認(rèn)視頻一次只能選擇一個,默認(rèn)選擇9個 | |
| photoPickerDelegate | delegate 回調(diào) 方式 | |
| didFinishPickingPhotosBlock | 確定選擇圖片的block回調(diào)方式 | |
| didFinishPickingVideoBlock | 確定選擇視頻的block回調(diào)方式 | |
| didCancelPickingBlock | readonly | 確定取消選擇的回調(diào)方式 |
| 方法 | 方法說明 | 作用 |
|---|---|---|
- (instancetype)initWithMaxCount:(NSUInteger)maxCount delegate:(id<XMNPhotoPickerControllerDelegate>)delegate NS_DESIGNATED_INITIALIZER; |
初始化方法 | 初始化XMNPhotoPickerController |
- (void)didFinishPickingPhoto:(NSArray<XMNAssetModel *> *)assets; |
public方法 | 提供給viewControllers 回調(diào),會調(diào)用自身delegate以及block 的對應(yīng)回調(diào) |
- (void)didFinishPickingVideo:(XMNAssetModel *)asset; |
public方法 | 提供給viewControllers 喚起對應(yīng)delegate,block 回調(diào) |
- (void)didCancelPickingPhoto |
public方法 | 提供給viewControllers 喚起對應(yīng)delegate,block回調(diào) |
1.2.2 XMNAlbumListController
- 繼承UITableViewController
- 使用tableView 展示album相冊列表
- 點(diǎn)擊后跳轉(zhuǎn)到XMNPhotoCollectionController界面
1.3 XMNPhotoPicker - 模仿QQ選擇照片的Sheet,使用block回調(diào)
- 推薦使用單例
sharePhotoPicker - 支持手勢滑動發(fā)送圖片
- 支持預(yù)覽圖片 -
XMNPhotoPreviewController視頻-XMNVideoPreviewController - 支持使用系統(tǒng)相機(jī)拍照發(fā)送圖片
- iOS8+支持動態(tài)監(jiān)測系統(tǒng)圖片變化
1.4 照片預(yù)覽XMNPhotoPreviewController 繼承UICollectionController
- 繼承UICollectionViewController
- 實(shí)現(xiàn)block 回調(diào)
1.5 視頻預(yù)覽XMNVideoPreviewController
- 繼承UIViewController
- 實(shí)現(xiàn)block回調(diào)