1

在我的应用程序中,我试图从制表符分隔的 xyt 值的行中加载foo.txt并使用动画在屏幕上的路径,CABasicAnimation并且我试图让动画根据foo.txt.

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

以下是 4 行示例foo.txt,时间以毫秒为单位:

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.txtget 中的值转移到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,当你开始你的动画时,你定义duration了动画的总和,fromValuetoValue。如何将我的个人时间值挂钩?

4

1 回答 1

0

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

于 2013-02-27T23:44:16.980 回答