UIImagePickerController
調(diào)用相冊(cè)需要用到UIImagePickerController,這是iOS系統(tǒng)提供的和系統(tǒng)的相冊(cè)和相機(jī)交互的一個(gè)類,可以用來獲取相冊(cè)的照片,也可以調(diào)用系統(tǒng)的相機(jī)拍攝照片或者視頻。該類的繼承結(jié)構(gòu)是:
UIImagePickerController–>UINavigationController–>UIViewController–>UIResponder–>NSObject
調(diào)用相冊(cè):
- 首先需要導(dǎo)入對(duì)應(yīng)的庫和聲明相關(guān)的屬性:
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <MediaPlayer/MediaPlayer.h>
#import <AVKit/AVKit.h>
@interface ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UIImagePickerController *imagePicker;
@end
- 獲取相冊(cè)信息:
//點(diǎn)擊按鈕執(zhí)行調(diào)用手機(jī)相冊(cè)的事件
- (void) selectPhoto {
//檢查當(dāng)前設(shè)備是否支持使用相冊(cè)作為照片的源
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
//創(chuàng)建UIImagePickerController實(shí)例對(duì)象
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
//設(shè)置照片的源為相冊(cè)
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
//設(shè)置允許用戶對(duì)照片進(jìn)行編輯、即用戶可以對(duì)照片進(jìn)行裁剪、旋轉(zhuǎn)等操作
picker.allowsEditing = YES;
//設(shè)置picker的代理
picker.delegate = self;
//退出picker模態(tài)視圖
[self presentViewController:picker animated:YES completion:nil];
} else {
NSLog(@"照片源不可用");
}
}
// UIImagePickerControllerDelegate的協(xié)議方法,用于在用戶選擇媒體(照片或視頻)后進(jìn)行回調(diào),其中info是用戶選擇的媒體的信息的字典,字典中的鍵是枚舉值UIImagePickerControllerInfoKey,它定義了一系列用于訪問 info 字典中特定信息的鍵
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
//從info字典中獲取編輯后的圖片。UIImagePickerControllerEditedImage是一個(gè)鍵,表示用戶在相冊(cè)中選擇照片并進(jìn)行了編輯的情況下獲取的照片,如果用戶沒有編輯,就使用UIImagePickerControllerOriginalImage獲取原始圖片
UIImage *image = info[@"UIImagePickerControllerEditedImage"];
[self.imageButton setImage:image forState:UIControlStateNormal];
[self dismissViewControllerAnimated:YES completion:nil];
//使用異步的方式將圖片保存到沙盒的代碼塊
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//獲取應(yīng)用的沙盒目錄路徑數(shù)組
// NSSearchPathForDirectoriesInDomains: 這是一個(gè) Foundation 框架提供的函數(shù),用于獲取指定域中指定文件夾的路徑。在這里,我們使用它來獲取 "Documents" 目錄的路徑。
// NSDocumentDirectory: 這是一個(gè)枚舉值,表示我們想要獲取的文件夾是應(yīng)用程序沙盒中的 "Documents" 目錄。"Documents" 目錄是應(yīng)用程序可以存儲(chǔ)用戶數(shù)據(jù)的地方。
// NSUserDomainMask: 這是一個(gè)枚舉值,指定了我們要在哪個(gè)域中搜索路徑。NSUserDomainMask 表示搜索用戶的主目錄。
// YES: 這是一個(gè)布爾值,表示是否展開波浪線 ("~") 縮寫。設(shè)置為 YES 表示展開波浪線,得到的路徑將是完整的絕對(duì)路徑。
// NSArray *docs: 這是一個(gè)包含路徑的數(shù)組,其中第一個(gè)元素就是 "Documents" 目錄的路徑。
NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//docs[0]就是"Documents" 目錄的路徑,然后將照片保存為A48538182112B436F433E06CD04E131A.jpg
NSString *imagePath = [docs[0]stringByAppendingPathComponent:@"A48538182112B436F433E06CD04E131A.jpg"];
//將圖片轉(zhuǎn)換為 PNG 格式的二進(jìn)制數(shù)據(jù)
NSData *imageData = UIImagePNGRepresentation(image);
//將圖片的二進(jìn)制數(shù)據(jù)寫入文件,實(shí)現(xiàn)保存文件到沙盒的操作。atomically:YES表示寫入操作要么完全成功,要么完全不成功,確保文件的完整性
[imageData writeToFile:imagePath atomically:YES];
});
}
以下是一些 UIImagePickerControllerInfoKey 中定義的常見鍵:
UIImagePickerControllerMediaType: 表示媒體的類型,是圖片還是視頻。
UIImagePickerControllerOriginalImage: 表示原始圖片。
UIImagePickerControllerEditedImage: 表示用戶編輯后的圖片。
UIImagePickerControllerMediaURL: 表示媒體的 URL,通常用于視頻。文章來源:http://www.zghlxwxcb.cn/news/detail-755944.html
運(yùn)行結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-755944.html
調(diào)用相機(jī)
UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
BOOL isCamera = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]; //判斷相機(jī)可不可用
if (!isCamera) {
NSLog(@"沒有攝像頭");
return;
}
imagePicker.delegate = self; //設(shè)置代理
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; //數(shù)據(jù)來源于相機(jī)
imagePicker.allowsEditing = YES;
NSLog(@"=======確認(rèn)使用相機(jī)========");
}];
- 相機(jī)的類型:
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
UIImagePickerControllerCameraDeviceRear, //后置攝像頭
UIImagePickerControllerCameraDeviceFront //前置攝像頭
}
到了這里,關(guān)于iOS——調(diào)用系統(tǒng)相冊(cè)和相機(jī)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!