我有一个UILabel,它显示我的滚动视图的当前视图的当前日期。当我将此视图向左滚动(到左侧页面)时,我希望此标签更改为前一天,并在两个日期之间产生交叉效果。可以滚动控制动画吗?
当您滚动到Spotlight页面时,我会参考Springboard的淡入淡出效果。我认为这是相似的,但我不知道如何实现它!
我在哪里放置代码,我必须使用2个不同的UILabel或CoreAnimation?我什么时候更改日期?
在此先感谢!
我有一个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;
这种效果是从跳板图标的衰落有点不同(因为这些不断褪色当您进一步滚动到Spotlight页面时),但我认为我的方法更适合您的应用程序。为了模拟Springboard效果,您应该确实使用两个单独的标签(具有相同的框架),并在滚动视图的contentOffset更改时更改其不透明度值。
使用带有两个标签的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];
}