在同一个 UIButton 上识别 UILongPressGestureRecognizer 和 UIPanGestureRecognizer
Recognize both UILongPressGestureRecognizer and UIPanGestureRecognizer on same UIButton
我想做一个UIButton
当你长按它时,它会开始录制视频,如果你垂直向上平移手指(同时仍然长按),视频会放大。
我在我的按钮中添加了一个 UILongPressGestureRecognizer
和一个 UIPanGestureRecognizer
来实现这一点。单独地,他们工作。但是,它们不能一起工作。
如何在长按时记录我的按钮,同时允许我平移手指并识别?这就是我添加识别器的方式:
let long = UILongPressGestureRecognizer(target: self, action: #selector(record(gesture:)))
button.addGestureRecognizer(long)
let pan = UIPanGestureRecognizer(target: self, action: #selector(zoom(pan:)))
button.addGestureRecognizer(pan)
您需要确认这两个手势的代表。
例如:
let long = UILongPressGestureRecognizer(target: self, action: #selector(record(gesture:)))
long.delegate = self
button.addGestureRecognizer(long)
let pan = UIPanGestureRecognizer(target: self, action: #selector(zoom(pan:)))
pan.delegate = self
button.addGestureRecognizer(pan)
并且有一个委托方法可以同时识别多个手势。
gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
在您的 class 和 return 中定义为真。
你会得到你想要的。
我知道这不是问题的确切含义,但实际上您可以绕过必须使用 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
并使用 UILongPressGestureRecognizer
作为 UIPanGestureRecognizer
使用 UIGestureRecognizer.State
变化。这就是我过去所做的,清理事情并且比拥有两个手势识别器更符合逻辑
我想做一个UIButton
当你长按它时,它会开始录制视频,如果你垂直向上平移手指(同时仍然长按),视频会放大。
我在我的按钮中添加了一个 UILongPressGestureRecognizer
和一个 UIPanGestureRecognizer
来实现这一点。单独地,他们工作。但是,它们不能一起工作。
如何在长按时记录我的按钮,同时允许我平移手指并识别?这就是我添加识别器的方式:
let long = UILongPressGestureRecognizer(target: self, action: #selector(record(gesture:)))
button.addGestureRecognizer(long)
let pan = UIPanGestureRecognizer(target: self, action: #selector(zoom(pan:)))
button.addGestureRecognizer(pan)
您需要确认这两个手势的代表。 例如:
let long = UILongPressGestureRecognizer(target: self, action: #selector(record(gesture:)))
long.delegate = self
button.addGestureRecognizer(long)
let pan = UIPanGestureRecognizer(target: self, action: #selector(zoom(pan:)))
pan.delegate = self
button.addGestureRecognizer(pan)
并且有一个委托方法可以同时识别多个手势。
gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
在您的 class 和 return 中定义为真。
你会得到你想要的。
我知道这不是问题的确切含义,但实际上您可以绕过必须使用 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
并使用 UILongPressGestureRecognizer
作为 UIPanGestureRecognizer
使用 UIGestureRecognizer.State
变化。这就是我过去所做的,清理事情并且比拥有两个手势识别器更符合逻辑