我在 View Controller
中有一个 UIView
,我正在其中根据我的应用程序的要求绘制几行。在某个时间点之后,我希望其中一些线条消失,而其他一些出现在同一 View 中。我目前使用的方法是清除 UIView
并在更新的 View 中重新绘制我想绘制的所有线条。
谁能告诉我正确的方法是什么?我已经经历了各种听起来很相似的问题,但并没有太大帮助。到目前为止,我已经尝试过类似的事情:-
outletView.setNeedsDisplay()
和
let context = UIGraphicsGetCurrentContext()
context?.clear(outletView.frame)
这些似乎都没有任何区别。
如果我再次调用 viewDidLoad()
,因为现在所有行都已更新。要画的新线出现了,但本应消失的线并没有消失。行变量已正确更新,因为我拥有的其他逻辑检查行变量的值在更新应该发生后是否正常工作。唯一的问题是重绘部分。事实上,如果我理解正确的话,问题只是清理旧的 uiview 内容。如果正确进行清理,使用 viewDidLoad
重绘将显示绘制的正确线条。
附言我知道显式调用 viewDidLoad()
不是一个好习惯。希望能找到解决这个问题的方法,而不必再次调用viewDidLoad。
最佳答案
也许您可以在 View 的不同图层中绘制线条,删除包含需要消失的线条的图层并为新线条创建一个新图层。您可以在 layoutSubviews()
中绘制并在需要更新 View 时使用 self.setNeedsLayout()
。
删除:
guard let sublayers = yourView.layer.sublayers else { return }
for layer in sublayers {
layer.removeFromSuperlayer()
}
添加:
let linesPath = UIBezierPath()
let linesLayer = CAShapeLayer()
linesPath.move(to: CGPoint(x: 0, y: 0)
linesPath.addLine(to: CGPoint(x: 50, y: 100)
lineLayer.path = linesPath.cgPath
linesLayer.lineWidth = 1.0
linesLayer.strokeColor = UIColor.black
yourView.layer.addSublayer(linesLayer)
关于ios - 如何快速清除和重绘 UIView 的内容(存在于 View Controller 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41478966/