Как быстро снимать камеру с UIImagePickerController?
Я пытаюсь использовать UIImagePickerController
в swift, но не работает...
my ViewController:
class ViewController: UIViewController {
@IBOutlet var imag : UIView = nil
@IBAction func capture(sender : UIButton) {
println("Button capture")
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
{
var imag = UIImagePickerController()
imag.delegate = self
imag.sourceType = UIImagePickerControllerSourceType.Camera;
imag.mediaTypes = kUTTypeImage
imag.allowsEditing = false
self.presentViewController(imag, animated: true, completion: nil)
}
}
}
У меня есть ошибки в следующей строке кода
imag.delegate = self
(Type'ViewControlles does confoorm to protocol 'UIImagePickerControllerDelegate')
imagePicker.mediaTypes = kUTTypeImage
(use of unresolved identifier kUTTypeImage)
Я читал, что kUTTypeImage
не может использовать в swift.but не знаю, я использую плохие функции. Любая помощь?
Спасибо!!
Ответы
Ответ 1
Вы также должны импортировать MobileCoreServices в контроллер:
import MobileCoreServices
а затем введите тип внутри квадратных скобок следующим образом:
image.mediaTypes = [kUTTypeImage]
Swift 2.0 и выше
image.mediaTypes = [kUTTypeImage as String]
Ответ 2
Swift 2.0
В Swift 2.0 (Xcode 7) вам нужно явно указать kUTTypeImage
(a CFString
) на String
:
picker.mediaTypes = [kUTTypeImage as String]
И вам еще нужно импортировать службы Mobile Core для определения этого символа:
import MobileCoreServices
Тем не менее, значение по умолчанию mediaTypes
равно [kUTTypeImage]
в любом случае, поэтому вам не нужно его устанавливать, если это вам нужно.
Ответ 3
также вы должны добавить UINavigationControllerDelegate
в список протоколов ViewController
и одна из необязательных функций делегата (если вы планируете получить изображение)
Это рабочий код для вашей проблемы:
import UIKit
import MobileCoreServices
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
println("i've got an image");
}
@IBAction func capture(sender : UIButton) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){
println("Button capture")
var imag = UIImagePickerController()
imag.delegate = self
imag.sourceType = UIImagePickerControllerSourceType.Camera;
imag.mediaTypes = [kUTTypeImage]
imag.allowsEditing = false
self.presentViewController(imag, animated: true, completion: nil)
}
}
}
Ответ 4
Из вашей части кода очень ясно, что вы делаете ошибки в двух местах, установите delegate
, а второй устанавливает тип носителя imag.mediaTypes = kUTTypeImage
Первый. Если вы посмотрите на определение delegate
UIImagePickerController
, то для подтверждения двух протоколов UINavigationControllerDelegate
и UIImagePickerControllerDelegate
необходимо подтвердить два этих протокола в классе viewcontroller
, например, как
class ViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate
вторая ошибка: если вы посмотрите на часть определения mediaTypes
, для этого явно требуется массив передаваемых типов мультимедиа, выполните следующие действия.
imag.mediaTypes = [kUTTypeImage]
Кроме того, я написал очень спускный класс для одной и той же задачи
Легко понять и интегрировать.
Здесь вы найдете
//Declare property
var imagePicker:ImageVideoPicker?
//Call below line of code properly, it will return an image
self.imagePicker = ImageVideoPicker(frame: self.view.frame, superVC: self) { (capturedImage) -> Void in
if let captureImage = capturedImage{
//you did it.....
}
}
Ответ 5
Вы должны соответствовать делегату, подобному этому
class ViewController: UIViewController, UIImagePickerControllerDelegate
В документации по умолчанию для типов мультимедиа установлено изображение, чтобы вы могли продолжить и удалить эту строку, поскольку вы только устанавливаете ее на изображение.
Не забудьте реализовать методы протокола, которые описаны в документации:
documentation
Ответ 6
Попробуйте это
import UIKit
import AVFoundation
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
var imagePicker: UIImagePickerController!
@IBOutlet weak var ImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func takeImage(sender: AnyObject) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .Camera
presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
imagePicker.dismissViewControllerAnimated(true, completion: nil)
ImageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
}
}
Ответ 7
синтаксис swift 1.2:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage]
}