Эй, у меня есть базовое приложение для камеры, встроенное в swift 4.2 на ios12.
Моя проблема очень проста, но я не могу ее решить.
Моя текущая настройка для камеры.
У меня есть UIbutton
, который преобразует его размер, когда .touchDown
и .touchUpInside
пытаются получить эффект нажатия кнопки. и добавили распознаватель жестов двойного касания. Оба эти события (нажатие кнопки и двойное нажатие) выполняют переключение сторон камеры спереди назад.
Я столкнулся с двумя проблемами здесь:
1. При переключении стороны при нажатии button
кнопка выполняет эффект сжатия для события .touchDown
, но затем отстает от события .touchUpInside
, которое достигает нормального размера, до тех пор, пока сторона камеры не будет перевернута.
- У меня есть еще один
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)
}