我使用UIImagePickerController通过iPhone的相机拍照.
我想展示两张"拍照"和"选择一张照片".
我的代码
imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = .camera //imagePicker.sourceType = .PhotoLibrary presentViewController(imagePicker, animated: true, completion: nil)
我试图使用imagePicker.sourceType = .Camera
和imagePicker.sourceType = .PhotoLibrary
一起做这一点,但它不工作...
谢谢
导入UIImagePickerControllerDelegate
并创建一个变量来分配UIImagePickerController
var imagePicker = UIImagePickerController()
并进行设置imagePicker.delegate = self
.
创建一个操作表以显示"相机"和"照片库"的选项.
在按钮上单击操作:
@IBAction func buttonOnClick(_ sender: UIButton) { self.btnEdit.setTitleColor(UIColor.white, for: .normal) self.btnEdit.isUserInteractionEnabled = true let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet) alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: { _ in self.openCamera() })) alert.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { _ in self.openGallary() })) alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: nil)) /*If you want work actionsheet on ipad then you have to use popoverPresentationController to present the actionsheet, otherwise app will crash on iPad */ switch UIDevice.current.userInterfaceIdiom { case .pad: alert.popoverPresentationController?.sourceView = sender alert.popoverPresentationController?.sourceRect = sender.bounds alert.popoverPresentationController?.permittedArrowDirections = .up default: break } self.present(alert, animated: true, completion: nil) } func openCamera() { if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)) { imagePicker.sourceType = UIImagePickerControllerSourceType.camera imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) } else { let alert = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true, completion: nil) } } func openGallary() { imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary imagePicker.allowsEditing = true self.present(imagePicker, animated: true, completion: nil) }
从这里下载示例项目.
带摄像头和图库的行动表:
//MARK:- Image Picker @IBAction func imagePickerBtnAction(selectedButton: UIButton) { let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet) alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: { _ in self.openCamera() })) alert.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { _ in self.openGallery() })) alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: nil)) self.present(alert, animated: true, completion: nil) }
相机图像选择器功能:
func openCamera() { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera) { let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerController.SourceType.camera imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) } else { let alert = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true, completion: nil) } }
图库图像选取器功能:
func openGallery() { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.photoLibrary){ let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.allowsEditing = true imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary self.present(imagePicker, animated: true, completion: nil) } else { let alert = UIAlertController(title: "Warning", message: "You don't have permission to access gallery.", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true, completion: nil) } }
ImagePicker委托:
//MARK:-- ImagePicker delegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let pickedImage = info[.originalImage] as? UIImage { // imageViewPic.contentMode = .scaleToFill } picker.dismiss(animated: true, completion: nil) }
设置委托像:
UIImagePickerControllerDelegate,UINavigationControllerDelegate
拍摄一张imageview,以便我们显示所选/拍摄的图像:
@IBOutlet weak var imageViewPic: UIImageView!
使用设备相机捕获新图像:
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) { let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.camera imagePicker.allowsEditing = false self.present(imagePicker, animated: true, completion: nil) }
对于来自图库的精选照片:
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){ let imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.allowsEditing = true imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary self.present(imagePicker, animated: true, completion: nil) }
这是委托方法:
//MARK: - ImagePicker delegate func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { // imageViewPic.contentMode = .scaleToFill imageViewPic.image = pickedImage } picker.dismiss(animated: true, completion: nil) }
在info.plist中设置访问摄像头和照片的权限,如:
NSCameraUsageDescription This app will use camera NSPhotoLibraryUsageDescription You can select photo
100%工作和测试