2

У меня есть просмотр коллекции/scrollview, где я добавляю свой UILongPressGestureRecognizer. Это работает, но состояние .Began только запускается вместе с государством. Закончилось. Это не работает для меня, поскольку я хочу также отслеживать состояние. Изменено, чтобы получить gesture.locationInView.UILongPressGestureRecognizer только стрельба по Touch Up (swift)

Проблема, которую я обнаружил, заключается в том, что она противоречит жестом прокрутки в виде коллекции.

Если я установил scrollEnabled в false, все будет работать так, как ожидалось.

В моей viewDidLoad меня

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 

Фактическое длительное нажатие работает, если я нажимаю то функция скруббер не называется, он просто запускает как «Начал», так и «Закончен» в состоянии «Закончено».

И добавил эти вещи viewDidLoad, чтобы попытаться задержать прикосновение Scrollview и даже отменить его полностью ...

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 
     } 
    } 

... и ничего.

ответ

0

Я понял. Я добавил addRequireFailureOfGestureRecognizer внутри viewDidLoad. Он должен быть вне его.

Для того, чтобы поместить его снаружи и заставить его работать, вам нужно создать свой жест переменных (в моем случае «longPressedGesture»), как дополнительные опции и за пределами viewDidLoad, как:

var longPressedGesture : UILongPressGestureRecognizer? 

затем внутри viewDidLoad вы создаете жесты

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

 Смежные вопросы

  • Нет связанных вопросов^_^