2012-12-18 107 views
3

我设法使用类似的方法掩盖视图:How to mask UIViews in iOS 但现在我需要检测在这个蒙面视图中的触摸。 Gesture recognisers和按钮会在bounds区域检测到触摸,基本上忽略掩码。所以我认为如果我可以从我的面具图像中获得CGPath,那么处理触摸会很容易。有关如何从掩模图像获取CGPath的建议?我可以通过alpha通道从图像获取CGPath吗?

回答

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; 
  • 基于该值,则返回YES或者是否
  • +0

    非常感谢,现在我会坚持这种方法,但是我仍然很好奇,如果我可以从CGImageRef获得CGPath,所以我希望你不介意我不把你的答案标记为还没有接受我们把它投票。 – dariaa

    +0

    我不认为你可以开箱,除非你使用某种边缘提取算法。即使如此,我怀疑你的CGPath只是一个近似值。 – mprivat

    相关问题