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で使用できないことを読んだことがあります。何か助け?
ありがとう!!
また、コントローラーにMobileCoreServicesをインポートする必要があります。
import MobileCoreServices
そして、次のように型を角括弧内に入れます:
image.mediaTypes = [kUTTypeImage]
Swift 2.0以降
image.mediaTypes = [kUTTypeImage as String]
Swift 2.0(Xcode 7))では、kUTTypeImage
(a CFString
)をString
に明示的にキャストする必要があります。
picker.mediaTypes = [kUTTypeImage as String]
このシンボルを定義するには、モバイルコアサービスをインポートする必要があります。
import MobileCoreServices
つまり、mediaTypes
のデフォルト値は[kUTTypeImage]
とにかく、それがあなたが望むものであるならば、あなたはそれを設定する必要はありません。
また、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)
}
}
}
Your Your Piece of codeから、1つはdelegate
を設定し、2つ目はMedia type imag.mediaTypes = kUTTypeImage
最初の1つ:delegate
のUIImagePickerController
定義を調べる場合、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.....
}
}
このようなデリゲートに準拠する必要があります
class ViewController: UIViewController, UIImagePickerControllerDelegate
ドキュメントごとに、デフォルトではメディアタイプはイメージに設定されているため、イメージにのみ設定しているため、先に進んでその行を削除できます。
ドキュメントで概説されているプロトコルメソッドを実装することを忘れないでください: documentation
これを試して
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
}
}
Swift 1.2構文:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage]
}