How to know that if the only visible area of a .png is touched in Xcode

后端 未结 4 1081
死守一世寂寞
死守一世寂寞 2020-11-30 14:44

I have imported a .png image into UIImageView in Xcode and what I want to make is when the image is touched, it will be hidden.

But my problem is that

4条回答
  •  再見小時候
    2020-11-30 14:50

    Combining Danny's and Sport's answer in Swift 4.2 as an extension.

    extension UIButton{
    
        open override func touchesBegan(_ touches: Set, with event: UIEvent?) {
            if let touch = event!.touches(for: self)?.first {
                let location = touch.location(in: self)
                if alphaFromPoint(point: location) == 0 {
                    self.cancelTracking(with: nil)
                    print("cancelled!")
                } else{
                    super.touchesBegan(touches, with: event)
                }
            }
        }
    
        func alphaFromPoint(point: CGPoint) -> CGFloat {
            var pixel: [UInt8] = [0, 0, 0, 0]
            let colorSpace = CGColorSpaceCreateDeviceRGB();
            let alphaInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
            let context = CGContext(data: &pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: alphaInfo.rawValue)
    
            context!.translateBy(x: -point.x, y: -point.y)
            self.layer.render(in: context!)
    
            let floatAlpha = CGFloat(pixel[3])
            return floatAlpha
        }
    }
    

提交回复
热议问题