无法让CALayer containsPoint工作

时间:2011-07-07 12:41:01

标签: 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;
    }
}

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

1 个答案:

答案 0 :(得分:8)

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

替换

if ([objLayer containsPoint:lastTouch] == TRUE) {

if ([objLayer containsPoint:[objLayer convertPoint:lastTouch fromLayer:objLayer.superlayer]] == TRUE) {

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