程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UIImagePickerController

UIImagePickerController

編輯:C++入門知識

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的代理需要遵守這兩個協議.

#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];

});

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved