我正在尝试创建一个正在实时更新的简单折线图。某种地震仪。
我正在考虑UIBezierPath
,只需根据输入var在y轴上移动一个点,就可以创建一条在时间轴上移动的线。
问题是您必须“推”前面的点以释放新点的空间。(因此图形从左到右)
有人可以帮忙吗?
var myBezier = UIBezierPath()
myBezier.moveToPoint(CGPoint(x: 0, y: 0))
myBezier.addLineToPoint(CGPoint(x: 100, y: 0))
myBezier.addLineToPoint(CGPoint(x: 50, y: 100))
myBezier.closePath()
UIColor.blackColor().setStroke()
myBezier.stroke()
最佳答案
您是对的:您需要提出以上几点。您可以对图形的总宽度进行划分,以使其逐渐缩放,但保留所有数据,或者在每次添加新点时都删除第一个点。您将需要存储这些点的数组,并每次都重新创建路径。就像是:
//Given...
let graphWidth: CGFloat = 50
let graphHeight: CGFloat = 20
var values: [CGFloat] = [0, 4, 3, 2, 6]
//Here's how you make your curve...
var myBezier = UIBezierPath()
myBezier.moveToPoint(CGPoint(x: 0, y: values.first!))
for (index, value) in values.enumerated() {
let point = CGPoint(x: CGFloat(index)/CGFloat(values.count) * graphWidth, y: value/values.max()! * graphHeight)
myBezier.addLineToPoint(point)
}
UIColor.blackColor().setStroke()
myBezier.stroke()
//And here's how you'd add a point...
values.removeFirst() //do this if you want to scroll rather than squish
values.append(8)