当用户在屏幕上拖动手指时,我使用以下代码绘制线条,当用户触摸时我从头到尾画一条线。
我已经在数组中存储了所有bezier路径,现在我想要实现的是如果用户在屏幕上绘制线条,它不应该与任何其他线路重叠。为此我使用了contains
方法,但如果它在bezier路径中则只给出点。问题是我的线宽是20,它没有检测到线宽覆盖的点线。我可以检测到1交叉处的红色而不是绿色的第二个,因为它实际上与线路相似似乎彼此重叠而不是bezier路径点。有没有办法找到确切的重叠。
func drawLine(from : CGPoint , to : CGPoint)
{
autoreleasepool {
drawImage.image = UIImage(named:"abc")
UIGraphicsBeginImageContextWithOptions(drawImage.bounds.size, false, 0)
UIColor.init(colorLiteralRed: 181/255, green: 82/255, blue: 26/255, alpha: 0.60).set()
drawImage.image?.draw(in: view.bounds)
let context = UIGraphicsGetCurrentContext()
lassoBezier = UIBezierPath()
lassoBezier.move(to: from)
lassoBezier.addLine(to: to)
lassoBezier.lineWidth = 20
lassoBezier.stroke()
context?.addPath(lassoBezier.cgPath)
drawImage.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
}
**lassoBezier.contains(toPoint)**
我用它来检查重叠但有时它不起作用。有时它表示重叠,而不是一段时间它说不重叠但重叠。
func checkIfOverlapp(pointsTo:CGPoint) {
for bezier in arrRecentBezierPaths
{
let strokedPath = bezier.cgPath.copy(strokingWithWidth: K_Tap_Width + 10 , lineCap: .square , lineJoin: .round, miterLimit: 1, transform: .identity)
let pointIsNearPath = strokedPath.contains(pointsTo)
if pointIsNearPath == true
{
isOverlap = true
}
}
}
任何帮助?