swift - 如何防止后退按钮消失?
问题描述
我正在创建一个带有“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()
时,X 按钮是涂鸦视图中子层的一部分,因为您正在设置self.layer.sublayers = nil
因此它也消失了。
创建涂鸦视图时,请确保 X 按钮位于涂鸦视图的顶部。
推荐阅读
- angular - 如何将 css 应用于 ngx-formly 表单域?
- python - 在 django 中实现两个因素
- python - Keras自定义损失函数不打印张量的值
- oop - 如何在子模块 Fortran 中使用类型
- jquery-ui - jQuery UI 自动完成多字段搜索
- jenkins - 如何通过 Jenkins groovy 脚本删除 Jenkins 工作区中的特定文件
- sql-server - SQL Server Management Studio - 无法使用我知道应该可以使用的帐户登录
- c++ - Betfair API'ing Certificate login using C++ boost SSL Sockets
- laravel - 是否可以将 Laravel 策略应用于路由和自定义函数?
- javascript - 如何在 React Native 中的 setState 之前停止执行