Вернемся снова и у вас есть другой вопрос с той же функцией, которую я опубликовал ранее:
- (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 бомбы, а не проходил через него.
Есть ли способ лучше?