gpt4 book ai didi

swift - CAShapeLayer lineWidth 上未检测到点击事件?

转载 作者:行者123 更新时间:2023-11-30 10:39:50 25 4
gpt4 key购买 nike

我使用贝塞尔路径创建了一个圆,并创建了点击事件来检查图层是否已被点击,它工作正常,直到我增加 CAShapeLayer 的 lineWidth 的大小。通过点击线宽,有时检测到,有时检测不到。

我在 stackoverflow 上搜索了我遇到的问题,但无法解决它。问题仍然相同,我无法检测到我的图层(lineWidth 区域)上的某些点击。

我只想检测 CAShapeLayer 的 lineWidth 上的点击,我一直在到处搜索但找不到合适的解决方案。大多数答案都是用过时的语言写的。如果有人能举个例子来解决我的问题,我将非常感激。 swift 4。

https://i.imgur.com/194Aljn.png


let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapDetected(tapRecognizer:)))
self.addGestureRecognizer(tapRecognizer)

@objc public func tapDetected(tapRecognizer:UITapGestureRecognizer) {
let tapLocation:CGPoint = tapRecognizer.location(in: self)
self.hitTest(tapLocation: CGPoint(x: tapLocation.x, y: tapLocation.y))
}


private func hitTest(tapLocation:CGPoint) {
if layer.path?.contains(tapLocation) == true {
print("Do something")
} else {
print("Nothing Found")
}
}




最佳答案

问题在于线条笔画实际上并不是路径的一部分 - 它只是其显示的一部分。您可以使用一些 CGPath 方法将路径转换为包含笔画的更大路径:

let pathWithLineStroke = UIBezierPath.init(cgPath: path.cgPath.copy(strokingWithWidth: 2.0, lineCap: CGLineCap.butt, lineJoin: .bevel, miterLimit: 1.0));

当然,将 widthlineCaplineJoinmiterLimit 替换为您的实际值。

我建议您在代码中尽早执行此操作,然后只绘制已内置笔划的路径,而不是在 CALayer 上设置这些属性。

希望有帮助。祝你好运。

关于swift - CAShapeLayer lineWidth 上未检测到点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094541/

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