私は視覚障害者がレストランのメニューを読むのを助けるためにアプリに取り組んでいるので、画面の1回のダブルタップで写真をキャプチャする必要があります。iOSでtakePicture()を使ってプログラムで写真を撮るにはどうすればよいですか?
私は正常にUIImagePickerControllerを使用して、標準キャプチャインターフェイスを使用して写真を撮りました。これをダブルタップで行うために、オーバーレイビューを一般的なImageViewに設定し、カメラコントロールを無効にして、.takePicture()メソッドを呼び出しました。何らかの理由で、イメージのキャプチャを処理するデリゲートメソッドが機能しません。誰かが私が逃しているものを指摘してくれる?
イメージピッカーを現在のイメージピッカーにコメントしたように、私は決してそれを残すことはできません。私のオーバーレイには、写真撮影がダブルタップで実行されるはずなので、ボタンはありません。
ご協力いただきまして誠にありがとうございます。
お礼、
アンドレ。
以下のコード:
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var debugLabel: UILabel!
@IBOutlet var tapChangeState: UITapGestureRecognizer!
@IBOutlet weak var imageView: UIImageView!
var imagePicker = UIImagePickerController() // instantiates an image picker controller.
override func viewDidLoad() {
super.viewDidLoad()
// setting up Image Picker
imagePicker.delegate = self // setup the view controller as the image picker delegate.
imagePicker.allowsEditing = false // disable image editing by the user
imagePicker.sourceType = UIImagePickerControllerSourceType.camera // set source as camera
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.rear // use rear camera
// setting up gesture recognizer
tapChangeState.numberOfTouchesRequired = 1 // number of fingers required for change state detection
tapChangeState.numberOfTapsRequired = 2
debugLabel.text = "Loaded"
}
@IBAction func tapChangeStateDetected(_ sender: UITapGestureRecognizer) {
imagePicker.cameraOverlayView = imageView
imagePicker.showsCameraControls = false // disable camera controls
imagePicker.takePicture() // takes the shot
debugLabel.text = "Tap detected."
//present(imagePicker, animated: true, completion: nil)
}
// Conforming to ControllerDelegate protocol:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
imageView.contentMode = .scaleAspectFill
imageView.image = selectedImage
debugLabel.text = "Captured"
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: false, completion: nil)
}
// Controller Delegate protocol functions end here
}
実際の問題は何ですか?「デリゲートメソッド...うまくいかない」 – shallowThought
imagePickerControllerは決して呼び出されません。ダブルタップが検出されるため、imagePicker.takePicture()は呼び出されますが、何も起こりません。インターフェイスに追加したデバッグラベルは決して "Captured"に更新されません。コードの一部が実行されることはありません。 –