UILongPressGestureRecognizer を追加するコレクション ビュー/スクロール ビューがあります。動作しますが、state .Began は state と一緒にしか発火しません。終了しました。状態も追跡したいので、それは私にはうまくいきません。
私が見つけた問題は、コレクション ビューの Scroll ジェスチャと競合していることです。
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)
また、これらを追加して、パン ジェスチャが有効になっているときに 1 つのジェスチャが失敗するようにしようとしました… (そして、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 に追加して、スクロールビューのタッチを遅らせたり、完全にキャンセルしたりしようとしました…</p>
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
}
}
…そして何もない。