私のアプリでは、タブで区切られた 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.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のみのパスは次のとおりです。
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。個々の時間値をこれにフックするにはどうすればよいですか?