我可以通过Alpha通道从图像中获取CGPath吗?

时间:2012-12-18 12:44:46

标签: iphone ios core-graphics calayer

我设法使用与此类似的方法来屏蔽视图:How to mask UIViews in iOS 但现在我需要检测这个蒙版视图中的触摸。 Gesture recognisers和按钮会检测到bounds区域中的触摸,基本上忽略了掩码。所以我想如果我可以从我的蒙版图像中获得CGPath,那么处理触摸会很容易。有关如何从掩码图像中获取CGPath的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您可以设置UIGestureRecognizer的委托并覆盖- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

1。在识别器的视图中获取触摸的位置

- (CGPoint)locationInView:(UIView *)view

2。找出该位置图像的Alpha通道。为此,使用此代码(为了提高效率,您可以提前重新计算透明值,对于整个图像,并将它们存储到缓冲区中,这样您就不必每次都复制alpha缓冲区。我在这里保持简单并为单个像素做了。如果你想看看如何一次完成整个图像,请看post

unsigned char pixelData[1] = {0};
CGContextRef context = CGBitmapContextCreate(pixelData, 1, 1, 8, 1, NULL, kCGImageAlphaOnly);
UIGraphicsPushContext(context);
[im drawAtPoint:CGPointMake(-point.x, -point.y)];
UIGraphicsPopContext();
CGContextRelease(context);
CGFloat alphaChannel = pixel[0]/255.0;
BOOL transparent = alphaChannel < 0.01;
  1. 根据该值,返回YES或NO