在我的应用中,我正在尝试加载来自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,当你开始动画时,你定义动画的总duration
,fromValue
和{ {1}}。如何将我的个人时间值挂钩?
答案 0 :(得分:0)
既然你问了两个问题,我只回答一个问题。解析这样一个结构良好的文件并不难,并且已经有很多关于解析的SO问题。至于第二部分,你想要的课程是CAKeyframeAnimation。这样可以很好地控制动画行为。