画线的最佳方法,该线能够拖放,检测用户触摸事件,延长长度和更多自定义功能

问题描述

正如我在标题中提到的,要求是绘制多条可以播放的线条,这有点类似于photoshop中的钢笔工具,具有一些新的自定义功能。而且它们必须能够存储

当前,我正在使用UIBezierPath并设法添加了一些功能,例如可存储的多行,可伸缩...

但是现在我在如何拖放方面遇到了麻烦,我做了一些研究和类似的尝试,除非我必须添加很多玩cgPoint之类的东西,否则这是不可能的,这将使它变得更难被存储,我什至不知道它是否行得通。

即使具有下一个功能,也可以通过握住线的尖端来延伸线并拉伸,这也需要大量的工作(我计划删除当前线,并根据其2个尖端的位置重新绘制)。

所以我想知道是否有更好的方法来处理像类这样的方法,该类具有与我的相似或更易于创建的功能

这是我当前的代码(我打算使用cgpoint保存多条路径,并且我想通过按住touchPoint来扩展该行

 override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
        print("came here")
        let touch = event?.alltouches?.first
        var startPoint:CGPoint?
        var endPoint:CGPoint?
        var dotStartPointX:CGPoint?
        var dotStartPointY:CGPoint?
        var dotEndPointX:CGPoint?
        var dotEndPointY:CGPoint?
        if let originalPoint = touch?.location(in: self) {
            startPoint = CGPoint(x: originalPoint.x - 70,y: originalPoint.y)
            endPoint = CGPoint(x: originalPoint.x + 70,y: originalPoint.y)
            dotStartPointX = CGPoint(x: startPoint!.x,y: startPoint!.y - dotLinesize)
            dotStartPointY = CGPoint(x: startPoint!.x,y: startPoint!.y + dotLinesize)
            dotEndPointX = CGPoint(x: endPoint!.x,y: endPoint!.y - dotLinesize)
            dotEndPointY = CGPoint(x: endPoint!.x,y: endPoint!.y + dotLinesize)
            
        }
        drawLineFromPoint(start: startPoint!,toPoint: endPoint!,ofColor: fillColor,inView: self)
        drawLineFromPoint(start: dotStartPointX!,toPoint: dotStartPointY!,inView: self)
        drawLineFromPoint(start: dotEndPointX!,toPoint: dotEndPointY!,inView: self)
        drawCircle(point: startPoint!)
        drawCircle(point: endPoint!)
    }
    func drawCircle(point: CGPoint) {
        let radius = dotLinesize + 5
        let circlePath = UIBezierPath(arcCenter: point,radius: radius,startAngle: CGFloat(0),endAngle: CGFloat(Double.pi * 2.0),clockwise: true)
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = circlePath.cgPath
        shapeLayer.fillColor = fillColor.cgColor
        shapeLayer.strokeColor = fillColor.cgColor
        shapeLayer.opacity = 0.5
        self.layer.addSublayer(shapeLayer)
    }
    func drawLineFromPoint(start : CGPoint,toPoint end:CGPoint,ofColor lineColor: UIColor,inView view:UIView) {
        
        //design the path
        var path = UIBezierPath()
        path.move(to: start)
        path.addLine(to: end)
        
        //design path in layerr
        var shapeLayer = CAShapeLayer()
        shapeLayer.path = path.cgPath
        shapeLayer.strokeColor = lineColor.cgColor
        shapeLayer.linewidth = 3.0
        
        view.layer.addSublayer(shapeLayer)
    }

我明白了(无论用户在哪里点击,在两个提示处画一条带有2个点的线:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)