いくつかのCALayerサブクラスを含むUIViewがあります。次のコードを使用して、タッチイベントが対応するレイヤーを検出しています。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
NSLog(@"%@,%@",NSStringFromCGPoint(point),[self.layer hitTest:point].name);
}
これは、デバイスが回転するまで正常に機能します。デバイスを回転させると、現在のすべてのレイヤーがスーパーレイヤーから削除され、新しい方向に合うように新しいCALayerが作成されます。新しいレイヤーは正しく挿入され、正しい方向で表示できます。
ローテーション後、hitTestメソッドは常にレイヤーに対してnullを返します。180度回転すると、返されるレイヤーが回転前のその位置にあることに気付きました。つまり、左上のレイヤーに触れると、180度回転すると右下のレイヤーになります。ヒットテストの座標は、(0,0)が左上にある状態で期待どおりに印刷されます。回転するたびにレイヤーを再描画しますが、何らかの理由で、ホームボタンが下部にある「正しい」方法にマッピングされているようです。ローテーションを処理した後、関数呼び出しなどがありませんか?
乾杯、アダム