webentwicklung-frage-antwort-db.com.de

wie man die Kamera mit dem UIImagePickerController schnell einfängt?

Ich versuche, UIImagePickerController in Swift zu verwenden, funktioniert aber nicht ...

mein 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)

    }
   }   
}

Ich habe Fehler in der folgenden Codezeile

imag.delegate = self 
(Type'ViewControlles does confoorm to protocol 'UIImagePickerControllerDelegate')
imagePicker.mediaTypes = kUTTypeImage   
(use of unresolved identifier kUTTypeImage)

Ich habe gelesen, dass kUTTypeImage nicht in Swift verwendet werden kann. Aber ich weiß nicht, ich verwende diese Funktionen. Irgendeine Hilfe?

Vielen Dank!!

33
user3745888

Sie sollten MobileCoreServices auch in den Controller importieren:

import MobileCoreServices 

und dann den Typ in eckige Klammern wie folgt einfügen:

image.mediaTypes = [kUTTypeImage]

Swift 2.0 und höher

image.mediaTypes = [kUTTypeImage as String]
82
Filippo Camillo

Swift 2.0

In Swift 2.0 (Xcode 7) müssen Sie kUTTypeImage (eine CFString) explizit in String umwandeln:

picker.mediaTypes = [kUTTypeImage as String]

Um dieses Symbol zu definieren, müssen Sie jedoch noch Mobile Core Services importieren:

import MobileCoreServices 

Der Standardwert von mediaTypes ist ohnehin [kUTTypeImage]. Sie müssen ihn also nicht festlegen, wenn Sie dies möchten.

42
Aaron Brager

sie sollten auch UINavigationControllerDelegate zur Protokollliste der ViewController und einer der optionalen Delegatfunktionen hinzufügen (wenn Sie planen, ein Bild zu erhalten)

Dies ist der Arbeitscode für Ihr Problem:

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)
        }
    }
}
23
Roman

Aus Ihrem Code-Stück ist es sehr klar, dass Sie an zwei Stellen Fehler machen, wobei eine delegate und zweitens Medientyp imag.mediaTypes = kUTTypeImage eingestellt wird.

Erstes: Wenn Sie sich die delegate-Definition von UIImagePickerController ansehen, müssen Sie zwei Protokolle UINavigationControllerDelegate und UIImagePickerControllerDelegate bestätigen, sodass Sie diese beiden Protokolle in Ihre viewcontroller-Klasse wie übernehmen müssen 

class ViewController: UIViewController,UINavigationControllerDelegate,    UIImagePickerControllerDelegate

zweiter Fehler: Wenn Sie in den Definitionsteil von mediaTypes schauen, müssen Sie eindeutig ein Array von Medientypen übergeben 

imag.mediaTypes = [kUTTypeImage]

Abgesehen davon habe ich für dieselbe Aufgabe eine sehr absteigende Klasse geschrieben

Es ist leicht zu verstehen und zu integrieren.

Bitte schön

//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.....

        }

    }
7
Kamar Shad

Sie müssen sich dem Delegierten so anpassen

 class ViewController: UIViewController, UIImagePickerControllerDelegate

In der Dokumentation ist der Medientyp standardmäßig auf image festgelegt, sodass Sie diese Zeile löschen können, da Sie sie nur auf image setzen.

Vergessen Sie nicht, die Protokollmethoden zu implementieren, die in der Dokumentation beschrieben sind: documentation

1
Kris Gellci

Versuche dies

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
}

}
1
khan

Swift 1.2 Syntax:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        let image = info[UIImagePickerControllerOriginalImage]



    }
0