我想要检测图像各个部分的触摸。例如,我有一个身体的图像,胸部,头部,腿部有不同的部分。因此,如果用户点击手,只有手部分应该只接收触摸而不是图像中的透明区域。这些部分共享一定量的相同帧
答案 0 :(得分:1)
这段代码,我从另一个stackoverflow用户那里为我调整,可以获得触摸点的alpha值:
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);
//values doubled because image is retina
float width = image.size.width*2.0;
float height = image.size.height*2.0;
float x = point.x*2.0;
float y = point.y*2.0;
if (x < 0 ||
y < 0 ||
x > width ||
y > height)
return nil;
int pixelInfo = ((width * y) + x ) * 4; // for png
UInt8 alpha = data[pixelInfo + 3];
CFRelease(pixelData);
您可以使用它来检查用户是否在透明区域中单击。
至于检测不同区域(手,腿,头等),我建议为每个部分定义一些近似矩形,并用它来检查触点是否在其中任何一个内部:
CGRectContainsPoint(rect, point);
答案 1 :(得分:0)
我通过使用相同的SVG图像来计算它,并且检查触摸位置在绘制的路径内。使用pocketSVG读取SVG图像 这是相同的链接