iOS中UIImagePickerController圖片選取器的用法小結(jié)
UIImagePickerController用于管理可自定義的,系統(tǒng)支持的用于獲取設(shè)備上圖片和視頻的用戶界面。同時(shí)可以用于在App中選擇存儲(chǔ)的圖片和視頻。一個(gè)UIImagePickerController管理用戶交互并且將這些交互結(jié)果傳遞給一個(gè)代理對(duì)象。該類(lèi)不能被繼承和修改,除了自定義cameraOverlayView外。
先簡(jiǎn)單講解下UIImagePickerController的一些屬性,再上代碼。
一、常用屬性
(1)sourceType 控制器展示的選擇界面的類(lèi)型,
包含三個(gè)枚舉值
enum {
UIImagePickerControllerSourceTypePhotoLibrary, //在圖片庫(kù)中選取圖片或者視頻
UIImagePickerControllerSourceTypeCamera, //用于拍攝照片或視頻
UIImagePickerControllerSourceTypeSavedPhotosAlbum //在相冊(cè)中選取圖片或視頻
};
typedef NSUInteger UIImagePickerControllerSourceType;
(2)mediaTypes
默認(rèn)值是kUTTypeImage,意味著用戶只能選擇靜態(tài)圖片或者拍攝靜態(tài)圖片(相對(duì)于視頻)
當(dāng)mediaTypes設(shè)置為kUTTypeImage,kUTTypeMovie(設(shè)備支持的話)時(shí),操作圖片的同時(shí),可以選擇操作視頻。
使用KUTTypeImage,KUTTypeMovie時(shí),需導(dǎo)入#import <MobileCoreServices/MobileCoreServices.h>
(3)allowEditing
用戶是否可以修改圖片或視頻,默認(rèn)是NO
(3)cameraOverlayView
在默認(rèn)圖片選擇界面的最前面顯示。
二、基本用法
(1)使用isSourceTypeAvailable:來(lái)判斷當(dāng)前設(shè)備是否支持該SourceType
(2)若支持,使用availableMediaTypesForSourceType來(lái)檢驗(yàn)當(dāng)前SourceType下支持的mediaTypes
(3)若需要調(diào)整mediaTypes(默認(rèn)是kUTTypeImage),調(diào)整
(4)展示界面,使用modal方式彈出。
(5)當(dāng)用戶操作完成(cancel或者選著了某張圖片和某個(gè)視頻),代理會(huì)觸發(fā)方法,然后關(guān)閉界面并進(jìn)行相關(guān)的處理。
三、其他兩種sourceType詳解
其他兩種sourceType使用方式較為單一,下面詳細(xì)講解下當(dāng)SourceType為UIImagePickerControllerSourceTypeCamera時(shí)的情況。
常見(jiàn)屬性:
(1)videoQuality:用于設(shè)置視頻的質(zhì)量,默認(rèn)值為UIImagePickerControllerQualityTypeMedium.
用于拍攝視頻和選著視頻,如果選擇已經(jīng)存在的視頻,且該視頻的質(zhì)量高于設(shè)置的videoQuality,則視頻會(huì)被轉(zhuǎn)為低質(zhì)量的
(如果存在的視頻地獄videoQuality呢)
(2)videoMaximumDuration 最大的視頻時(shí)間,默認(rèn)為10分鐘
(3)cameraViewTransform
這幾個(gè)屬性只在camera下可用
(4)cameraDevice
enum {
UIImagePickerControllerCameraDeviceRear, //后置攝像頭
UIImagePickerControllerCameraDeviceFront //前置攝像頭
};
typedef NSUInteger UIImagePickerControllerCameraDevice;
(5)cameraCaptureMode
開(kāi)啟照相界面的時(shí)候選擇的模式
enum {
UIImagePickerControllerCameraCaptureModePhoto, //默認(rèn)使用拍照模式
UIImagePickerControllerCameraCaptureModeVideo //默認(rèn)使用攝像模式
};
typedef NSUInteger UIImagePickerControllerCameraCaptureMode;
(6)cameraFlashMode
閃光燈
enum {
UIImagePickerControllerCameraFlashModeOff = -1,
UIImagePickerControllerCameraFlashModeAuto = 0,
UIImagePickerControllerCameraFlashModeOn = 1
};
typedef NSInteger UIImagePickerControllerCameraFlashMode;
四、兩個(gè)主要的委托方法實(shí)例
// 用戶選中圖片之后的回調(diào)
- (void)imagePickerController: (UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info
{
if (picker == picker_camera_)
{
//如果是 來(lái)自照相機(jī)的image,那么先保存
UIImage* original_image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
// info dictionary keys
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaType; // an NSString (UTI, i.e. kUTTypeImage)
UIKIT_EXTERN NSString *const UIImagePickerControllerOriginalImage; // a UIImage
UIKIT_EXTERN NSString *const UIImagePickerControllerEditedImage; // a UIImage
UIKIT_EXTERN NSString *const UIImagePickerControllerCropRect; // an NSValue (CGRect)
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaURL; // an NSURL
UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL NS_AVAILABLE_IOS(4_1); // an NSURL that references an asset in the AssetsLibrary framework
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaMetadata NS_AVAILABLE_IOS(4_1); // an NSDictionary containing metadata from a captured photo
// 獲得編輯過(guò)的圖片
UIImage* image = [info objectForKey: @"UIImagePickerControllerEditedImage"];
// 把圖片轉(zhuǎn)成NSData類(lèi)型的數(shù)據(jù)來(lái)保存文件(存入到沙盒中)
NSData *imageData;
// 判斷圖片是不是png格式的文件
if (UIImagePNGRepresentation(image)) {
// 返回為png圖像。
imageData = UIImagePNGRepresentation(image);
}else {
// 返回為JPEG圖像
imageData = UIImageJPEGRepresentation(image, 1.0);
}
// 路徑拼接,寫(xiě)入-----
NSString * imageSavePath = [[[HMTMySqliteDataHandle shareInstance]saveImagesPath] stringByAppendingPathComponent:@"自定義.自定義"];
[imageData writeToFile:imageSavePath atomically:YES];
// 關(guān)閉相冊(cè)界面
[self dismissModalViewControllerAnimated:YES];
[picker release];
}
// 用戶選擇取消
- (void) imagePickerControllerDidCancel: (UIImagePickerController *)picker
{
// 關(guān)閉相冊(cè)界面
[self dismissModalViewControllerAnimated:YES];
[picker release];
}
相關(guān)文章
IOS 避免self循環(huán)引用的方法的實(shí)例詳解
這篇文章主要介紹了IOS 避免self循環(huán)引用的方法的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09
iOS實(shí)現(xiàn)相冊(cè)多選圖片上傳功能
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)相冊(cè)多選圖片上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Flutter之PageView頁(yè)面緩存與KeepAlive
這篇文章主要為大家介紹了Flutter之PageView頁(yè)面緩存與KeepAlive示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
iOS開(kāi)發(fā)之TableView實(shí)現(xiàn)完整的分割線詳解
在iOS開(kāi)發(fā)中, tableView是我們最常用的UI控件之一。所以這篇文章主要給大家詳細(xì)介紹了關(guān)于iOS中的TableView分割線,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
Objective-C中使用NSString類(lèi)操作字符串的方法小結(jié)
這篇文章主要介紹了Objective-C中使用NSString類(lèi)操作字符串的方法小結(jié),文中講到了字符串的分割和拼接等一些常見(jiàn)的用法,需要的朋友可以參考下2016-01-01
iOS開(kāi)發(fā)中實(shí)現(xiàn)郵件和短信發(fā)送的簡(jiǎn)單示例
這篇文章主要介紹了iOS開(kāi)發(fā)中實(shí)現(xiàn)郵件和短信發(fā)送的簡(jiǎn)單示例,編程語(yǔ)言依然是傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-09-09
IOS使用progssview仿滴滴打車(chē)圓形計(jì)時(shí)
本文給大家分享的是IOS中實(shí)現(xiàn)仿滴滴打車(chē)的原型計(jì)時(shí)效果,非常的實(shí)用,有需要的小伙伴可以參考下。2015-07-07
objective-c實(shí)現(xiàn)點(diǎn)到直線的距離及與垂足的交點(diǎn)
這篇文章主要給大家介紹了利用objective-c實(shí)現(xiàn)點(diǎn)到直線的距離及與垂足的交點(diǎn)的相關(guān)資料,文中給出了詳細(xì)的實(shí)現(xiàn)思路和實(shí)現(xiàn)代碼,對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04

