Подтвердить что ты не робот

Как быстро снимать камеру с 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 не знаю, я использую плохие функции. Любая помощь?

Спасибо!!

4b9b3361

Ответ 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]



    }