在我的应用程序中,我试图从制表符分隔的 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.txt
get 中的值转移到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
和toValue
。如何将我的个人时间值挂钩?