CALayer -hitTest: не соблюдая containsPoint: overload

Вернемся снова и у меня другой вопрос с той же функцией, которую я опубликовал ранее:

- (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 бомбы, а не проходил через него.

Есть ли способ лучше?

1
задан Phil M 30 September 2010 в 06:01
поделиться