もう一度戻って、前に投稿したのと同じ機能で別の質問をしてください。
- (AIEnemyUnit *) hitTestForEnemyUnit:(CGPoint)where {
CALayer * layer = [self hitTest:where];
while (layer) {
if ([layer isKindOfClass:[AIEnemyUnit class]]) {
return (AIEnemyUnit *)layer;
} else {
layer = layer.superlayer;
}
}
return nil;
}
AIEnemyUnit の真上に表示されるように、ユーザーが敵の上にドラッグする爆弾があります。この爆弾では-containsPoint:
、 -hitTest: がレイヤーを通過できるように、ドラッグ中に NO を返すように CALayer を実装しました。基本的に、このタイプのヒット テストは、CGImageRef コンテキストのみを使用している限り、これらの「パススルー」レイヤーで正常に機能していました。しかし、爆弾に追加の効果を与えるためにサブレイヤーの実装を開始すると、 -hitTest:
すぐに壊れました。明らかに、新しいレイヤーが をキャプチャしていました-hitTest:
。これらのレイヤーをオーバーロードして同じ手法を実装しようとしました-containsPoint:
が、通過するのではなく、爆弾のジェネリック CALayer サブクラスを返していました。
より良い方法はありますか?