2016-07-22 2 views
1

Я пытаюсь создать простой линейный график, который обновляется в реальном времени. Какой-то вид сейсмограф.анимация UIBezier, чтобы получить живую кривую?

Я думал о UIBezierPath, только перемещая точку по оси y в соответствии с вводом var, я могу создать линию, движущуюся по оси времени.

Проблемы заключается в том, что вы должны «PUSH» предыдущие пункты, чтобы освободить место для новых. (Так что график идет слева направо)

Может кто-нибудь помочь с каким-то направлением?

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() 

ответ

1

Вы правы: вам нужно нажать предыдущие точки. Либо разделите общую ширину графика, чтобы он становился все более масштабированным, но сохранял все данные или удалял первую точку каждый раз, когда вы добавляете новую в конец. Вам нужно будет хранить массив этих точек и каждый раз воссоздавать путь. Что-то вроде:

//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) 
+0

большое спасибо. Можете ли вы рассказать о «добавлении точки к кривой»? как вы добавляете точку (а не строку?) – Curnelious

+0

@Curnelious: я редактировал в вашем исходном коде UIBezierPath, чтобы вы могли видеть, как этот новый массив 'values' переводится в ваш старый' UIBezierPath'. Это очень похоже на то, что вы делали. – andyvn22

+0

спасибо, что отлично, но когда я думаю об этом, это будет очень мерцающий график, который будет рисоваться каждый раз, как старый осциллограф. Я искал способ просто создать гладкую линейную кривую вживую, и я не мог найти ничего простого. Спасибо, в любом случае. – Curnelious

Смежные вопросы