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>