0

画面全体でアニメーション化する UILabels の配列があります。以下のように for ループを使用して配列を反復処理しています。

for(int i=0; i<[self.onScreenLabels count]; i++)
{
    UILabel *label = self.onScreenLabels[i];

    int x = label.frame.origin.x;
    int y = label.frame.origin.y;

    label.center=CGPointMake(320, 0);
    [self.view addSubview:label];

    [UIView animateWithDuration:0.3 delay:1.0 options:0 animations:^{

    label.center=CGPointMake(x, y);

} completion:^(BOOL finished){

}];

}

私は、アニメーション化する前に、各 UILabel を最後のものから 1.0 秒遅らせる必要があります。 . ただし、このコードを使用すると 1 秒の遅延がありますが、すべてのラベルが同時にアニメーション化されます。どうしてこれなの?それを回避する方法はありますか?

ありがとう

4

2 に答える 2

1

遅延は、アニメーションを作成する時間に関連しているため、すべてのアニメーションがループ内で同時に作成されるため、遅延はすべて同じになります。

代わりに、遅延を反復インデックス ( i)に設定します。

[UIView animateWithDuration:0.3 delay:i options:0 animations:^{ ...

最初は 0 から始まり、2 番目は 1 から始まり、3 番目は 2 から始まります。

(または(i + 1)、必要に応じて)

于 2015-01-04T15:57:41.647 に答える
0

次のように遅延を使用します。

[UIView animateWithDuration:0.3 delay:i + 1.0 options:0 animations:^{

これにより、最初のラベルが 1 秒遅れ、その後はそれぞれ +1 秒遅れます。

于 2015-01-04T16:00:12.373 に答える