UIImagePickerController從攝影、圖庫、相冊獲得圖片
IOS 獲得圖片有三種辦法:
1. 直接挪用攝像頭攝影
2. 從相冊當選擇
3. 從圖庫當選擇
UIImagePickerController 是體系供給的用來獲得圖片和視頻的接口;
用UIImagePickerController 類來獲得圖片視頻,年夜體分為以下幾個步調:
1. 初始化UIImagePickerController 類;
2. 設置UIImagePickerController 實例的數據起源類型(上面說明);
3. 設置設置署理;
4. 假如須要做圖片修正的話設置allowsEditing =yes。
數據起源類型一共有三種:
enum {
UIImagePickerControllerSourceTypePhotoLibrary ,//來自圖庫
UIImagePickerControllerSourceTypeCamera ,//來自相機
UIImagePickerControllerSourceTypeSavedPhotosAlbum //來自相冊
};
在用這些起源的時刻最好檢測以下裝備能否支撐;
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
NSLog(@"支撐相機");
}
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
NSLog(@"支撐圖庫");
}
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
{
NSLog(@"支撐相片庫");
}
挪用攝像頭來獲得資本
- (void)viewDidLoad {
[super viewDidLoad];
picker = [[UIImagePickerController alloc]init];
picker.view.backgroundColor = [UIColor orangeColor];
UIImagePickerControllerSourceType sourcheType = UIImagePickerControllerSourceTypeCamera;
picker.sourceType = sourcheType;
picker.delegate = self;
picker.allowsEditing = YES;
}
下面只是實例了UIImagePickerController及其屬性 在須要獲得圖片的時刻須要彈出窗口挪用
[self presentViewController:picker animated:YES completion:nil];
我們還須要署理來獲得我們選中的圖片
UIImagePickerControllerDelegate
署理中一共三個辦法 個中一個3.0 曾經放棄了,只剩下兩個我們須要用的
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info;
當用戶拔取完成後挪用;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
當用戶撤消拔取時挪用;
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info;
拔取的信息都在info中,info 是一個字典。
字典中的鍵:
獲得比來的一張圖片
比來的需求須要我模擬微信聊天提醒最新的一張圖片這個功效。
先講講思緒。
思緒很簡略,點擊“+”號的時刻獲得相冊列表,獲得最新保留的一張圖片。依據圖片保留時光,與以後時光戳停止盤算,取得距離時光。從而斷定能否是需求的時光距離。(時光距離自界說)
盤算公式:以後時光 - 圖片保留時光 <= 時光距離
那末依據這個思緒就開端寫一個分類。
它是關於ALAssetsLibrary的獲得功效,那末就依據他寫一個分類。
然則在IOS9後這個庫過時了,不外照樣將他封裝一份,到時刻新建一個對象類停止適配就好了。
//ALAssetsLibrary+WJ.h
#import <AssetsLibrary/AssetsLibrary.h>
@interface ALAssetsLibrary (WJ)
/**
* 獲得最新一張圖片
*
* @param block 回調
*/
- (void)latestAsset:(void(^_Nullable)(ALAsset * _Nullable asset,NSError *_Nullable error)) block;
@end
//ALAssetsLibrary+WJ.m
#import "ALAssetsLibrary+WJ.h"
@implementation ALAssetsLibrary (WJ)
- (void)latestAsset:(void (^)(ALAsset * _Nullable, NSError *_Nullable))block {
[self enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsWithOptions:NSEnumerationReverse/*遍歷方法*/ usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
if (block) {
block(result,nil);
}
*stop = YES;
}
}];
*stop = YES;
}
} failureBlock:^(NSError *error) {
if (error) {
if (block) {
block(nil,error);
}
}
}];
}
@end
在IOS8 PhotoKit曾經存在了。所以今後寫iOS8以上的運用可以直接應用。
PhotoKit簡略適用封裝。詳細具體機能請看參考供給的鏈接。
//PHAsset+WJ.h
#import <Photos/Photos.h>
@interface PHAsset (WJ)
/**
* 獲得最新一張圖片
*/
+ (PHAsset *)latestAsset;
@end
//PHAsset+WJ.m
#import "PHAsset+WJ.h"
@implementation PHAsset (WJ)
+ (PHAsset *)latestAsset {
// 獲得一切資本的聚集,並按資本的創立時光排序
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult *assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];
return [assetsFetchResults firstObject];
}
@end
依據需求本文章不供給其他功效寫法(ps:最重要自己也才剛應用>.<)。
圖片保留時光 都可以在對應的asset(PHAsset,AlAsset)外面獲得到。
【iOS App中挪用相冊中圖片及獲得比來的一張圖片的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!