我有一个包含图像的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。任何人都可以看到我做错了什么,或建议一种不同/更好的方式来实现我想要的东西吗?
答案 0 :(得分:8)
所以..发现问题 - 需要从超层坐标转换点才能使用图层containsPoint:
替换
if ([objLayer containsPoint:lastTouch] == TRUE) {
与
if ([objLayer containsPoint:[objLayer convertPoint:lastTouch fromLayer:objLayer.superlayer]] == TRUE) {
你可以自己搞乱坐标并使用CGRectContainsPoint :(见上面的评论),但这是一个更简单的解决方案,所以我第一次回答我自己的问题。对我而言,大谢!,