Ios UILongPressGestureRecognitor仅在触摸时启动(swift)
我有一个集合视图/滚动视图,在其中添加UILongPressGestureRecognitor。它是有效的,但州政府只会和州政府一起被解雇。结束了。这对我不起作用,因为我还想跟踪状态。更改为获取手势。位置查看 我发现的问题是,它与集合视图的滚动手势相冲突 如果我将scrollEnabled设置为false,则一切都会按预期工作 在我看来,我有Ios UILongPressGestureRecognitor仅在触摸时启动(swift),ios,swift,uicollectionview,uigesturerecognizer,uilongpressgesturerecogni,Ios,Swift,Uicollectionview,Uigesturerecognizer,Uilongpressgesturerecogni,我有一个集合视图/滚动视图,在其中添加UILongPressGestureRecognitor。它是有效的,但州政府只会和州政府一起被解雇。结束了。这对我不起作用,因为我还想跟踪状态。更改为获取手势。位置查看 我发现的问题是,它与集合视图的滚动手势相冲突 如果我将scrollEnabled设置为false,则一切都会按预期工作 在我看来,我有 let longPressedGestureRecognizer = UILongPressGestureRecognizer(target: self,
let longPressedGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(PhotosViewController.Scrubber(_:)))
self.scrubberCollectionView.addGestureRecognizer(longPressedGestureRecognizer)
longPressedGestureRecognizer.minimumPressDuration = 0.6
longPressedGestureRecognizer.delegate = self
self.scrubberCollectionView.addGestureRecognizer(longPressedGesture)
我还尝试添加这些,试图在启用平移手势时使一个手势失败…(我还尝试了同时使用手势识别器进行shouldRecognitize
longPressedGestureRecognizer.requireGestureRecognizerToFail(scrubberCollectionView.panGestureRecognizer)
func overridePan(gestureRecognizer: UILongPressGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIPanGestureRecognizer ) -> Bool {
return (gestureRecognizer == longPressedGesture && otherGestureRecognizer == self.scrubberCollectionView.panGestureRecognizer )
}
…毫无用处
对于我的主要功能
func Scrubber(gesture: UILongPressGestureRecognizer) {
if (gesture.state == .Began ) {
print("Began")
}
else if (gesture.state == .Changed) {
print("Changed")
}
else if (gesture.state == .Ended){
print("Ended")
}
}
当我长按时,我在触地时没有得到任何事件,然后在触地时我得到以下结果:
Began
Ended
实际的长按正在工作,如果我点击,则不会调用洗涤器功能,它只是在结束状态下启动开始和结束
并将这些内容添加到viewDidLoad,以尝试延迟滚动视图的触摸,甚至完全取消它
self.scrubberCollectionView.delaysContentTouches = true
let longPress = UILongPressGestureRecognizer()
func gestureRecognizer(gestureRecognizer: UILongPressGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if(touch.view == scrubberCollectionView && gestureRecognizer == longPress){
return true
}else{
return false
}
}
…什么都没有。我想出来了。
我在viewDidLoad中添加了ShouldRequiredFilureOfGestureRecognizer。它必须在viewDidLoad之外
为了将其放置在外部并使其工作,您需要创建您的手势变量(在我的例子中为“LongPressedTesture”)作为选项,也可以在viewDidLoad外部创建,例如:
var longPressedGesture : UILongPressGestureRecognizer?
然后在viewDidLoad中创建手势
longPressedGesture = UILongPressGestureRecognizer(target: self, action: #selector(PhotosViewController.Scrubber(_:)))
longPressedGesture.delegate = self
self.scrubberCollectionView.addGestureRecognizer(longPressedGesture)