У меня есть просмотр коллекции/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
}
}
... и ничего.