【发布时间】:2018-08-21 16:35:24
【问题描述】:
我有一个UIView,我想在有新数据可用时更新它。这里有一些上下文:我有一个数据结构,只要用户点击“开始”按钮,它就会不断实时更新。数据结构随着时间的推移接收矢量数据,每隔几秒就会添加新的矢量数据。我试图将矢量数据绘制到UIView 上的方式是使用 CGPoints。我希望能够调用一个函数,给这个函数一组CGPoints,然后在UIView上画线,因为新数据被添加到数据结构中。最好的方法是什么?
这是我目前所拥有的,但没有一条线在 UIVIew 上绘制:
class VectorDraw: UIView {
var origin: CGPoint = .zero
var point2: CGPoint = .zero
override func draw(_ rect: CGRect) {
//Declaring context and its properties (i.e its width and color)
let context = UIGraphicsGetCurrentContext()
context?.setLineWidth(3.0)
context?.setStrokeColor(UIColor.purple.cgColor)
//Context directions, what to do with the context a move - addLine = stroke
context?.move(to: origin)
context?.addLine(to: point2)
//Actually draws line
context?.strokePath()
print("Line drawn from origin at x: ", origin.x, "\tat y: ", origin.y)
print("To terminal point at x: ", point2.x, "\tat y: ", point2.y)
}
}
我的想法是在点击开始按钮时更改 CGPoints,然后调用 vectorDraw.setNeedsLayout(),但 UIView 不会更新。唯一出现的行是当我在应用打开时将CGPoints 设置为不同的坐标。
【问题讨论】:
-
我按照你说的做了,但还是画不出来。覆盖绘制函数中有打印语句,这些语句甚至没有打印到控制台。这告诉我这个函数根本没有被调用。
-
@Daniel Lyon 我将您告诉我的内容复制到了我的 viewDidLoad 中,但没有看到任何新情况发生。我不确定这是否会有所帮助,但这里有一些关于我的应用程序的更多信息。它从 iphone 的传感器组件生成向量。生成新的 CGPoints 后,我更改
vectorDraw.origin和vectorDraw.point2。在下一行的同一个函数中,我做了你在上一条评论中对我提出的要求。我输入了vectorDraw.setNeedsLayout(),然后输入了vectorDraw.layoutIfNeeded()。当那不起作用时,我只尝试了vectorDraw.setNeedsDisplay()。仍然没有任何效果 -
我有一个计时器函数,但在
viewDidAppear或viewDidLoad.中都没有调用它我有一个调用startTimer()和stopTimer()函数的IBAction 函数。跨度> -
抱歉,我没有正确阅读。我确实将它移到了
ViewDidAppear,但这仍然不起作用。 -
那也没用。可能是什么问题?您是否需要其他任何其他信息来帮助我解决这个问题?