ios – 如何使用swift清除和重绘UIView(存在于视图控制器中)的内
发布时间:2020-12-14 17:47:49 所属栏目:百科 来源:网络整理
导读:我在一个视图控制器中有一个UIView,我在应用程序的要求下绘制几行.经过一段时间后,我希望其中一些线条消失,其他一些线条出现在同一视图中.我现在使用的方法是清除UIView并重新绘制我想要在更新视图中绘制的所有线条. 有人能告诉我什么是正确的方法吗?我已经
我在一个视图控制器中有一个UIView,我在应用程序的要求下绘制几行.经过一段时间后,我希望其中一些线条消失,其他一些线条出现在同一视图中.我现在使用的方法是清除UIView并重新绘制我想要在更新视图中绘制的所有线条.
有人能告诉我什么是正确的方法吗?我已经经历了各种听起来相似的问题,但它没有多大帮助.直到现在我尝试过这样的事情: – outletView.setNeedsDisplay() 和 let context = UIGraphicsGetCurrentContext() context?.clear(outletView.frame) 这些似乎没有任何区别. 如果我再次调用viewDidLoad(),因为所有行都会立即更新.要绘制的新线条会出现,但应该消失的线条不会消失.行的变量被正确更新,因为我有其他逻辑检查行变量的值在更新应该发生后工作正常.唯一的问题是重绘部分.事实上,如果我理解正确,问题只是清理旧的uiview内容.如果正常清理,使用viewDidLoad重绘将显示正确的线条. 附:我知道明确调用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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |