Фотосъемка задерживается при добавлении двойного касания - PullRequest
0 голосов
/ 09 января 2019

Эй, у меня есть базовое приложение для камеры, встроенное в swift 4.2 на ios12. Моя проблема очень проста, но я не могу ее решить.

Моя текущая настройка для камеры. У меня есть UIbutton, который преобразует его размер, когда .touchDown и .touchUpInside пытаются получить эффект нажатия кнопки. и добавили распознаватель жестов двойного касания. Оба эти события (нажатие кнопки и двойное нажатие) выполняют переключение сторон камеры спереди назад.

Я столкнулся с двумя проблемами здесь: 1. При переключении стороны при нажатии button кнопка выполняет эффект сжатия для события .touchDown, но затем отстает от события .touchUpInside, которое достигает нормального размера, до тех пор, пока сторона камеры не будет перевернута.

  1. У меня есть еще один UIView, который отвечает за захват изображения. Эта кнопка также имеет эффект преобразования, аналогичный кнопке выше. Но те, которые я добавляю double tap gesture, создает задержку при нажатии на изображения. сначала он будет уменьшаться, захватывать изображение, а затем вызывать событие .touchupInside, которое приведет к уменьшению размера кнопки.

Я действительно не могу понять причину этого. Я пытался использовать DispatchQueues.main.async, но не повезло.

Как это можно решить. Код как ниже:

func configureButtonhaptic() {
    cameraFlipButton.addTarget(self, action: #selector(camFlipHold), for: .touchDown)
    cameraFlipButton.addTarget(self, action: #selector(camFlipRelease), for: .touchUpInside)
}

@objc func camFlipHold() {
    cameraFlipButton.transformView(withDuration: 0.1, scaleX: 0.8, y: 0.8)
}

@objc func camFlipRelease() {
    lightTapticFeedback()
    cameraFlipButton.transformView(withDuration: 0.1, scaleX: 1, y: 1)
    toggleCamera()
}

func addDoubleTapForCameraSwitch() {
    let tap = UITapGestureRecognizer(target: self, action: #selector(switchCamera))
    tap.numberOfTapsRequired = 2
    view.addGestureRecognizer(tap)
}
func addCaptureButton() {
    let x : CGFloat = self.view.frame.midX - captureButtonSide/2
    let y : CGFloat = (self.view.frame.maxY - buttonLowerPadding) - captureButtonSide
    SCCaptureButton.frame = CGRect(x: x, y: y, width: captureButtonSide, height: captureButtonSide)
    SCCaptureButton.backgroundColor = UIColor(red: 255/255, green: 255/255, blue: 255/255, alpha: 0.3)
    SCCaptureButton.makeCircle()
    SCCaptureButton.layer.borderWidth = 3
    SCCaptureButton.layer.borderColor = UIColor.white.cgColor
    SCCaptureButton.addTarget(self, action: #selector(takePhotoOnTap), for: .touchUpInside)
    self.view.addSubview(SCCaptureButton)
}

func activateCaptureButton() {
    SCCaptureButton.addTarget(self, action: #selector(captureHoldDown), for: .touchDown)
    SCCaptureButton.addTarget(self, action: #selector(captureReleased), for: .touchUpInside)
}

@objc func captureHoldDown() {
    lightTapticFeedback()
    SCCaptureButton.transformView(withDuration: 0.1, scaleX: 0.95, y: 0.95)

}

@objc func captureReleased() {
    lightTapticFeedback()
    SCCaptureButton.transformView(withDuration: 0.1, scaleX: 1, y: 1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...