再次返回并使用我之前发布的相同功能提出不同的问题:
- (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 子类,而不是通过。
有没有更好的办法?