滚动可以控制动画吗?
-
19-09-2019 - |
题
我有一个 UILabel,它显示滚动视图的当前视图的当前日期。当我将此视图向左滚动(向左页面)时,我希望此标签更改为前一天,并在两个日期之间产生交叉效果。
我参考了滚动到 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;
此效果与 Springboard 图标的淡入淡出略有不同(因为当您进一步滚动到 Spotlight 页面时,这些图标会不断淡出),但我认为我的方法更适合您的应用程序。要模拟 Springboard 效果,您确实应该使用两个单独的标签(具有相同的框架)并随着滚动视图的 contentOffset 更改而更改它们的不透明度值。
其他提示
使用的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