【问题标题】:Moving a CALayer with position, not to and from values?移动带有位置的 CALayer,而不是与值之间?
【发布时间】:2014-02-13 03:39:27
【问题描述】:

这是使用位置永久移动 CALayer 的好方法吗?我真的需要一个往返值动画吗?

serveBlock2 = [CALayer layer];
serveBlock2.zPosition = 1;
[serveBlock2 setFrame:CGRectMake(screenBounds.size.height/2, 0, screenBounds.size.height/2, screenBounds.size.width)];
[serveBlock2 setOpacity:0.0f];
[serveBlock2 setBackgroundColor:[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.8f].CGColor];
[self.view.layer addSublayer:serveBlock2];

CABasicAnimation *updateCurrentServe2 = [CABasicAnimation animationWithKeyPath:@"position.y"];
serveBlock2.position = CGPointMake((screenBounds.size.height/4)*3, -screenBounds.size.width/2);
[updateCurrentServe2 setTimingFunction:[CAMediaTimingFunction functionWithControlPoints:0.8 :-0.8 :1.0 :1.0]];
[updateCurrentServe2 setDuration:1.5];
[serveBlock2 addAnimation:updateCurrentServe2 forKey:@"serveBlock2 updateCurrentServe2"];

【问题讨论】:

  • 这行得通吗? (您看到的是隐式动画还是实际看到的是 1.5 秒长的动画?)
  • @DavidRönnqvist 我看到了 1.5 秒长的动画。我只是不知道这是否是制作我的 CALayer 动画的好方法。

标签: ios objective-c core-animation calayer cabasicanimation


【解决方案1】:

你有两个问题,我会按相反的顺序回答:

我真的需要一个往返值动画吗?

不,你不需要那个。

CABasicAnimation 具有三个属性,它们共同定义了插值的完成方式,它们是 fromValuebyValuetoValue。它们可以以多种不同的方式组合,这些方式列在the CABasicAnimation documentation 的“设置插值”部分下。最后列出的组合是:

  • 所有属性都是nil。在目标层表示层中keyPath 的先前值和目标层表示层中keyPath 的当前值之间进行插值。

所以你正在做的事情和你看到的结果是记录在案的行为和工作。

这是使用位置永久移动 CALayer 的好方法吗?

这是一个非常自以为是的问题,我只能给你我的个人意见,并尝试解释我的推理。

我个人不喜欢它,因为它不太明确,您需要阅读文档中的这种特殊情况才能知道它是如何工作的。正如您在对您的问题的评论中看到的那样,当我第一次看到它时,我什至不确定它是如何工作的,我认为自己非常熟悉 Core Animation 并且已经多次阅读文档。

这一切都应该归结为您和您的团队认为最易读和最清晰的内容。

我个人更喜欢显式设置新的模型值,然后只指定fromValue,即这种情况:

  • fromValue 不是nil。在 `fromValue 和属性的当前表示值之间进行插值。

【讨论】:

    【解决方案2】:

    不清楚你在问什么。

    核心动画实际上并不移动它动画层的位置。它创建图层正在更改的外观(通过更改图层的表示层),但实际上并没有更改底层属性。通常你要做的是开始运行动画,然后添加额外的语句来设置你要更改的属性到它们的最终值。然后当动画完成时,对象就在它的最终位置。

    创建 CAAnimation 时,您可以提供 from 和 to 值或仅提供 to 值。如果您只提供一个 to 值,它将从其先前位置动画到新位置。

    如果你只是想移动你的层,设置它的位置属性而不用动画。

    如果该层是视图的支持层,它会简单地跳转到它的新位置。

    如果该层是其他子层,您将获得从旧值到新值的隐式动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2023-03-10
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多