如何防止后退按钮消失?

时间:2019-12-13 17:19:24

标签: swift canvas clear back

我正在创建带有“ X”作为关闭/关闭按钮的涂鸦页面。 我还有一个“清除”按钮,可删除已制作的涂鸦。

我的问题是,当我按清除键时,即使X按钮消失了,如何防止这种情况发生?

这是我当前的应用。

enter image description here

这是我的Doodle课程,可让我在视图上绘画。

import UIKit

class DoodleView: UIView {

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

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

        lineColor = 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 = lineColor.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()
    }
}

这是控制视图控制器的类。

import UIKit

class DoodlePageViewController: UIViewController {


    @IBOutlet weak var doodleView: DoodleView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }


    @IBAction func clearDoodle(_ sender: Any) {
        doodleView.clearCanvas()
    }


    @IBAction func CloseDoodlePage(_ sender: Any) {
        dismiss(animated: true, completion: nil)
    }
}

2 个答案:

答案 0 :(得分:0)

没有真正看到如何声明按钮,我只能猜测,当您调用函数router.post('/api/user/login', (request, response) => { ... response.setHeader('Access-Control-Allow-Credentials', true); response.setHeader('Access-Control-Allow-Headers', 'Content-Type'); response.setHeader('Access-Control-Allow-Method', 'get', 'post', 'options'); response.setHeader('Access-Control-Allow-Origin', request.get('Origin')); response.setHeader('Access-Control-Max-Age','86400') response.setHeader('Access-Control-Expose-Headers', 'Access-Control-Allow-Origin'); ... 时,由于您设置了clearCanvas(),因此X按钮是Doodle视图中子层的一部分,因此它也消失了。

创建时,请确保X按钮位于涂鸦视图的顶部。

答案 1 :(得分:0)

调用self.layer.sublayers = nil

时,您将从视图中清除所有子视图

您要么需要将“ x”视图重新添加回层次结构中。我假设使用您的函数drawShapeLayer()是'x'??

应该是

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

    drawShapeLayer()
    self.setNeedsDisplay()
}