前言
UIKit框架提供了一個圖像選擇器UIImagePickerController,我們不僅可以從相冊中選擇圖像資源,還可以從照相機中直接獲取拍攝的圖像。
UIImagePickerController的創(chuàng)建
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
UIImagePickerController繼承于UINavigationController,所以我們可以在當前通過以下方法調(diào)出:
[self presentViewController:imagePicker animated:YES completion:nil];
sourceType屬性
sourceType屬性是設置UIImagePickerController的圖片選擇源的,我們通過 sourceType來設置將要從相冊、相機還是相機膠卷選擇圖片。
@property(nonatomic) UIImagePickerControllerSourceType sourceType; // default value is UIImagePickerControllerSourceTypePhotoLibrary.
typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
// 相冊
UIImagePickerControllerSourceTypePhotoLibrary,
// 相機
UIImagePickerControllerSourceTypeCamera,
// 相機膠卷
UIImagePickerControllerSourceTypeSavedPhotosAlbum
} __TVOS_PROHIBITED;
相機膠卷是相冊下的一個分類,該文件夾下的圖片均是相機拍攝產(chǎn)生的圖片
其他屬性
- // 是否可以編輯
@property(nonatomic) BOOL allowsEditing NS_AVAILABLE_IOS(3_1); // replacement for -allowsImageEditing; default value is NO.
- // 是否可以編輯圖像
@property(nonatomic) BOOL allowsImageEditing NS_DEPRECATED_IOS(2_0, 3_1);
- // 圖像類型
@property(nonatomic,copy) NSArray<NSString *> *mediaTypes;
// default value is an array containing kUTTypeImage.
- // 視頻類型圖像最大時長
// video properties apply only if mediaTypes includes kUTTypeMovie
@property(nonatomic) NSTimeInterval videoMaximumDuration NS_AVAILABLE_IOS(3_1);
// default value is 10 minutes.
- // 圖像質(zhì)量類型
@property(nonatomic) UIImagePickerControllerQualityType videoQuality NS_AVAILABLE_IOS(3_1);
// default value is UIImagePickerControllerQualityTypeMedium. If the cameraDevice does not support the videoQuality, it will use the default value.
typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) {
UIImagePickerControllerQualityTypeHigh = 0, // highest quality
UIImagePickerControllerQualityTypeMedium = 1, // medium quality, suitable for transmission via Wi-Fi
UIImagePickerControllerQualityTypeLow = 2, // lowest quality, suitable for tranmission via cellular network
UIImagePickerControllerQualityType640x480 NS_ENUM_AVAILABLE_IOS(4_0) = 3, // VGA quality
UIImagePickerControllerQualityTypeIFrame1280x720 NS_ENUM_AVAILABLE_IOS(5_0) = 4,
UIImagePickerControllerQualityTypeIFrame960x540 NS_ENUM_AVAILABLE_IOS(5_0) = 5,
} __TVOS_PROHIBITED;
- // 是否顯示相機操作控件
// camera additions available only if sourceType is UIImagePickerControllerSourceTypeCamera.
@property(nonatomic) BOOL showsCameraControls NS_AVAILABLE_IOS(3_1);
// set to NO to hide all standard camera UI. default is YES
- // 預覽視圖
@property(nullable, nonatomic,strong) __kindof UIView *cameraOverlayView NS_AVAILABLE_IOS(3_1);
// set a view to overlay the preview view.
- // 預覽視圖的轉換
@property(nonatomic) CGAffineTransform cameraViewTransform NS_AVAILABLE_IOS(3_1);
// set the transform of the preview view.
關于相機設備的屬性
// 相機捕獲類型
@property(nonatomic) UIImagePickerControllerCameraCaptureMode cameraCaptureMode NS_AVAILABLE_IOS(4_0); // default is UIImagePickerControllerCameraCaptureModePhoto
// 相機設備
@property(nonatomic) UIImagePickerControllerCameraDevice cameraDevice NS_AVAILABLE_IOS(4_0); // default is UIImagePickerControllerCameraDeviceRear
// 相機閃光類型
@property(nonatomic) UIImagePickerControllerCameraFlashMode cameraFlashMode NS_AVAILABLE_IOS(4_0); // default is UIImagePickerControllerCameraFlashModeAuto.
// cameraFlashMode controls the still-image flash when cameraCaptureMode is Photo. cameraFlashMode controls the video torch when cameraCaptureMode is Video.
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) {
UIImagePickerControllerCameraCaptureModePhoto,
UIImagePickerControllerCameraCaptureModeVideo
} __TVOS_PROHIBITED;
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
UIImagePickerControllerCameraDeviceRear,
UIImagePickerControllerCameraDeviceFront
} __TVOS_PROHIBITED;
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) {
UIImagePickerControllerCameraFlashModeOff = -1,
UIImagePickerControllerCameraFlashModeAuto = 0,
UIImagePickerControllerCameraFlashModeOn = 1
} __TVOS_PROHIBITED;
方法
- 類方法
/*是否是可用的讀取源*/
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;
// returns YES if source is available (i.e. camera present)
/*可用的讀取源都有哪些*/
+ (nullable NSArray<NSString *> *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType;
// returns array of available media types (i.e. kUTTypeImage)
/*相機是否可用*/
+ (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice NS_AVAILABLE_IOS(4_0);
// returns YES if camera device is available
/*相機閃光是否可用*/
+ (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice NS_AVAILABLE_IOS(4_0);
// returns YES if camera device supports flash and torch.
/*可用的捕獲類型都有哪些*/
+ (nullable NSArray<NSNumber *> *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice NS_AVAILABLE_IOS(4_0);
// returns array of NSNumbers (UIImagePickerControllerCameraCaptureMode)
- 實例方法
/*開始視頻捕獲*/
-(BOOL)startVideoCapture NS_AVAILABLE_IOS(4_0);
/*停止視頻捕獲*/
-(void)stopVideoCapture NS_AVAILABLE_IOS(4_0);
代理函數(shù)
@property(nullable,nonatomic,weak) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;
@optional
// The picker does not dismiss itself; the client dismisses it in these callbacks.
// The delegate will receive one or the other, but not both, depending whether the user
// confirms or cancels.
/*選擇圖片完成回調(diào)*/
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary<NSString *,id> *)editingInfo NS_DEPRECATED_IOS(2_0, 3_0);
/*選擇圖像完成回調(diào)*/
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;
/*點擊‘取消’按鈕回調(diào)*/
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
回調(diào)函數(shù)中的infoDictionary的key(我們可以通過這些key在回調(diào)函數(shù)的info字典中獲得我們想要的內(nèi)容):
// info dictionary keys
/*圖像類型【NSString】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaType __TVOS_PROHIBITED; // an NSString (UTI, i.e. kUTTypeImage)
/*原始圖片【UIImage】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerOriginalImage __TVOS_PROHIBITED; // a UIImage
/*編輯后的圖片【UIImage】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerEditedImage __TVOS_PROHIBITED; // a UIImage
/*剪裁大小【NSValue(CGRect)】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerCropRect __TVOS_PROHIBITED; // an NSValue (CGRect)
/*圖像url【NSURL】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaURL __TVOS_PROHIBITED; // an NSURL
/*相關url【NSURL】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL NS_AVAILABLE_IOS(4_1) __TVOS_PROHIBITED; // an NSURL that references an asset in the AssetsLibrary framework
/*媒體元數(shù)據(jù)【NSDictionary】*/
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaMetadata NS_AVAILABLE_IOS(4_1) __TVOS_PROHIBITED; // an NSDictionary containing metadata from a captured photo
/*PHLivePhoto類型的數(shù)據(jù),【PHLivePhoto】是iOS9以后添加的一個新的圖片類型,它不僅僅是一張靜態(tài)的圖片,它會抓取拍攝時的聲音和更多幀的圖像*/
UIKIT_EXTERN NSString *const UIImagePickerControllerLivePhoto NS_AVAILABLE_IOS(9_1) __TVOS_PROHIBITED; // a PHLivePhoto
應用
LMJImageChooseControl是我自己自定義的一個圖片選擇控件,這個控件實現(xiàn)了相冊、相機選擇獲取圖片的功能。
托管地址:https://github.com/MajorLMJ/LMJImageChooseControl
歡迎下載體驗,同時理解UIImagePickerController的使用。
有關相冊、相機的訪問權限
關于相冊、相機的權限請閱讀:iOS訪問相冊、相機權限
版權聲明:出自MajorLMJ技術博客的原創(chuàng)作品 ,轉載時必須注明出處及相應鏈接!
