質問

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

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

コードをどこに置くべきですか? 2 つの異なる UILabel または CoreAnimation を使用する必要がありますか?日付はいつ変更すればよいですか?

前もって感謝します !

役に立ちましたか?

解決

  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;
    

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

他のヒント

2つのラベルでのCore Animationを使用すると、うまく動作します。あなたがあなたの利点にそれを使用できるように、デフォルトでのスムーズな移行に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];
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top