我想用Swift以编程方式创建Hexagon UIButtons。我有六边形图像,你可以看到绿色图片。边缘是透明的,所以你不应该点击那些区域。通过使用默认的UIButton和#34; custom"选项,这些区域仍然可以点击。
然后在UIScrollView上添加如下图片。主要的是,当用户点击一个按钮时,我应该得到正确的按钮ID。
那么,你能帮我创建六边形UIButton或可点击的图像视图吗?感谢。
答案 0 :(得分:2)
您可以扩展UIButton类,以便不检测图像中透明的部分的触摸事件。
我们在触摸点检测图像的alpha分量。
如果alpha分量为0,则命中测试将失败 如果alpha不为零,则命中测试将成功。
如果触摸超出按钮界限,命中测试也将失败。
extension UIButton {
func getColourFromPoint(point:CGPoint) -> UIColor {
let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
var pixelData:[UInt8] = [0, 0, 0, 0]
let context = CGBitmapContextCreate(&pixelData, 1, 1, 8, 4, colorSpace, bitmapInfo)
CGContextTranslateCTM(context, -point.x, -point.y);
self.layer.renderInContext(context)
var red:CGFloat = CGFloat(pixelData[0])/CGFloat(255.0)
var green:CGFloat = CGFloat(pixelData[1])/CGFloat(255.0)
var blue:CGFloat = CGFloat(pixelData[2])/CGFloat(255.0)
var alpha:CGFloat = CGFloat(pixelData[3])/CGFloat(255.0)
var color:UIColor = UIColor(red: red, green: green, blue: blue, alpha: alpha)
return color
}
public override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
if (!CGRectContainsPoint(self.bounds, point)) {
return nil
}
else {
let color : UIColor = self.getColourFromPoint(point)
let alpha = CGColorGetAlpha(color.CGColor);
if alpha <= 0.0 {
return nil
}
return self
}
}
}