Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UILongPressGestureRecognitor仅在触摸时启动(swift)_Ios_Swift_Uicollectionview_Uigesturerecognizer_Uilongpressgesturerecogni - Fatal编程技术网

Ios UILongPressGestureRecognitor仅在触摸时启动(swift)

Ios UILongPressGestureRecognitor仅在触摸时启动(swift),ios,swift,uicollectionview,uigesturerecognizer,uilongpressgesturerecogni,Ios,Swift,Uicollectionview,Uigesturerecognizer,Uilongpressgesturerecogni,我有一个集合视图/滚动视图,在其中添加UILongPressGestureRecognitor。它是有效的,但州政府只会和州政府一起被解雇。结束了。这对我不起作用,因为我还想跟踪状态。更改为获取手势。位置查看 我发现的问题是,它与集合视图的滚动手势相冲突 如果我将scrollEnabled设置为false,则一切都会按预期工作 在我看来,我有 let longPressedGestureRecognizer = UILongPressGestureRecognizer(target: self,

我有一个集合视图/滚动视图,在其中添加UILongPressGestureRecognitor。它是有效的,但州政府只会和州政府一起被解雇。结束了。这对我不起作用,因为我还想跟踪状态。更改为获取手势。位置查看

我发现的问题是,它与集合视图的滚动手势相冲突

如果我将scrollEnabled设置为false,则一切都会按预期工作

在我看来,我有

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)