繁体   English   中英

如何使用swift清除和重绘UIView(存在于视图控制器中)的内容?

[英]How to clear and redraw contents of a UIView (present inside a view controller) with swift?

我在一个View Controller中有一个UIView ,我在应用程序的要求下绘制几行。 经过一段时间后,我希望其中一些线条消失,其他一些线条出现在同一视图中。 我现在使用的方法是清除UIView并重新绘制我想要在更新视图中绘制的所有线条。

有人能告诉我什么是正确的方法吗? 我已经经历了各种听起来相似的问题,但它没有多大帮助。 直到现在我尝试过这样的事情: -

outletView.setNeedsDisplay()

let context = UIGraphicsGetCurrentContext()
context?.clear(outletView.frame)

这些似乎没有任何区别。

如果我再次调用viewDidLoad() ,因为所有行都会立即更新。 要绘制的新线条会出现,但应该消失的线条不会消失。 行的变量被正确更新,因为我有其他逻辑检查行变量的值在更新应该发生后工作正常。 唯一的问题是重绘部分。 事实上,如果我理解正确,问题只是清理旧的uiview内容。 如果正常清理,使用viewDidLoad重绘将显示正确的线条。

PS我知道明确调用viewDidLoad()不是一个好习惯。 希望找到解决此问题的方法,而无需再次调用viewDidLoad。

也许你可以在视图的不同层中绘制线条,删除包含需要消失的线条的图层,并为新线条创建一个新图层。 您可以在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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM