0

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

当您滚动到 Spotlight 页面时,我将 Springboard 的褪色效果作为参考。我认为这很相似,但我不知道如何实现它!

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

提前致谢 !

4

2 回答 2

0
  1. 在您的scrollViewDidScroll:委托方法中,检查滚动视图是否contentOffset指示用户已滚动到另一个页面。
  2. 如果是这样,请将标签的文本更改为新日期。它还不会动画,但在尝试动画之前执行此操作。
  3. 对于动画,将 a 添加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 页面,这些图标会不断淡化),但我认为我的方法更适合您的应用程序。要模拟跳板效果,您确实应该使用两个单独的标签(具有相同的框架)并随着滚动视图的 contentOffset 更改而更改它们的不透明度值。

于 2010-02-08T18:43:29.047 回答
0

使用带有两个标签的核心动画就可以了。默认情况下,更改 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];
}
于 2010-02-08T18:47:35.360 回答