hel*_*gma 4 iphone xcode uiview ios swift
我有一个UIView内部View Controller,我正在绘制我的应用程序所需的几行.经过一段时间后,我希望其中一些线条消失,其他一些线条出现在同一视图中.我现在使用的方法是我正在清除UIView并重新绘制我想要在更新视图中绘制的所有线条.
有人能告诉我什么是正确的方法吗?我已经经历了各种听起来相似的问题,但它没有多大帮助.直到现在我尝试过这样的事情: -
outletView.setNeedsDisplay()
Run Code Online (Sandbox Code Playgroud)
和
let context = UIGraphicsGetCurrentContext()
context?.clear(outletView.frame)
Run Code Online (Sandbox Code Playgroud)
这些似乎没有任何区别.
如果我viewDidLoad()再次打电话,因为所有线路现在都已更新.要绘制的新线条会出现,但应该消失的线条不会消失.行的变量被正确更新,因为我有其他逻辑检查行变量的值在更新应该发生后工作正常.唯一的问题是重绘部分.事实上,如果我理解正确,问题只是清理旧的uiview内容.如果清洁正常进行,重绘viewDidLoad将显示正确的线条绘制.
PS我知道viewDidLoad()明确打电话不是一个好习惯.希望找到解决此问题的方法,而无需再次调用viewDidLoad.
也许你可以在视图的不同层中绘制线条,删除包含需要消失的线条的图层,并为新线条创建一个新图层.您可以在需要更新视图时进行绘制layoutSubviews()和使用self.setNeedsLayout().
去掉:
guard let sublayers = yourView.layer.sublayers else { return }
for layer in sublayers {
layer.removeFromSuperlayer()
}
Run Code Online (Sandbox Code Playgroud)
加:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4284 次 |
| 最近记录: |