標籤:
UIImagePickerController
1.+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType; 檢查指定源是否在裝置上可用。
//檢查照片源是否可用
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]
2.allowsEditing 預設NO
是否允許編輯
允許編輯.
[imagePicker setAllowsEditing:YES];
3. videoMaximumDuration
?設定UIImagePicker的最大視頻期間.預設10分鐘
4. + availableMediaTypesForSourceType: // 指定源可用的媒體種類
//獲得相機模式下支援的媒體類型
NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
5. sourceType
設定UIImagePicker照片源類型,預設有3種。
照片源類型
UIImagePickerControllerSourceTypeCamera 照相機
UIImagePickerControllerSourceTypePhotoLibrary 照片庫(通過同步存放的,使用者不能刪除)
UIImagePickerControllerSourceTypeSavedPhotosAlbum 儲存的照片(通過拍照或者截屏儲存的,使用者可以刪除)
6.UIImagePicker使用步驟:
? 檢查指定源是否可用. isSourceTypeAvailable:方法.? 檢查可用媒體(視頻還是只能是圖片) availableMediaTypesForSourceType:方法.? 設定介面媒體屬性mediaTypes property.? 顯示介面使用presentViewController:animated:completion:方法.iPad中是popover形式.需要確保sourceType有效. ? 相關操作,移除視圖. ???如果想建立一個完全自訂介面的image picker來瀏覽圖片,使用 Assets Library Framework Reference中的類. (AV Foundation Programming Guide 中的 “Media Capture and Access to Camera” )?? ??
7.設定源?
? + availableMediaTypesForSourceType: // 指定源可用的媒體種類? + isSourceTypeAvailable: // 指定源是否在裝置上可用? sourceType ??// 運行相關介面前需要指明源類型.必須有效,否則拋出異常. picker已經顯示的時候改變這個值,picker會相應改變來適應.預設 UIImagePickerControllerSourceTypePhotoLibrary.??
8.設定picker屬性?
? allowsEditing //是否可編輯? delegate ? mediaTypes ??// 指示picker中顯示的媒體類型.設定每種類型之前應用availableMediaTypesForSourceType:檢查一下.如果為空白或者array中類型都不可用,會發生異常.預設 kUTTypeImage, 只能顯示圖片.??
?
9.video選取參數
?? videoQuality //視頻拍攝選取時的編碼品質.只有mediaTypes包含kUTTypeMovie時有效.? videoMaximumDuration //秒,video最大記錄時間,預設10分鐘.只用當mediaTypes包含kUTTypeMovie時有效.
??
10.自訂介面
?? showsCameraControls ??// 指示 picker 是否顯示預設的camera controls.預設是YES,設定成NO隱藏預設的controls來使用自訂的overlay view.(從而可以實現多選而不是選一張picker就dismiss了).只有 UIImagePickerControllerSourceTypeCamera源有效,否則NSInvalidArgumentException異常.?? cameraOverlayView ??//自訂的用於顯示在picker之上的view.只有當源是UIImagePickerControllerSourceTypeCamera時有效.其他時候使用拋出NSInvalidArgumentException異常.?? cameraViewTransform ??//預先動畫.隻影響預先映像,對自訂的overlay view和預設的picker無效.只用當picker的源是UIImagePickerControllerSourceTypeCamera時有效,否則NSInvalidArgumentException異常.??
11.選取媒體
?? – takePicture ??//使用網路攝影機選取一個圖片。自訂overlay可以多選。已經有圖片正在選取是調用無效,必須要等delegate收到 imagePickerController:didFinishPickingMediaWithInfo:訊息後才能再次選取。非UIImagePickerControllerSourceTypeCamera源會導致異常。?? – startVideoCapture ?? – stopVideoCapture ??//結束視頻選取,之後系統調用delegate的 imagePickerController:didFinishPickingMediaWithInfo:方法。
??
12.設定網路攝影機
? cameraDevice //使用的鏡頭(預設後置的)? + isCameraDeviceAvailable: // 攝像裝置是否可用.? + availableCaptureModesForCameraDevice: // 裝置可用的選模數式 ? cameraCaptureMode //相機捕獲模式? cameraFlashMode //閃光燈模式(預設自動)? + isFlashAvailableForCameraDevice: // 是否有閃光能力??
13.UIImagePickerControllerDelegate
使用UIImageWriteToSavedPhotosAlbum儲存映像,
UISaveVideoAtPathToSavedPhotosAlbum儲存視頻. 4.0後使用writeImageToSavedPhotosAlbum:metadata:completionBlock:儲存中繼資料.??
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info??//包含選擇的圖片或者一個視頻的URL,詳見“Editing Information Keys.”??//如果是設定可編輯屬性,那麼picker會預顯示選中的媒體,編輯後的與初始的都會儲存在info中.??
– imagePickerControllerDidCancel:? – imagePickerController:didFinishPickingImage:editingInfo://Deprecated in iOS 3.0
??NSString *const UIImagePickerControllerMediaType;// 媒體類型?
NSString *const UIImagePickerControllerOriginalImage;// 原始未編輯的映像
?NSString *const UIImagePickerControllerEditedImage;// 編輯後的映像
?NSString *const UIImagePickerControllerCropRect;// 源映像可編輯(有效?)地區?
NSString *const UIImagePickerControllerMediaURL;// 視頻的路徑
?NSString *const UIImagePickerControllerReferenceURL;// 原始選擇項的URL
?NSString *const UIImagePickerControllerMediaMetadata;// 只有在使用網路攝影機並且是映像類型的時候有效.包含選擇映像資訊的字典類型?
14. UIImagePickerController小例子
UIImagePickerController的代理需要遵守這兩個協議.<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
#pragma mark 選擇照片
- (void)selectPhoto
{
// 1. 首先判斷照片源是否可用
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
// 0)執行個體化控制器
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
// 1)設定照片源
[picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
// 2) 設定允許修改
[picker setAllowsEditing:YES];
// 3) 設定代理
[picker setDelegate:self];
// 4) 顯示控制器
[self presentViewController:picker animated:YES completion:nil];
} else {
NSLog(@"照片源不可用");
}
}
#pragma mark - imagePicker代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = info[@"UIImagePickerControllerEditedImage"];
[_imageButton setImage:image forState:UIControlStateNormal];
// 關閉照片選取器
[self dismissViewControllerAnimated:YES completion:nil];
// 需要將照片儲存至應用程式沙箱,由於涉及到資料存放區,同時與介面無關
// 可以使用多線程來儲存映像
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 儲存映像
// 1. 取映像路徑
NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *imagePath = [docs[0]stringByAppendingPathComponent:@"abc.png"];
// 2. 轉換成NSData儲存
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:imagePath atomically:YES];
});
}
IOS開發UI基礎UIImagePickerController的屬性