如何知道如果在XCode中触摸.png的唯一可见区域(快速或客观的C)

我已经在Xcode中导入了一个.png图像到UIImageView ,我想要做的是当图像被触摸,它将被隐藏。

但我的问题是,PNG图像包含透明的部分,当我触摸透明的部分,行动继续。 只有当图像的可见部分被触摸时,我才想要动作继续。 请告诉我如何解决这个问题。

我创build了一个自定义的UIButton子类,其行为与您所描述的完全相同,请看一下: https : //github.com/spagosx/iOS-Shaped-Button-Swift

它是用Swift编写的,但很容易转换为Objective-c。

方法是从触点获取像素数据并访问RGBA值,在这种情况下,我们读取A(alpha)并检查它是否高于我们的阈值。

看一下代码:

 func alphaFromPoint(point: CGPoint) -> CGFloat { var pixel: [UInt8] = [0, 0, 0, 0] let colorSpace = CGColorSpaceCreateDeviceRGB(); let alphaInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue) let context = CGBitmapContextCreate(&pixel, 1, 1, 8, 4, colorSpace, alphaInfo) CGContextTranslateCTM(context, -point.x, -point.y); self.layer.renderInContext(context) let floatAlpha = CGFloat(pixel[3]) return floatAlpha } 

你可以采取floatAlpha值,并将其与您可接受的alpha值进行比较:

  override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { return self.alphaFromPoint(point) >= 100 } 
  -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint touch_point = [touch locationInView:self.view]; if (![imageView pointInside:touch_point withEvent:event]) { NSLog(@"you inside imageview"); // write here what you want } }