我有一个UIView
,我想在有新数据可用时进行更新。这里有一些上下文:我有一个数据结构,只要用户单击“开始”按钮,它就会实时实时更新。数据结构随时间接收矢量数据,并且每几秒钟添加一次新的矢量数据。我试图将矢量数据绘制到UIView
上的方法是使用CGPoints。而且,我希望能够调用一个函数,为该函数提供一组CGPoint
,并在向新数据添加到数据结构的同时在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)
}
}
我的想法是仅在按下开始按钮时更改CGPoint,然后调用vectorDraw.setNeedsLayout()
,但UIView不会更新。出现的唯一行是当应用打开时我将CGPoints
设置为不同的坐标。
答案 0 :(得分:0)
是否有其他事情向VectorDraw
提供坐标,并且您希望VectorDraw
在每次坐标供应商更新时重绘?您必须将新坐标重新提供给VectorDraw
,然后在setNeedsDisplay()
上调用VectorDraw
函数以重新渲染视图
答案 1 :(得分:0)
所以我知道了。我遇到的问题是我没有更新实际视图,而是要绘制线条时使用的类视图实例。
这是一个代码示例:我有一个变量var vectorDraw = VectorDraw()
,并且我试图像这样vectorDraw.setNeedsDisplay()
更新视图。问题在于这不是实际的视图。它只是VectorDraw的对象变量。我发现的解决方案(通过查看此示例获得了https://github.com/fujianjin6471/DemosForBlog/tree/master/SetNeedsDisplay)是您需要将实际的视图从主情节提要板连接到ViewController,我完全以某种方式错过了它。如果您将视图从控件拖到ViewController,则会得到一个类似@IBOutlet var vectorDrawView: VectorDraw!
的变量。这是您需要用来调用setNeedsDisplay()
的变量,您的视图将更新!