1

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

4

1 に答える 1

0

2つ質問されているので、1つだけお答えします。そのような適切に構造化されたファイルを解析することは難しくありません。また、解析に関する SO の質問はすでにたくさんあります。2 番目の部分については、必要なクラスはCAKeyframeAnimationです。これにより、アニメーションの動作を細かく制御できます。

于 2013-02-27T23:44:16.980 に答える