4

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

4

1 回答 1

2

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

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

- (CGPoint)locationInView:(UIView *)view

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

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
于 2012-12-18T13:08:29.950 回答