gpt4 book ai didi

ios - 仅在屏蔽 View 内识别触摸事件

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:06 26 4
gpt4 key购买 nike

我正在通过掩码创建这个结构化的:

enter image description here

每个六边形都应该是可点击的。这是我使用的代码:

    // To create one masked hexagun

let hex = UIImage(named: "hexum")
let mask = CALayer()
mask.contents = hexum!.CGImage
mask.frame = CGRectMake(0, 0, hex!.size.width, hex!.size.height)

let img = UIImageView(image: UIImage(named: "img"))
img.layer.mask = mask
img.layer.masksToBounds = true

// Gesture Recognizer

let singleTap = UITapGestureRecognizer(target: self, action: "tapDetected")
singleTap.numberOfTapsRequired = 1
img.addGestureRecognizer(singleTap)
img.userInteractionEnabled = true

func tapDetected() {
print("Clicked!")
}

问题是点击区域比 mask 大,会造成一个区域互相重叠的不便。像这样:

Not what I want!

黄色边框显示可点击区域(实际上不可见)

我是初学者,这可能是一个小问题,但你能帮我解决吗?谢谢。

最佳答案

如果您想完美地做到这一点,请使用 UIGestureRecognizerDelegate 方法 gestureRecognizer(gesture, shouldReceiveTouch: touch) -> Bool。您需要将给定的手势识别器映射到特定的六边形,然后对该六边形的图像进行像素精确 HitTest 。后一部分是通过将 mask 图像渲染到图形上下文并找到与触摸位置对应的点处的像素来实现的。

但是,这可能有点矫枉过正。您可以通过将每个形状作为圆形而不是六边形进行 HitTest 来简化问题。圆形大致近似于六边形,因此它对用户来说几乎是一样的,并且避免了困惑的像素级 alpha 相等性。触摸输入的不准确会掩盖不准确的区域。

另一种选择是根据 CAShapeLayer 掩码修改您的 View 。 CAShapeLayer 包含一个 path 属性。 UIKit 中的贝塞尔曲线路径包括它们自己的路径包含点方法的滚动版本,因此您可以将其用于此目的。

关于ios - 仅在屏蔽 View 内识别触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com