如何检测bezier路径线厚度是否接触另一个bezier路径线?

时间:2017-01-18 06:12:35

标签: ios swift3 intersection uibezierpath

当用户在屏幕上拖动手指时,我使用以下代码绘制线条,当用户触摸时我从头到尾画一条线。

我已经在数组中存储了所有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)**

enter image description here

我用它来检查重叠但有时它不起作用。有时它表示重叠,而不是一段时间它说不重叠但重叠。

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
        }
    }
}

任何帮助?

0 个答案:

没有答案