1 1.+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType; 檢查指定源是否在設備上可用。
2 //檢查照片源是否可用
3 [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]2.allowsEditing 默認NO
4 是否允許編輯
5 允許編輯.
6 [imagePicker setAllowsEditing:YES];
7 3. videoMaximumDuration
8 ?設置UIImagePicker的最大視頻持續時間.默認10分鐘
9 4. + availableMediaTypesForSourceType: // 指定源可用的媒體種類
10 //獲得相機模式下支持的媒體類型
11 NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
12 5. sourceType
13 設置UIImagePicker照片源類型,默認有3種。
14 照片源類型
15
16 UIImagePickerControllerSourceTypeCamera 照相機
17 UIImagePickerControllerSourceTypePhotoLibrary 照片庫(通過同步存放的,用戶不能刪除)
18 UIImagePickerControllerSourceTypeSavedPhotosAlbum 保存的照片(通過拍照或者截屏保存的,用戶可以刪除)
19
20 6.UIImagePicker使用步驟:
21 ? 檢查指定源是否可用.
22 isSourceTypeAvailable:方法.?
23 檢查可用媒體(視頻還是只能是圖片) availableMediaTypesForSourceType:方法.?
24 設置界面媒體屬性
25 mediaTypes property.?
26 顯示界面使用
27 presentViewController:animated:completion:方法.
28 iPad中是popover形式.需要確保sourceType有效. ?
29 相關操作,移除視圖. ???如果想創建一個完全自定義界面的image picker來瀏覽圖片,使用
30 Assets Library Framework Reference中的類. (AV Foundation Programming Guide 中的 “Media Capture and Access to Camera” )?? ??
31 7.設置源?
32 ? + availableMediaTypesForSourceType: // 指定源可用的媒體種類? + isSourceTypeAvailable: // 指定源是否在設備上可用? sourceType ??// 運行相關接口前需要指明源類型.必須有效,否則拋出異常. picker已經顯示的時候改變這個值,picker會相應改變來適應.默認 UIImagePickerControllerSourceTypePhotoLibrary.??
33 8.設置picker屬性?
34 ? allowsEditing //是否可編輯?
35 delegate ? mediaTypes ??// 指示picker中顯示的媒體類型.設置每種類型之前應用availableMediaTypesForSourceType:檢查一下.如果為空或者array中類型都不可用,會發生異常.默認 kUTTypeImage, 只能顯示圖片.?? ?
36 9.video選取參數
37 ?? videoQuality //視頻拍攝選取時的編碼質量.只有mediaTypes包含kUTTypeMovie時有效.?
38 videoMaximumDuration //秒,video最大記錄時間,默認10分鐘.只用當mediaTypes包含kUTTypeMovie時有效. ??
39 10.自定義界面
40 ?? showsCameraControls ??// 指示 picker 是否顯示默認的camera controls.默認是YES,設置成NO隱藏默認的controls來使用自定義的overlay view.(從而可以實現多選而不是選一張picker就dismiss了).只有 UIImagePickerControllerSourceTypeCamera源有效,否則NSInvalidArgumentException異常.??
41 cameraOverlayView ??//自定義的用于顯示在picker之上的view.只有當源是UIImagePickerControllerSourceTypeCamera時有效.其他時候使用拋出NSInvalidArgumentException異常.??
42 cameraViewTransform ??//預先動畫.只影響預先圖像,對自定義的overlay view和默認的picker無效.只用當picker的源是UIImagePickerControllerSourceTypeCamera時有效,否則NSInvalidArgumentException異常.??
43 11.選取媒體
44 ?? – takePicture ??//使用攝像頭選取一個圖片。自定義overlay可以多選。已經有圖片正在選取是調用無效,必須要等delegate收到 imagePickerController:didFinishPickingMediaWithInfo:消息后才能再次選取。非UIImagePickerControllerSourceTypeCamera源會導致異常。??
45 – startVideoCapture ??
46 – stopVideoCapture ??//結束視頻選取,之后系統調用delegate的 imagePickerController:didFinishPickingMediaWithInfo:方法。??
47 12.設置攝像頭
48 ? cameraDevice //使用的鏡頭(默認后置的)?
49 + isCameraDeviceAvailable: // 攝像設備是否可用.?
50 + availableCaptureModesForCameraDevice: // 設備可用的選取模式 ? cameraCaptureMode //相機捕獲模式?
51 cameraFlashMode //閃光燈模式(默認自動)?
52 + isFlashAvailableForCameraDevice: // 是否有閃光能力??
53 13.UIImagePickerControllerDelegate
54 使用UIImageWriteToSavedPhotosAlbum保存圖像, UISaveVideoAtPathToSavedPhotosAlbum保存視頻. 4.0后使用writeImageToSavedPhotosAlbum:metadata:completionBlock:保存元數據.??
55 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info??
56 //包含選擇的圖片或者一個視頻的URL,詳見“Editing Information Keys.”??
57 //如果是設置可編輯屬性,那么picker會預顯示選中的媒體,編輯后的與初始的都會保存在info中.??
58 – imagePickerControllerDidCancel:?
59 -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;// 只有在使用攝像頭并且是圖像類型的時候有效.包含選擇圖像信息的字典類型?
60 14. UIImagePickerController小例子
61 UIImagePickerController的代理需要遵守這兩個協議.<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
62
63 #pragma mark 選擇照片
64 - (void)selectPhoto
65 {
66 // 1. 首先判斷照片源是否可用
67 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
68
69 // 0)實例化控制器
70 UIImagePickerController *picker = [[UIImagePickerController alloc]init];
71 // 1)設置照片源
72 [picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
73
74 // 2) 設置允許修改
75 [picker setAllowsEditing:YES];
76 // 3) 設置代理
77 [picker setDelegate:self];
78 // 4) 顯示控制器
79 [self presentViewController:picker animated:YES completion:nil];
80
81 } else {
82 NSLog(@"照片源不可用");
83 }
84
85 }
86
87 #pragma mark - imagePicker代理方法
88 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
89 {
90 UIImage *image = info[@"UIImagePickerControllerEditedImage"];
91 [_imageButton setImage:image forState:UIControlStateNormal];
92
93 // 關閉照片選擇器
94 [self dismissViewControllerAnimated:YES completion:nil];
95
96 // 需要將照片保存至應用程序沙箱,由于涉及到數據存儲,同時與界面無關
97 // 可以使用多線程來保存圖像
98 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
99
100 // 保存圖像
101 // 1. 取圖像路徑
102 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
103 NSString *imagePath = [docs[0]stringByAppendingPathComponent:@"abc.png"];
104
105 // 2. 轉換成NSData保存
106 NSData *imageData = UIImagePNGRepresentation(image);
107 [imageData writeToFile:imagePath atomically:YES];
108 });
109 }