我已经将.png图像导入UIImageView到Xcode中,我要制作的是当触摸该图像时将其隐藏。
UIImageView
但是我的问题是png图像包含透明部分,当我触摸透明部分时,操作继续进行。我希望仅在触摸图像的可见部分时才继续执行操作。该如何解决呢?
Swift或Objective-C
我创建了一个自定义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 colourSpace = CGColorSpaceCreateDeviceRGB() let alphaInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue) let context = CGContext(data: &pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colourSpace, bitmapInfo: alphaInfo.rawValue) context?.translateBy(x: -point.x, y: -point.y) self.layer.render(in: context!) let floatAlpha = CGFloat(pixel[3]) return floatAlpha }
然后,您可以将该floatAlpha值与可接受的alpha值进行比较:
floatAlpha
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool { return self.alphaFromPoint(point) >= 100 }