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