【问题标题】:Can Scrolling control an Animation?滚动可以控制动画吗?
【发布时间】:2010-02-08 16:58:18
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

    标签: iphone core-animation uilabel transition fading


    【解决方案1】:
    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;
      

    这种效果与 Springboard 图标的淡化有点不同(因为当您进一步滚动到 Spotlight 页面时,这些图标会不断淡化),但我认为我的方法更适合您的应用程序。要模拟 Springboard 效果,您确实应该使用两个单独的标签(具有相同的框架)并随着滚动视图的 contentOffset 的变化而更改它们的不透明度值。

    【讨论】:

      【解决方案2】:

      使用带有两个标签的核心动画就可以了。默认情况下,更改 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];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        相关资源
        最近更新 更多