我在UIView
内View Controller
,其中我的应用程序需要绘制几行。经过一段时间后,我希望其中一些线条消失,其他一些线条出现在同一视图中。我现在使用的方法是清除UIView
并重新绘制我想要在更新视图中绘制的所有行。
有人可以告诉我,正确的方法是什么?我已经经历了各种听起来相似的问题,但它没有多大帮助。直到现在我已经尝试过这样的事情: -
outletView.setNeedsDisplay()
和
let context = UIGraphicsGetCurrentContext()
context?.clear(outletView.frame)
这些似乎没有任何区别。
如果我再次拨打viewDidLoad()
,因为现在所有行都已更新。要绘制的新线条出现了,但应该消失的线条不会消失。行的变量正确更新,因为我有其他逻辑检查行变量的值在更新应该发生后工作正常。唯一的问题是重绘部分。事实上,如果我理解正确,问题只是清理旧的uiview内容。如果清洁正常进行,使用viewDidLoad
重绘将显示正确的线条。
P.S。我知道明确地调用viewDidLoad()
并不是一个好习惯。希望找到解决此问题的方法,而无需再次调用viewDidLoad。
答案 0 :(得分:5)
也许您可以在视图的不同图层中绘制线条,删除包含需要消失的线条的图层,并为新线条创建新图层。您需要在layoutSubviews()
中进行绘制,并在需要更新视图时使用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)