在iOS中使用触摸绘制水平或垂直线
我正在进行一个我想要的项目,如果用户触摸在水平方向上移动,则水平线应该绘制,用户触摸在垂直方向上移动,然后垂直线应该绘制。 请使用Swift建议一些解决方案。 我在下面试过。 但这是免费的。
override func touchesBegan(_ touches: Set, with event: UIEvent?) { super.touchesBegan(touches, with: event) let touch: AnyObject? = touches.first let lastPoint = touch!.previousLocation(in: holderView) path.move(to: CGPoint(x: lastPoint.x, y: lastPoint.y)) } override func touchesMoved(_ touches: Set, with event: UIEvent?) { super.touchesMoved(touches, with: event) let touch: AnyObject? = touches.first let currentPoint = touch!.location(in: holderView) path.addLine(to: CGPoint(x: currentPoint.x, y: currentPoint.y)) //Design path in layer let shapeLayer = CAShapeLayer() shapeLayer.path = path.cgPath shapeLayer.strokeColor = UIColor.orange.cgColor shapeLayer.lineWidth = 20.0 holderView.layer.addSublayer(shapeLayer) } override func touchesEnded(_ touches: Set, with event: UIEvent?) { super.touchesEnded(touches, with: event) path=UIBezierPath() }
尝试这个。
class DrawingView: UIView { var path = UIBezierPath() var initialLocation = CGPoint.zero var finalLocation = CGPoint.zero var shapeLayer = CAShapeLayer() override func awakeFromNib() { super.awakeFromNib() setupView() } override init(frame: CGRect) { super.init(frame: frame) setupView() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func setupView(){ self.layer.addSublayer(shapeLayer) self.shapeLayer.lineWidth = 20 self.shapeLayer.strokeColor = UIColor.blue.cgColor } override func touchesBegan(_ touches: Set, with event: UIEvent?) { super.touchesBegan(touches, with: event) if let location = touches.first?.location(in: self){ initialLocation = location } } override func touchesMoved(_ touches: Set , with event: UIEvent?) { super.touchesMoved(touches, with: event) if let location = touches.first?.location(in: self){ let dx = location.x - initialLocation.x let dy = location.y - initialLocation.y finalLocation = abs(dx) > abs(dy) ? CGPoint(x: location.x, y: initialLocation.y) : CGPoint(x: initialLocation.x, y: location.y) path.removeAllPoints() path.move(to: initialLocation) path.addLine(to: finalLocation) shapeLayer.path = path.cgPath } } }