私のアプリでは、タブで区切られた xyt 値の行を読み込んで、foo.txt
を使用して画面上のパスをアニメーション化CABasicAnimation
しようとしていますfoo.txt
。
したがって、この質問には2つの部分があると思いますfoo.txt
.iOSで何百回ものfscanf呼び出しを行わずにファイルをロードして値を簡単に解析するにはどうすればよいですか?プログラムでアニメーションの速度を変更するにはどうすればよいですか?
の 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のみのパスは次のとおりです。
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
。個々の時間値をこれにフックするにはどうすればよいですか?