0

最終的に RSS フィードの配列になり、ラベルなどをビューの下部に表示したいと考えています。配列内の各フィードをアニメーション化したいと思います。

これは私がこれまでアニメーション化したもので、フェードには機能しますが、配列の最後の項目のみをアニメーション化します。

feed = [[UILabel alloc] initWithFrame:CGRectMake(0,380,320,43)];
[self.view addSubview:feed];

feed.alpha=1;

NSArray *feeds = [NSArray arrayWithObjects:[NSString stringWithFormat:@"1234567"],[NSString stringWithFormat:@"qwerty"],[NSString stringWithFormat:@"asdfgh"],nil];

for (NSString* f in feeds){

    feed.text=f;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDuration:2.0f];
    feed.alpha=0;
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
    [UIView commitAnimations];

}

シンプルだと思います。

ありがとう

4

2 に答える 2

7

まず、より良い命名規則を検討する必要があります。UILabel をフィードとして呼び出すことは、後で戻ってコードを確認する必要がある場合にはあまり役に立ちません。私はそれをfeedLabelと名付けます。次に、フィードのリストを繰り返し処理するfor (NSString *feed in feeds)と、より理にかなっています。そしてそうなるでしょうfeedLabel.text = feed;

とにかく、あなたのコードで見られる問題は、ループでアルファを繰り返しゼロに設定しているが、決して1に戻さないことです。つまり、アルファ値を変更していません。すべての反復で同じままです。

だから、あなたがやろうとしていることを明確にすることができるかもしれません。テキストの変更の間にテキストをフェードさせたい場合は、別のアニメーションと方法論が必要になります。ループの代わりに、didStopSelector のときにテキストを設定して次のアニメーションを開始するように、アニメーションを連鎖させます。何かのようなもの:

- (void)performAnimation;
{
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
  [UIView setAnimationDuration:2.0f];
  feed.alpha=0;
  [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:)];
  [UIView commitAnimations];
}

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
  feed.alpha = 1.0;
  NSString *nextFeed = [self getNextFeed]; // Need to implement getNextFeed
  if (nextFeed)
  {
    // Only continue if there is a next feed.
    [feed setText:nextFeed];
    [self performAnimation];
  }
}
于 2010-08-15T06:27:29.310 に答える
0

コードを試してみましたが、最初のフィードでフェードアウトしますが、animationDidStop イベントには入りません。そのため、performAnimation を再度呼び出すことはできません。アニメーション用のセットはありますか (デリゲートまたはプロトコルなど..)

于 2010-08-31T20:07:48.410 に答える