Я новичок в кодировании и пытаюсь создать на экране область, которую можно подписать пальцем. Я сделал коробку, но изо всех сил пытаюсь ее очистить. Я сделал кнопку, подключенную к функции, чтобы очистить путь, но я не могу понять, как безопасно развернуть информацию без сбоев.

import UIKit

class canvasView: UIView {

    var lineColour:UIColor!
    var lineWidth:CGFloat!
    var path:UIBezierPath!
    var touchPoint:CGPoint!
    var startingPoint:CGPoint!


    override func layoutSubviews() {
        self.clipsToBounds = true
        self.isMultipleTouchEnabled = false

        lineColour = UIColor.white
        lineWidth = 10
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        startingPoint = (touch?.location(in: self))!
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        touchPoint = touch?.location(in: self)

        path = UIBezierPath()
        path.move(to: startingPoint)
        path.addLine(to: touchPoint)
        startingPoint = touchPoint

        drawShapelayer()
    }
    func drawShapelayer(){
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = path.cgPath
        shapeLayer.strokeColor = lineColour.cgColor
        shapeLayer.lineWidth = lineWidth
        shapeLayer.fillColor = UIColor.clear.cgColor
        self.layer.addSublayer(shapeLayer)
        self.setNeedsDisplay()
    }

    func clearCanvas() {
        path.removeAllPoints()
        self.layer.sublayers = nil
        self.setNeedsDisplay()
    }

Затем я получаю сообщение об ошибке в моей последней функции после

path.removeAllPoints()

Как лучше всего его развернуть, чтобы он не разбился?

Спасибо за ваше терпение

-2
James Bethell 21 Ноя 2018 в 03:51

1 ответ

Лучший ответ

Проблема в том, что если пользователь нажимает кнопку, чтобы очистить холст до , когда он что-либо рисует, то возникает ошибка, поскольку path присваивается значение только в touchesMoved().

Вы можете захотеть изменить

var path:UIBezierPath!

К

var path:UIBezierPath?

Хотя это может показаться утомительным, поскольку вам нужно добавлять вопросительные знаки везде, где вы пытаетесь получить доступ к методу или свойству path, это намного безопаснее, и код в вашем примере не выйдет из строя.

P.S. Ознакомьтесь с этим ответом. Он предоставляет много информации об использовании опций.

0
Xcoder 21 Ноя 2018 в 01:20