1

アニメーション ブロック内でプロパティを 2 つの異なる値に 2 回設定するとどうなりますか? 次の疑似コードを実行すると:

myView.frame = CGRectMake(0,  0, 50, 50); // state 0
[UIView beginAnimations:@"showBanner" context:NULL];
{
    [UIView setAnimationDuration:2];
    myView.frame = CGRectMake(0, 20, 50, 50); // state 1
    myView.frame = CGRectMake(0, 10, 50, 50); // state 2
}
[UIView commitAnimations];

次の結果のどれを取得する必要がありますか?

  1. フレームは状態 0 から状態 1 を経て状態 2 にアニメーション化されます。
  2. フレームは状態 0 から状態 1 を無視して直接状態 2 にアニメーション化されます。

アニメーションがコミットされたときにプロパティの状態が記録されると思うので、結果 #2 が発生することが予想されます。結果#1が発生していることを示しているように見える動作がアプリで発生しているため、質問です。

4

3 に答える 3

1

実際の答えは 3 です。上記のいずれでもありません。

アニメーション ブロックは、プロパティの最後の状態変化のみをアニメーション化します。したがって、あなたの場合、フレームは状態 1 から状態 2 にアニメーション化されます。

于 2011-07-13T20:41:46.063 に答える
1

(2) フレームは状態 0 から状態 1 を無視して直接状態 2 にアニメーション化されます。

于 2011-07-13T19:22:25.180 に答える
0

この質問への回答が必要でしたが、ここに記載されているいずれも満足のいくものではありませんでした。次のような小さなサブビューを配置する簡単なテストを作成しました。

- (void)viewDidLoad {

    [super viewDidLoad];

    self.testView = [[UIView alloc] initWithFrame:CGRectMake(0,0,40,40)];
    self.testView.backgroundColor = [UIColor redColor];
    [self.view addSubview:self.testView];
}

次に、次のような 2 つの代替アニメーションを提供します。

- (void)animateWithSimpleBlock {

    [UIView animateWithDuration:2 animations:^{
        self.testView.frame = CGRectMake(200,200,40,40);
        self.testView.frame = CGRectMake(  0,300,40,40); 
    }];
}

- (void)animateWithQualifiedBlock {

    [UIView animateWithDuration:2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.testView.frame = CGRectMake(200,200,40,40);
        self.testView.frame = CGRectMake(  0,300,40,40); 
    }];
}

何が起こるかは次のとおりです: on animateWithSimpleBlock、testView は、最初の 0,0 位置から中間位置 200,200 まで単一フレーム (アニメーションなし) でジャンプします。そこから、最後の 0,300 の位置まで 2 秒以上アニメーションします。

ただしanimateWithQualifiedBlock、最初の 0,0 の位置から最後の 0,300 の位置まで testView をスムーズにアニメーション化します。これは私が必要とする動作です (b/c アニメーション ブロックで呼び出されるループ メソッドを使用して新しいビュー位置を構築しています)。

于 2013-06-12T03:44:48.557 に答える