2010-02-08 60 views
0

我有一个UILabel,它显示我的滚动视图的当前视图的当前日期。当我将此视图向左滚动(到左侧页面)时,我希望此标签更改为前一天,并在两个日期之间产生交叉效果。可以滚动控制动画吗?

当您滚动到Spotlight页面时,我会参考Springboard的淡入淡出效果。我认为这是相似的,但我不知道如何实现它!

我在哪里放置代码,我必须使用2个不同的UILabel或CoreAnimation?我什么时候更改日期?

在此先感谢!

回答

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; 
    

这种效果是从跳板图标的衰落有点不同(因为这些不断褪色当您进一步滚动到Spotlight页面时),但我认为我的方法更适合您的应用程序。为了模拟Springboard效果,您应该确实使用两个单独的标签(具有相同的框架),并在滚动视图的contentOffset更改时更改其不透明度值。

0

使用带有两个标签的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]; 
}