//檢查照片源是否可用
是否允許編輯
允許編輯.
[imagePicker setAllowsEditing:YES];
設(shè)置UIImagePicker的最大視頻持續(xù)時間.默認10分鐘
//獲得相機模式下支持的媒體類型
NSArray* availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
設(shè)置UIImagePicker照片源類型,默認有3種。
照片源類型
UIImagePickerControllerSourceTypeCamera 照相機
UIImagePickerControllerSourceTypePhotoLibrary 照片庫(通過同步存放的,用戶不能刪除)
UIImagePickerControllerSourceTypeSavedPhotosAlbum 保存的照片(通過拍照或者截屏保存的,用戶可以刪除)
檢查指定源是否可用. isSourceTypeAvailable:方法.
檢查可用媒體(視頻還是只能是圖片) availableMediaTypesForSourceType:方法.
設(shè)置界面媒體屬性mediaTypes PRoperty.
顯示界面使用presentViewController:animated:completion:方法.ipad中是popover形式.需要確保sourceType有效.
相關(guān)操作,移除視圖.
如果想創(chuàng)建一個完全自定義界面的image picker來瀏覽圖片,使用 Assets Library Framework Reference中的類. (AV Foundation Programming Guide 中的 “Media Capture and access to Camera” )
+ availableMediaTypesForSourceType: // 指定源可用的媒體種類
+ isSourceTypeAvailable: // 指定源是否在設(shè)備上可用
sourceType
// 運行相關(guān)接口前需要指明源類型.必須有效,否則拋出異常. picker已經(jīng)顯示的時候改變這個值,picker會相應(yīng)改變來適應(yīng).默認 UIImagePickerControllerSourceTypePhotoLibrary.
allowsEditing //是否可編輯
delegate
mediaTypes
// 指示picker中顯示的媒體類型.設(shè)置每種類型之前應(yīng)用availableMediaTypesForSourceType:檢查一下.如果為空或者array中類型都不可用,會發(fā)生異常.默認 kUTTypeImage, 只能顯示圖片.
videoQuality //視頻拍攝選取時的編碼質(zhì)量.只有mediaTypes包含kUTTypeMovie時有效.
videoMaximumDuration //秒,video最大記錄時間,默認10分鐘.只用當(dāng)mediaTypes包含kUTTypeMovie時有效.
showsCameraControls
// 指示 picker 是否顯示默認的camera controls.默認是YES,設(shè)置成NO隱藏默認的controls來使用自定義的overlay view.(從而可以實現(xiàn)多選而不是選一張picker就dismiss了).只有 UIImagePickerControllerSourceTypeCamera源有效,否則NSInvalidArgumentException異常.
cameraOverlayView
//自定義的用于顯示在picker之上的view.只有當(dāng)源是UIImagePickerControllerSourceTypeCamera時有效.其他時候使用拋出NSInvalidArgumentException異常.
cameraViewTransform
//預(yù)先動畫.只影響預(yù)先圖像,對自定義的overlay view和默認的picker無效.只用當(dāng)picker的源是UIImagePickerControllerSourceTypeCamera時有效,否則NSInvalidArgumentException異常.
– takePicture
//使用攝像頭選取一個圖片。自定義overlay可以多選。已經(jīng)有圖片正在選取是調(diào)用無效,必須要等delegate收到 imagePickerController:didFinishPickingMediaWithInfo:消息后才能再次選取。非UIImagePickerControllerSourceTypeCamera源會導(dǎo)致異常。
– startVideoCapture
– stopVideoCapture
//結(jié)束視頻選取,之后系統(tǒng)調(diào)用delegate的 imagePickerController:didFinishPickingMediaWithInfo:方法。
cameraDevice //使用的鏡頭(默認后置的)
+ isCameraDeviceAvailable: // 攝像設(shè)備是否可用.
+ availableCaptureModesForCameraDevice: // 設(shè)備可用的選取模式
cameraCaptureMode //相機捕獲模式
cameraFlashMode //閃光燈模式(默認自動)
+ isFlashAvailableForCameraDevice: // 是否有閃光能力
使用UIImageWriteToSavedPhotosAlbum保存圖像, UISaveVideoAtPathToSavedPhotosAlbum保存視頻. 4.0后使用writeImageToSavedPhotosAlbum:metadata:completionBlock:保存元數(shù)據(jù).
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
//包含選擇的圖片或者一個視頻的URL,詳見“Editing Information Keys.”
//如果是設(shè)置可編輯屬性,那么picker會預(yù)顯示選中的媒體,編輯后的與初始的都會保存在info中.
– imagePickerControllerDidCancel:
– imagePickerController:didFinishPickingImage:editingInfo://Deprecated in iOS 3.0
NSString *const UIImagePickerControllerMediaType;// 媒體類型
NSString *const UIImagePickerControllerOriginalImage;// 原始未編輯的圖像
NSString *const UIImagePickerControllerEditedImage;// 編輯后的圖像
NSString *const UIImagePickerControllerCropRect;// 源圖像可編輯(有效?)區(qū)域
NSString *const UIImagePickerControllerMediaURL;// 視頻的路徑
NSString *const UIImagePickerControllerReferenceURL;// 原始選擇項的URL
NSString *const UIImagePickerControllerMediaMetadata;// 只有在使用攝像頭并且是圖像類型的時候有效.包含選擇圖像信息的字典類型
UIImagePickerController的代理需要遵守這兩個協(xié)議.<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
#pragma mark 選擇照片
- (void)selectPhoto
{
// 1. 首先判斷照片源是否可用
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
// 0)實例化控制器
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
// 1)設(shè)置照片源
[picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
// 2) 設(shè)置允許修改
[picker setAllowsEditing:YES];
// 3) 設(shè)置代理
[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];
// 關(guān)閉照片選擇器
[self dismissViewControllerAnimated:YES completion:nil];
// 需要將照片保存至應(yīng)用程序沙箱,由于涉及到數(shù)據(jù)存儲,同時與界面無關(guān)
// 可以使用多線程來保存圖像
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. 轉(zhuǎn)換成NSData保存
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:imagePath atomically:YES];
});
}
新聞熱點
疑難解答