ios - 如何快速清除和重绘 UIView 的内容(存在于 View Controller 中)?

标签 ios iphone swift xcode uiview

我在 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/

相关文章:

ios进度条高度在ios 7和ios 6之间不同

ios - 如何在glkview中使用dispatch_async?

ios - 如果今天是本月的最后一天,如何添加日期。?

swift - 使用 `**` 作为求幂运算符在 swift 中使用 `-` 运算符不正确

ios - Swift FIRMessaging 推送通知 token 重置

ios - 如何在 Objective C 中创建 UITextField 的自定义委托(delegate)

ios - Xcode 无法使用 Cocoapods 找到引用的 Storyboard

iphone - 如何禁用 UITableview 单元格的 UserInteraction 但不禁用单元格上的自定义按钮

iPhone - 减少文件管理器访问

ios - 按值将对象数组映射到新的数组数组中