这是使用位置永久移动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"];
最佳答案
您在这里有两个问题,我将以相反的顺序回答:
我真的需要往返动画吗?
不,您不需要那。
CABasicAnimation具有三个一起定义插值方式的属性,分别是fromValue
,byValue
和toValue
。可以按the CABasicAnimation documentation中的“设置插值值”部分中列出的多种不同方式组合它们。最后列出的组合是:
nil
。在目标层表示层中的keyPath
的先前值和目标层表示层中的keyPath
的当前值之间进行插值。 因此,您正在做的事情和所看到的结果是记录在案的行为和工作原理。
这是使用位置永久移动CALayer的好方法吗?
这是一个很自以为是的问题,我只能给您我的个人意见,并尝试解释我的理由。
我个人不喜欢它,因为它不够明确,您需要阅读文档中的这种特殊情况才能知道它是如何工作的。正如您在对问题的评论中所看到的那样,当我初次看到它时,我什至不知道它是如何工作的,而且我认为自己对Core Animation非常熟悉,并且已经阅读了许多文档。
这一切都取决于您的和您的团队认为最易读和清楚的内容。
我个人更喜欢显式设置新模型值,然后仅指定
fromValue
,即这种情况:fromValue
是非nil
。在`fromValue和属性的当前表示值之间进行插值。 关于ios - 将CALayer与位置一起移动,而不是与值之间移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293796/