私はCocoaTouchアプリケーションに取り組んでおり、ビューのレイヤーのどのサブレイヤーがタッチされたかを判別することでタッチを処理しようとしていました。私のコントローラーのコードは次のようになりました。
CALayer *hitLayer = [self.view.layer hitTest:point];
これは機能していませんでした。サブレイヤーの下部をタップすると機能しますが、上部はタップしません。1時間のヘアプルとグーグルの後で、レイヤー自体の代わりにプレゼンテーションレイヤーを使用してヒットテストを実行すると、それが機能することがようやくわかりました。
CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
だから、私は私の問題を解決しました、しかし私の質問は:なぜですか?
Core Animationガイドを読みましたが、プレゼンテーションツリーとレンダリングツリーはオブジェクトモデルツリーとは異なる場合があることを理解しています。しかし、プレゼンテーションツリーが(明らかに)異なるヒットテスト動作をする理由がわかりません。プレゼンテーションツリーとオブジェクトモデルは同じフレームや境界などを持っていませんか?