0

スクロールビューの現在のビューの現在の日付を表示するUILabelがあります。このビューを左(左のページ)にスクロールすると、このラベルを前日に変更して、2つの日付の間に交差効果を持たせたいと思います。

Spotlightページにスクロールすると、Springboardのフェード効果を参考にします。これは似ていると思いますが、実装方法がわかりません。

コードはどこに配置しますか?2つの異なるUILabelを使用する必要がありますか、それともCoreAnimationを使用する必要がありますか?いつ日付を変更しますか?

前もって感謝します !

4

2 に答える 2

0
  1. scrollViewDidScroll:デリゲートメソッドで、スクロールビューcontentOffsetがユーザーが別のページにスクロールしたことを示しているかどうかを確認します。
  2. その場合は、ラベルのテキストを新しい日付に変更します。まだアニメーション化されませんが、アニメーションを試す前にこれを実行してください。
  3. アニメーションの場合はCATransition、ラベルのレイヤーにを追加し、好みに合わせて構成します。

    // Create a transition animation and add it to the label's layer:
    CATransition *transition = [CATransition animation];
    transition.type = kCATransitionFade;
    transition.duration = 0.25;
    [self.dateLabel.layer addAnimation:transition forKey:@"textTransition"];
    // Change the label's text as before:
    self.dateLabel.text = newDateString;
    

この効果は、Springboardアイコンのフェードとは少し異なります(Spotlightページまでスクロールすると、アイコンが継続的にフェードするため)が、私のアプローチはアプリケーションに適していると思います。Springboard効果をエミュレートするには、実際には2つの別々のラベル(同じフレーム)を使用し、スクロールビューのcontentOffsetの変更に応じて不透明度の値を変更する必要があります。

于 2010-02-08T18:43:29.047 に答える
0

2つのラベルでCoreAnimationを使用すると、問題なく機能します。Core Animationレイヤーのプロパティを変更すると、デフォルトでスムーズに移行できるため、これを活用できます。例えば:

- (void)crossfadeDateLabels
{
    date1Label.layer.opacity = 0.0f;
    date2Label.layer.opacity = 1.0f;
}

または、より詳細な制御が必要な場合は、明示的なアニメーションモデルを使用できます。

- (void)crossfadeDateLabels
{
    CABasicAnimation *date1Anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    date1Anim.duration = 1.0f;
    date1Anim.fromValue = [NSNumber numberWithFloat:1.0f];
    date1Anim.toValue = [NSNumber numberWithFloat:0.0f]

    // Do something similar for date2Anim...

    [date1Label.layer addAnimation:date1Anim forKey:nil];
    [date2Label.layer addAnimation:date2Anim forkey:nil];
}
于 2010-02-08T18:47:35.360 に答える