スクロールでアニメーションを制御できますか?
-
19-09-2019 - |
質問
スクロール ビューの現在のビューの現在の日付を表示する UILabel があります。このビューを左 (左ページ) にスクロールすると、このラベルが前日に変更され、2 つの日付が交差するようにしたいと思います。
Spotlight ページにスクロールしたときの Springboard のフェード効果を参考にしています。これは似ていると思いますが、実装方法がわかりません。
コードをどこに置くべきですか? 2 つの異なる UILabel または CoreAnimation を使用する必要がありますか?日付はいつ変更すればよいですか?
前もって感謝します !
解決
- あなたの中で
scrollViewDidScroll:
デリゲート メソッド、スクロール ビューのcontentOffset
ユーザーが別のページにスクロールしたことを示します。 - その場合は、ラベルのテキストを新しい日付に変更します。まだアニメーション化されませんが、アニメーションを試す前にこれを行ってください。
アニメーションの場合は、
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];
}
所属していません StackOverflow