【问题标题】:UILongPressGestureRecognizer only firing on Touch Up (swift)UILongPressGestureRecognizer 仅在 Touch Up 时触发(swift)
【发布时间】:2016-03-06 02:12:30
【问题描述】:

我有一个集合视图/滚动视图,我在其中添加了我的 UILongPressGestureRecognizer。它可以工作,但是 state .Began 只会与 state 一起被触发。结束。这对我不起作用,因为我还想跟踪状态 .Changed 以获取gesture.locationInView。

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

如果我将 scrollEnabled 设置为 false,一切都会按预期进行。

在我看来DidLoad 我有

let longPressedGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(PhotosViewController.Scrubber(_:)))
self.scrubberCollectionView.addGestureRecognizer(longPressedGestureRecognizer)
longPressedGestureRecognizer.minimumPressDuration = 0.6
longPressedGestureRecognizer.delegate = self

self.scrubberCollectionView.addGestureRecognizer(longPressedGesture)

我还尝试添加这些以尝试在启用平移手势时使一个手势失败……(我也尝试了 shouldRecognizeSimultaneouslyWithGestureRecognizer。

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

实际的长按正在工作,如果我点击则不会调用 Scrubber 函数,它只是在 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
        }
    }

……什么都没有。

【问题讨论】:

    标签: ios swift uicollectionview uigesturerecognizer uilongpressgesturerecogni


    【解决方案1】:

    我想通了。 我在 viewDidLoad 中添加了 shouldRequireFailureOfGestureRecognizer。它需要在它之外。

    为了将其放置在外部并使其工作,您需要在 viewDidLoad 之外创建手势变量(在我的情况下为“longPressedGesture”)作为选项,例如:

    var longPressedGesture : UILongPressGestureRecognizer?
    

    然后在 viewDidLoad 中创建手势

     longPressedGesture = UILongPressGestureRecognizer(target: self, action: #selector(PhotosViewController.Scrubber(_:)))
                longPressedGesture.delegate = self
                self.scrubberCollectionView.addGestureRecognizer(longPressedGesture)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 2019-12-21
      • 2018-08-05
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多