一尘不染

如何知道是否在Xcode中触摸了.png的唯一可见区域

swift

我已经将.png图像导入UIImageView到Xcode中,我要制作的是当触摸该图像时将其隐藏。

但是我的问题是png图像包含透明部分,当我触摸透明部分时,操作继续进行。我希望仅在触摸图像的可见部分时才继续执行操作。该如何解决呢?

Swift或Objective-C


阅读 179

收藏
2020-07-07

共1个答案

一尘不染

我创建了一个自定义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值进行比较:

    override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
        return self.alphaFromPoint(point) >= 100
    }
2020-07-07