サンプルプロジェクトでは、aurioTouchアプリケーションデリゲートのコードは、touchesBegan、touchesMoved、touchesEndedに渡されたタッチイベントオブジェクトが同じオブジェクトでありながら、タッチなどの単一のユーザーアクションであることを示しています。指を動かします。UIScrollViewをオーバーライドしてこれらのメソッドを実装すると、返されるイベントは異なるオブジェクトになります。ここで何が欠けていますか?
2 に答える
オブジェクトはUITouch
同じになりますが、新しいイベントにパッケージ化されます。
UIEvent
1つのジェスチャのタッチイベントを配信するときに、が再利用されるのは正しいことです。ドキュメントから:
タッチイベントを表すUIEventオブジェクトは、マルチタッチシーケンス全体で永続的です。UIKitは、アプリケーションに配信されるすべてのイベントに対して同じUIEventインスタンスを再利用します。イベントオブジェクトまたはイベントオブジェクトから返されたオブジェクトを保持しないでください。あるフェーズから別のフェーズへのイベントからの情報を保持する必要がある場合は、UITouchまたはUIEventオブジェクトからその情報をコピーする必要があります。
あなたのケースの振る舞いの違いは、によって行われた特別なイベント処理に起因すると思いますUIScrollView
。スクロールビューは、ユーザーによるスクロールの意図(スワイプジェスチャ)を検出する必要があるため、イベントの配信を遅らせます。したがって、UIEventを維持する方法が必要です。おそらく、元の状態を保持するためにそれらをコピーします。これが、さまざまなオブジェクトが表示される理由である可能性があります。
上記のすべては推測にすぎないことに注意してください。