Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CALayer-hitTest:不考虑容器点:过载_Iphone_Ipad_Calayer_Hittest - Fatal编程技术网

Iphone CALayer-hitTest:不考虑容器点:过载

Iphone CALayer-hitTest:不考虑容器点:过载,iphone,ipad,calayer,hittest,Iphone,Ipad,Calayer,Hittest,再次返回,有一个与我之前发布的相同功能的不同问题: - (AIEnemyUnit *) hitTestForEnemyUnit:(CGPoint)where { CALayer * layer = [self hitTest:where]; while (layer) { if ([layer isKindOfClass:[AIEnemyUnit class]]) { return (AIEnemyUnit *)layer;

再次返回,有一个与我之前发布的相同功能的不同问题:

- (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:
来实现相同的技术,但它仍然返回bomb的通用CALayer子类,而不是通过

有更好的方法吗?

也许“何处”点与你的“自我”层无关。需要使用以下方法在图层坐标系之间转换这些点:

–转换点:fromLayer:或 –转换点:托莱耶:


请参阅:

我通过将所有内容放在第二个“根”层(称为“游戏层”)上解决了这个问题,该层的大小与原始层相同。然后在UIPangestureRecognitor期间,我将炸弹元素从“gameLayer”移动到我的UIView.layer中。然后,当我测试AIEnemyUnit时,我只在“游戏玩家”上运行hitTest


不,没有额外的层,确切的代码工作得很好,而且一些元素非常小,所以我知道“where”功能正常。
- UIView.layer --------- gameLayer 
           |                |
     dragObj(bomb)     gameElements
                            |
                           bomb