1

xy座標を保持する配列を持つ配列「coordList」を取得しました。
これらの座標に沿ってビューを移動したい。

これを行うためのより良い方法があれば、その方法を教えてください。

私のやり方には大きな問題があります。最後のアニメーションに直接ジャンプします。理由はわかっていますが、修正方法はわかりません。

私のコード:

count = 1;
for(NSArray *array in coordList) {  
    [UIView animteWithDuration:1 animations:^(void){
        CGRect r = [[self.subviews lastObject] frame];  
        r.origin.x = 103*[coordList[count][0]integerValue];  
        r.origin.y = 103*[coordList[count][1]integerValue];  
        [[self.subviews lastObject] setFrame:r];  
        count++;
        [UIView commitAnimations];
    }
}

私の悪い英語でごめんなさい:)

4

2 に答える 2

0

これは の理想的なアプリケーションですCAKeyFrameAnimation。また、一連のアニメーションを実行するのではなく、パスを定義してから、そのパスを「位置」として指定して、1 つのアニメーションを実行します。

UIView *viewToAnimate = [self.subviews lastObject];

// create UIBezierPath for your `coordList` array

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(103*[coordList[0][0]integerValue], 103*[coordList[0][1]integerValue])];
for (NSInteger i = 1; i < [coordList count]; i++)
{
    [path moveToPoint:CGPointMake(103*[coordList[i][0]integerValue], 103*[coordList[i][1]integerValue])];
}

// now create animation

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
animation.path = [path CGPath];
animation.duration = 2.0;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
[viewToAnimate.layer addAnimation:animation forKey:@"position"];

これを機能させるには、QuartzCore フレームワークをプロジェクトに追加し、.m ファイルの先頭に適切なヘッダーをインポートする必要があります。

#import <QuartzCore/QuartzCore.h>

詳細について は、Core Animation Programming GuideのKeyframe Animation to Change Layer Properties を参照してください。

自動レイアウトを使用している場合は、完了したら、このビューの制約をリセットすることを忘れないでください。

于 2013-09-07T21:57:10.243 に答える