我正在创建一个带有“ X”作为关闭/关闭按钮的涂鸦页面。我还有一个“清除”按钮,可删除已制作的涂鸦。
我的问题是,当我按清除键时,即使X按钮消失了,如何防止这种情况发生?
这是我当前的应用程序。
这是我的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)
}
}
[没有真正看到如何声明按钮,我只能猜测,当您调用函数clearCanvas()
时,由于您设置了self.layer.sublayers = nil
,因此X按钮是Doodle视图中子图层的一部分,因此也消失了。
创建时,请确保X按钮位于涂鸦视图的顶部。
当您调用self.layer.sublayers = nil
时,正在从视图中清除所有子视图
您要么需要将'x'视图重新添加回层次结构。我假设使用您的函数drawShapeLayer()是'x'??
应该是
func clearCanvas() {
path.removeAllPoints()
self.layer.sublayers = nil
drawShapeLayer()
self.setNeedsDisplay()
}