【发布时间】:2010-09-30 06:01:39
【问题描述】:
再次返回并使用我之前发布的相同功能提出不同的问题:
- (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 子类,而不是通过。
有没有更好的办法?
【问题讨论】:
标签: iphone ipad calayer hittest