Objective C将文本文件解析为CGPoint对象

时间:2013-02-27 23:04:55

标签: ios objective-c parsing core-animation

在我的应用中,我正在尝试加载来自foo.txt的制表符分隔的xyt值行,并使用CABasicAnimation为屏幕上的路径制作动画,我正试图让动画加速/减慢取决于foo.txt每行中的t值。

所以我想这个问题有两部分:如何加载文件并在iOS上轻松解析foo.txt的值,而不需要进行数百次fscanf调用,以及如何更改动画以编程方式加速?

以下是foo.txt的4个样本行,时间以毫秒为单位:

x      y      t
200    300    698
250    322    827
484    192    858
286    752    907

我几乎可以肯定必须有一种非常有效的方法来执行以下操作,但我的第一个想法是创建一个Point对象:

@interface Point : NSObject {
CGFloat x;
CGFloat y;
CGFloat t; }

并且,假设foo.txt中的值转移到SOMETHING,我可以将每个值转换为CGFloat并将其转移到pathMutable,我可以迭代以便稍后进行处理

// somehow load and parse foo.txt intelligently, place values in the SOMETHING object
// not sure how in objective-c besides reinventing the wheel with fscanf    

for (int i = 0; i<[SOMETHING count]; i++) {   
        Point * p = [SOMETHING objectAtIndex:i];  //pseudocode
        NSArray * tempVal = [NSArray arrayWithObjects: [NSValue valueWithCGPoint:CGPointMake(p.x,p.y)], nil];
        [pathMutable addObject:tempVal];  

    }

我当前的xy-only路径是:

UIBezierPath * path = [UIBezierPath bezierPath];
for (int i = 0; i<[pathMutable count]; i++) {
    NSValue * val = [pathMutable objectAtIndex:i];
    CGPoint p = [val CGPointValue];

    if (i == 0) {
        [path moveToPoint:p];
    }
    else {
        [path addLineToPoint:p];
    }
}

查看动画路径的文档,我注意到很多方法只需要x和y,当你开始动画时,你定义动画的总durationfromValue和{ {1}}。如何将我的个人时间值挂钩?

1 个答案:

答案 0 :(得分:0)

既然你问了两个问题,我只回答一个问题。解析这样一个结构良好的文件并不难,并且已经有很多关于解析的SO问题。至于第二部分,你想要的课程是CAKeyframeAnimation。这样可以很好地控制动画行为。