我有一个包含图像的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.任何人都可以看到我做错了什么,或建议一种不同/更好的方式来实现我想要的东西?
所以..发现问题 - 需要从超层坐标转换点才能使用图层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 :(见上面的评论),但这是一个更简单的解决方案,所以我第一次回答我自己的问题.对我来说很棒,耶!
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |