Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用位置移动CALayer,而不是从值移动到值?_Ios_Objective C_Core Animation_Calayer_Cabasicanimation - Fatal编程技术网

Ios 使用位置移动CALayer,而不是从值移动到值?

Ios 使用位置移动CALayer,而不是从值移动到值?,ios,objective-c,core-animation,calayer,cabasicanimation,Ios,Objective C,Core Animation,Calayer,Cabasicanimation,这是使用“位置”永久移动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]; [se

这是使用“位置”永久移动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"];

不清楚你在问什么

核心动画实际上不会移动其设置动画的层的位置。它会创建图层正在更改的外观(通过更改图层的表示层),但实际上不会更改基础特性。通常,您要做的是启动动画运行,然后添加额外语句以将要更改的属性设置为其最终值。然后,当动画完成时,对象位于其最终位置

创建CAAnimation时,可以提供from和to值,也可以仅提供to值。如果仅提供“到”值,则它将从以前的位置设置动画到新位置

如果只想移动层,请在没有动画的情况下设置其“位置”属性

如果该层是视图的背景层,它将简单地跳转到它的新位置


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

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

我真的需要一个往返值动画吗? 不,你不需要那个

CABasicAnimation有三个属性,它们共同定义了插值的方式,分别是
fromValue
byValue
toValue
。它们可以以多种不同的方式组合,在中的“设置插值值”部分中列出。最后列出的组合是:

  • 所有属性均为
    nil
    。在目标层表示层中先前的
    keyPath
    值和目标层表示层中当前的
    keyPath
    值之间插值
所以你所做的和你所看到的结果都是记录在案的行为和工作

这是使用“位置”永久移动CALayer的好方法吗? 这是一个非常固执己见的问题,我只能给你我的个人意见,并试图解释我的理由

我个人不喜欢它,因为它不太明确,您需要阅读文档中的这个特例才能知道它是如何工作的。正如你在你的问题评论中看到的,当我第一次看到它时,我甚至不知道它是如何工作的,我认为自己对核心动画非常熟悉,并且已经多次阅读文档。

这一切都应该归结于你和你的团队认为最具可读性和清晰性的内容

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

  • fromValue
    是非-
    nil
    。在“fromValue”和属性的当前表示值之间插值

这行得通吗?(你是在看隐式动画还是真的在看1.5秒长的动画?@DavidRönnqvist我在看1.5秒长的动画。我只是不知道这是否是制作CALayer动画的好方法。