Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Objective c 防止CABASICIANIzation中图层消失的正确方法?_Objective C_Cabasicanimation - Fatal编程技术网

Objective c 防止CABASICIANIzation中图层消失的正确方法?

Objective c 防止CABASICIANIzation中图层消失的正确方法?,objective-c,cabasicanimation,Objective C,Cabasicanimation,我正在使用CABasicAnimation设置CALayer的动画,并希望该层在动画完成时保持在原位。几乎所有的解决方案都会显示以下内容,这很好 animation.removedOnCompletion = NO; animation.fillMode = kCAFillModeForwards; 然而,2010年《核心动画实践》第1部分(约38-41分钟)中的WWDC演讲者说,发现的消失层的大多数解决方案都是“伪造的”,正确的层动画制作方法大致如下 animation.fromValue

我正在使用CABasicAnimation设置CALayer的动画,并希望该层在动画完成时保持在原位。几乎所有的解决方案都会显示以下内容,这很好

animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
然而,2010年《核心动画实践》第1部分(约38-41分钟)中的WWDC演讲者说,发现的消失层的大多数解决方案都是“伪造的”,正确的层动画制作方法大致如下

animation.fromValue = [NSNumber numberWithFloat:layer.position.y];
layer.position = CGPointMake(layer.position.y, endPoint); 
animation.toValue = [NSNumber numberWithFloat:endPoint];
给出的原因是removedOnCompletion/fillMode解决方案仅冻结表示层,而实际层仍设置了其原始位置

如果我误解了演讲者,请纠正我

如果我对他的理解是正确的,那什么时候重要呢


谢谢,史蒂夫,你理解得对


这意味着,当你在一个层上制作动画时,会创建一个称为“表示层”的“特殊”层,动画实际上发生在该层上,但实际的层不会改变。事实上,您必须将该属性设置为动画末尾的层,以便将该层与最终动画状态“同步”。

这取决于您要执行的操作。。。你自己的解释似乎很清楚

如果只设置属性的动画而不更改实际值,则“所见”实际上与“是什么”不同。大多数时候,你不想这样。(当您使用
UIView
动画或
CALayer
隐式动画时,“是什么”和“看到什么”是同步的,这与直接setter语法一致)


但在某些情况下,保留实际值和在屏幕上临时显示不同的内容可能会很有用。。。只要你知道你在做什么

谢谢你的回复-对不起,我的回复有点慢。我可能从来没有遇到过需要对表示层或实际层做更多的事情,这就是为什么我在使用这两种方法时遇到困难。再次感谢。史蒂夫