UIImagePickerController类管理系统的或者自定义的UI界面来获取设备上的图片和影像,拍照或者录像. ImagePickerController管理这个界面并把获得的结果传递给delegate.
UIImagePickerController根据不同的来源类型(sourceType)来展示不同的界面和实现不同的功能.
UIImagePickerControllerSourceTypeCamera: 拍照或者摄像
UIImagePickerControllerSourceTypePhotoLibrary: 选择图像
UIImagePickerControllerSourceTypeSavedPhotosAlbum:
选择录像
建立UIImagePickerController的步骤:
<span style="font-family:Times New Roman;">//必须遵循UINavigationControllerDelegate和UIImagePickerControllerDelegate哦 class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate { var imagePickerController:UIImagePickerController! override func viewDidLoad() { super.viewDidLoad() //判断是否获得相机 if ((UIImagePickerController.availableMediaTypesForSourceType(UIImagePickerControllerSourceType.Camera)) != nil) { //初始化 imagePickerController = UIImagePickerController() //设置代理 imagePickerController.delegate = self; //设置类型 imagePickerController.sourceType = .Camera //设置是否能够编辑 imagePickerController.allowsEditing = true //展示UIImagePickerController self.presentViewController(imagePickerController, animated: true, completion: {}) } } //delegate方法 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { let dic = info as NSDictionary //原始图片 let image = dic.objectForKey("UIImagePickerControllerOriginalImage") as UIImage //编辑过后的图片 let editedImage = dic.objectForKey("UIImagePickerControllerEditedImage") as UIImage //MediaType let mediaType = dic.objectForKey("UIImagePickerControllerMediaType") as String } func imagePickerControllerDidCancel(picker: UIImagePickerController) { } }</span>UIImagePickerViewController的界面可以自定义
<span style="font-family:Times New Roman;font-size:12px;"></span><pre name="code" class="objc"><span style="font-family:Times New Roman;"> //自定义UIImagePickerController的UI界面 imagePickerController.showsCameraControls = false //1.覆盖涂层 let view = UIView() //自定义的View view.frame = imagePickerController.cameraOverlayView!.frame imagePickerController.cameraOverlayView = view; //2.设置相机内容视图的大小 imagePickerController.cameraViewTransform = CGAffineTransformScale(imagePickerController.view.transform, 0.9, 0.9)</span>
照相的实现
<span style="font-family:Times New Roman;"></span><pre name="code" class="objc"><span style="font-family:Times New Roman;"> //判断相机设备是否可用 let frontCameraAviable = UIImagePickerController.isCameraDeviceAvailable(.Front) //相机设备支持的模式,返回NSNumber数组,[Photo,Vedio] let cameraModel = UIImagePickerController.availableCaptureModesForCameraDevice(.Front) //相机设备支持闪光灯与否 let canFlashOrNot = UIImagePickerController.isFlashAvailableForCameraDevice(.Front) //设置相机设备,前置或者后置摄像头 imagePickerController.cameraDevice = .Front //设置相机的模式 imagePickerController.cameraCaptureMode = .Photo //设置闪光灯模式 imagePickerController.cameraFlashMode = .On</span>
//拍照imagePickerController.takePicture() 录像相关
<span style="font-family:Times New Roman;"> //录像的质量 imagePickerController.videoQuality = .TypeHigh //录像的是长,默认10分钟 imagePickerController.videoMaximumDuration = 20 //开始录像 imagePickerController.startVideoCapture() //停止录像 imagePickerController.stopVideoCapture()</span>五个常量
<span style="font-family:Times New Roman;">enum UIImagePickerControllerSourceType : Int {//数据源 case PhotoLibrary case Camera case SavedPhotosAlbum } enum UIImagePickerControllerQualityType : Int {//视频的画质 case TypeHigh // highest quality case TypeMedium // medium quality, suitable for transmission via Wi-Fi case TypeLow // lowest quality, suitable for tranmission via cellular network case Type640x480 // VGA quality case TypeIFrame1280x720 case TypeIFrame960x540 } enum UIImagePickerControllerCameraCaptureMode : Int {//相机模式 case Photo case Video } enum UIImagePickerControllerCameraDevice : Int {//相机类型 case Rear case Front } enum UIImagePickerControllerCameraFlashMode : Int {//闪光灯类型 case Off case Auto case On } </span>