如何防止后退按钮消失?

问题描述 投票:1回答:2

我正在创建一个带有“ 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)
    }
}
swift canvas clear back
2个回答
0
投票

[没有真正看到如何声明按钮,我只能猜测,当您调用函数clearCanvas()时,由于您设置了self.layer.sublayers = nil,因此X按钮是Doodle视图中子图层的一部分,因此也消失了。

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


0
投票

当您调用self.layer.sublayers = nil时,正在从视图中清除所有子视图

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

应该是

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

    drawShapeLayer()
    self.setNeedsDisplay()
}
© www.soinside.com 2019 - 2024. All rights reserved.