如何在Swift中加载来自相机或照片库的图像
答
我用你想要的视图控制器中调用雨燕3
//
// DSCameraHandler.swift
//
// Created by David Seek on 23.04.17.
// Copyright © 2016 David Seek. All rights reserved.
//
import MobileCoreServices
import UIKit
class DSCameraHandler: NSObject {
private let imagePicker = UIImagePickerController()
private let isPhotoLibraryAvailable = UIImagePickerController.isSourceTypeAvailable(.photoLibrary)
private let isSavedPhotoAlbumAvailable = UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum)
private let isCameraAvailable = UIImagePickerController.isSourceTypeAvailable(.camera)
private let isRearCameraAvailable = UIImagePickerController.isCameraDeviceAvailable(.rear)
private let isFrontCameraAvailable = UIImagePickerController.isCameraDeviceAvailable(.front)
private let sourceTypeCamera = UIImagePickerControllerSourceType.camera
private let rearCamera = UIImagePickerControllerCameraDevice.rear
private let frontCamera = UIImagePickerControllerCameraDevice.front
var delegate: UINavigationControllerDelegate & UIImagePickerControllerDelegate
init(delegate_: UINavigationControllerDelegate & UIImagePickerControllerDelegate) {
delegate = delegate_
}
func getPhotoLibraryOn(_ onVC: UIViewController, canEdit: Bool) {
if !isPhotoLibraryAvailable && !isSavedPhotoAlbumAvailable { return }
let type = kUTTypeImage as String
if isPhotoLibraryAvailable {
imagePicker.sourceType = .photoLibrary
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary) {
if availableTypes.contains(type) {
imagePicker.mediaTypes = [type]
imagePicker.allowsEditing = canEdit
}
}
} else if isPhotoLibraryAvailable {
imagePicker.sourceType = .savedPhotosAlbum
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .savedPhotosAlbum) {
if availableTypes.contains(type) {
imagePicker.mediaTypes = [type]
}
}
} else {
return
}
imagePicker.allowsEditing = canEdit
imagePicker.delegate = delegate
onVC.present(imagePicker, animated: true, completion: nil)
}
func getCameraOn(_ onVC: UIViewController, canEdit: Bool) {
if !isCameraAvailable { return }
let type1 = kUTTypeImage as String
if isCameraAvailable {
if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) {
if availableTypes.contains(type1) {
imagePicker.mediaTypes = [type1]
imagePicker.sourceType = sourceTypeCamera
}
}
if isRearCameraAvailable {
imagePicker.cameraDevice = rearCamera
} else if isFrontCameraAvailable {
imagePicker.cameraDevice = frontCamera
}
} else {
return
}
imagePicker.allowsEditing = canEdit
imagePicker.showsCameraControls = true
imagePicker.delegate = delegate
onVC.present(imagePicker, animated: true, completion: nil)
}
}
以下为:
extension ViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func thisIsTheFunctionWeAreCalling() {
let camera = DSCameraHandler(delegate_: self)
let optionMenu = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
optionMenu.popoverPresentationController?.sourceView = self.view
let takePhoto = UIAlertAction(title: "Take Photo", style: .default) { (alert : UIAlertAction!) in
camera.getCameraOn(self, canEdit: true)
}
let sharePhoto = UIAlertAction(title: "Photo Library", style: .default) { (alert : UIAlertAction!) in
camera.getPhotoLibraryOn(self, canEdit: true)
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (alert : UIAlertAction!) in
}
optionMenu.addAction(takePhoto)
optionMenu.addAction(sharePhoto)
optionMenu.addAction(cancelAction)
self.present(optionMenu, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerEditedImage] as! UIImage
// image is our desired image
picker.dismiss(animated: true, completion: nil)
}
}
我已为你找出答案,但你得到的所有downvotes,因为这是没有网站“代码为你”。您必须提供代码,我们正在帮助您找到错误并改善您的代码。所以下次尝试谷歌解决方案,并获得帮助,如果你卡住了。现在:我已经为你发布了一个功能齐全的选项。玩得开心 –
我明白,这不是一个让人为我做这项工作的地方,我只是要求我可以从哪里开始。我不希望任何人为我写出来,尽管我很欣赏你发布的答案。 –
我不想冒犯你或任何配偶。只是想告诉你,为什么你会得到所有的投票。你得到我的赞成,所以它不会太坏,如果我的工作可以帮助你,我很高兴你的问题得到解答,所以你可以检查它。如果您需要进一步的帮助,请告诉我。 –