Вернитесь снова и получите другой вопрос с той же функцией, которую я написал ранее:
- (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,Для этой бомбы я реализовал CALayer -containsPoint:
, чтобы возвращать NO во время перетаскивания, чтобы позволить -hitTest: проходить через слой.По сути, этот тип тестирования попаданий работал хорошо с этими «сквозными» слоями, пока я использовал только контексты CGImageRef.Однако, как только я начал внедрять подслои для дополнительного воздействия на бомбу, -hitTest:
немедленно сломался.Было очевидно, что новые слои захватывали -hitTest:
.Я попытался реализовать ту же технику, перегрузив -containsPoint:
для этих слоев, но он все равно возвращал общий подкласс CALayer бомбы вместо того, чтобы проходить через него.
Есть ли лучший способ?