无法让CALayer containsPoint工作

thi*_*ses 1 iphone calayer

我有一个包含图像的CALayers数组,可以由用户移动,我正在尝试使用containsPoint来检测它们是否被触摸 - 代码如下:

int num_objects = [pageImages count];

lastTouch = [touch locationInView:self];

CGRect objRect;
CALayer *objLayer;

for (int i = 0; i < num_objects; i++) {

    objLayer = [pageImages objectAtIndex:i];
    objRect = objLayer.bounds;

    NSLog(@"layerPos:%@, layerBounds:%@", NSStringFromCGPoint(objLayer.position), NSStringFromCGRect(objRect));
    NSLog(@"point:%@", NSStringFromCGPoint(lastTouch));

    if ([objLayer containsPoint:lastTouch] == TRUE) {
        NSLog(@"touched object %d", i);
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在输出的信息将触摸放在图层的边界内(我假设位置是图层的中心,我没有改变锚点.图层没有被旋转或类似的任何东西) ,但containsPoint:不返回true.任何人都可以看到我做错了什么,或建议一种不同/更好的方式来实现我想要的东西?

thi*_*ses 8

所以..发现问题 - 需要从超层坐标转换点才能使用图层containsPoint:

更换

if ([objLayer containsPoint:lastTouch] == TRUE) {
Run Code Online (Sandbox Code Playgroud)

if ([objLayer containsPoint:[objLayer convertPoint:lastTouch fromLayer:objLayer.superlayer]] == TRUE) {
Run Code Online (Sandbox Code Playgroud)

你可以自己搞乱坐标并使用CGRectContainsPoint :(见上面的评论),但这是一个更简单的解决方案,所以我第一次回答我自己的问题.对我来说很棒,耶!