解決済み: 問題の内容についてはコメントを参照してください
サブビュー/「セル」の水平スクロール行になる UIScrollView のサブクラスを実装しています。基本的に横スクロールの「テーブルビュー」のような要素です。UIScrollView コンテンツ ビューの各サブビュー/「セル」には UIGestureRecognizer がアタッチされているため、ユーザーがそれらの 1 つに触れると、UIGestureRecognizer がトリガーされます。
問題は、人が contentView の原点から離れてスクロールした場合、つまり、UIScrollView が x が 0 以外の contentOffset を返す場合、右からスクロールインする新しいサブビュー/「セル」のいずれかが UIGestureRecognizer をトリガーしないことです。触れた。すべてのサブビューには、UIGestureRecognizer があります。
例として、80x80 のアイコンの行を表示していて、20 個のアイコンの行に対して contentSize が 1600,80 であるとします。UIScrollView は 320,80 であるため、4 つのアイコンが表示されます。最初の 4 つのアイコンはタッチ可能であり、UIGestureRecognizer はそれぞれで起動します。ユーザーは左にスクロールします。つまり、新しいアイコンが右から表示されます。これらの新しいアイコン (サブビュー) が作成され、元の 4 と同じ方法で UIScrollView で使用する contentView に追加されます。ただし、元の境界になかった新しいアイコン (サブビュー) はトリガーされません。15 位までスクロールした場合、テーブルビューと同様に、サブビューの独自のキュー/デキューを実装します。
ただし、ユーザーがスクロールして最初に戻ると、それらのセルが contentView に新しく追加されたとしても、それらの境界が UIScrollView の元のフレーム内にある限り、それらのセルはタッチ可能であり、スクロール内で集約するために使用した UIView contentView です。見る。したがって、各サブビューのフレームと、スクロールビューのフレーム内にあるかどうかに依存しているようです。
contentOffset の変更をスクロールし、サブビューを削除して追加すると、すべてが正常に表示されます。各サブビューにアタッチされた UIGestureRecognizers だけがトリガーされておらず、スクロールを開始する前に Scrollview の元の境界内に位置することに依存しています。
私はこれについて一日中、そして昨日は半日も頭を悩ませてきました)そして、それを他の何かに依存しない位置に絞り込んでいます。
コードを投稿しますが、これを実行するコードがたくさんあるため、何を投稿すればよいかわかりません。