시각 장애인이 식당 메뉴를 읽는 것을 돕기 위해 앱을 작업 중이므로 화면을 두 번 탭하여 사진을 캡처해야합니다.takePicture()를 사용하여 iOS에서 프로그래밍 방식으로 사진을 찍는 방법은 무엇입니까?
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()가 호출되지만 아무런 반응이 없습니다. 인터페이스에 추가 한 디버그 레이블은 "캡처 됨"으로 업데이트되지 않습니다. 코드 조각이 실행되지 않습니다. –