swift - Как нажать на UIView, чтобы сделать снимок, используя мобильный детектор лица видения - PullRequest
0 голосов
/ 11 февраля 2019

Попытка захвата неподвижного изображения при нажатии на UIView.

Проект из: https://github.com/googlesamples/ios-vision

FaceDetectorDemo> FaceDetector> CameraViewController.m

Я преобразовал проект детектора лицот цели c к быстрому, но мне нужно добавить дополнительную функцию, которую пользователь нажимает на экран, чтобы захватить, но просто не мог понять это ..

Мой код:

@IBOutlet weak var placeholder: UIView! 
var stillImageOutput = AVCaptureStillImageOutput()

for face in faces
{
  //somewhere in here called faceDetected() method
}

func faceDetected() -> Void
{
    let tapped = UITapGestureRecognizer(target:self,action:#selector(saveToCamera))      
    placeholder.addGestureRecognizer(tapped)
    placeholder.isUserInteractionEnabled = true
}

@objc func saveToCamera(_ sender: UIGestureRecognizer)
{
    if let videoConnection = stillImageOutput.connection(with: AVMediaType.video) {
        stillImageOutput.captureStillImageAsynchronously(from: videoConnection) {
            (imageDataSampleBuffer, error) -> Void in
            let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer!)
            UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData!)!, nil, nil, nil)
        }
    }
}

Кажется, он не запускается в saveToCamera при нажатии на UIView, я довольно новичок в разработке для IOS, нуждаюсь в руководстве.Заранее спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019
  • saveToCamera не вызывается, потому что, когда вы добавили placeholder.addGestureRecognizer(tap) вместо placeholder.addGestureRecognizer(tapped), не tap, а tapped
  • В селекторе метод должен быть: saveToCamera(_:)

это полный код.Это работает.

  func faceDetected() {
        let tapped = UITapGestureRecognizer(target:self,action:#selector(self.saveToCamera(_:)))
        placeholder.addGestureRecognizer(tapped)
        placeholder.isUserInteractionEnabled = true
    }



    @objc func saveToCamera(_ sender: UIGestureRecognizer) {

        if let videoConnection = stillImageOutput.connection(with: AVMediaType.video) {
            stillImageOutput.captureStillImageAsynchronously(from: videoConnection) {
                (imageDataSampleBuffer, error) -> Void in
                let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer!)
                UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData!)!, nil, nil, nil)
            }
        }
    }
...