私はiOS開発とSwiftが初めてで、次の問題があります。
画面からタッチイベントをキャプチャしたいと思います。通常のビューでこれを行うことに問題はありません。UIScrollView
残念ながら、コンポーネントで問題が発生しました。ユーザーが画面をタップしたり、画面を長押ししたり、指を水平に動かしたりすると、タッチをキャプチャできますが、ユーザーが指を垂直に動かしながら同時に垂直スクロールをアクティブにすると、できませんタッチをキャプチャします。
同様の問題に関して StackOverflow でいくつかのスレッドを見つけましたが、そこで提供された解決策は私の問題を解決しませんでした。
私のビューの構造は次のとおりです。
+- View (top-level view)
|
|
+--- UIScrollView
|
|
+-- other views inside...
これが私のコードです:
class MyViewController : UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
view.addGestureRecognizer(myRecognizer)
}
}
Gesture Recognizer が最上位ビューに追加されます。
次の基本的なカスタム実装もありますUIGestureRecognizer
。
class MyRecognizer: UIGestureRecognizer {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesBegan(touches, with: event)
// handle events...
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesMoved(touches, with: event)
// handle events...
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesEnded(touches, with: event)
// handle events...
}
}
この問題を解決するために私は何をしようとしましたか?
- パラメータの設定
scrollView.canCancelContentTouches = false
- 役に立たなかった - 設定パラメータ
scrollView.isScrollEnabled = false
- すべてのタッチ イベントをキャプチャできましたが、scrollView が機能しなくなりました - 役に立ちませんでした - ジェスチャ認識機能を scrollView に追加し、トップレベル ビューから削除する - 役に立たなかった
- scrollView とトップレベル ビューの両方にジェスチャ認識エンジンを追加する - 役に立たなかった
- 設定パラメータ
scrollView.isUserInteractionEnabled = false
- すべてのタッチ イベントをキャプチャできましたが、scrollView とすべての UI コンポーネントが機能しなくなりました - 役に立ちませんでした - クラス内の呼び出しの並べ替え
MyRecognizer
: 最初にイベントを処理してから、上位クラスからメソッドを呼び出すsuper.touches...
- 役に立たなかった
UIScrollView
現在、ユーザーが画面を垂直にスクロールしているときにタッチイベントをキャプチャするために他に何ができるかわかりません。
任意の提案やヘルプをいただければ幸いです!
よろしく、
ピーター