web-dev-qa-db-ja.com

迅速にUIImagePickerControllerでカメラをキャプチャする方法は?

Swift=でUIImagePickerControllerを使用しようとしていますが、動作しません...

私の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で使用できないことを読んだことがあります。何か助け?

ありがとう!!

34
user3745888

また、コントローラーにMobileCoreServicesをインポートする必要があります。

import MobileCoreServices 

そして、次のように型を角括弧内に入れます:

image.mediaTypes = [kUTTypeImage]

Swift 2.0以降

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

Swift 2.0

Swift 2.0(Xcode 7))では、kUTTypeImage(a CFString)をStringに明示的にキャストする必要があります。

picker.mediaTypes = [kUTTypeImage as String]

このシンボルを定義するには、モバイルコアサービスをインポートする必要があります。

import MobileCoreServices 

つまり、mediaTypesのデフォルト値は[kUTTypeImage]とにかく、それがあなたが望むものであるならば、あなたはそれを設定する必要はありません。

43
Aaron Brager

また、UINavigationControllerDelegateのプロトコルリストとオプションのデリゲート関数の1つに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)
        }
    }
}
23
Roman

Your Your Piece of codeから、1つはdelegateを設定し、2つ目はMedia type imag.mediaTypes = kUTTypeImage

最初の1つ:delegateUIImagePickerController定義を調べる場合、2つのプロトコルUINavigationControllerDelegateおよびUIImagePickerControllerDelegateを確認する必要があるため、これら2つのプロトコルを採用する必要があります。 viewcontrollerクラスのように

class ViewController: UIViewController,UINavigationControllerDelegate,    UIImagePickerControllerDelegate

2番目のエラー: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.....

        }

    }
7
Kamar Shad

このようなデリゲートに準拠する必要があります

 class ViewController: UIViewController, UIImagePickerControllerDelegate

ドキュメントごとに、デフォルトではメディアタイプはイメージに設定されているため、イメージにのみ設定しているため、先に進んでその行を削除できます。

ドキュメントで概説されているプロトコルメソッドを実装することを忘れないでください: documentation

1
Kris Gellci

これを試して

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構文:

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



    }
0