Ios 为什么文档指示CALayer动画必须在UIView动画块中?

Ios 为什么文档指示CALayer动画必须在UIView动画块中?,ios,uiview,core-animation,calayer,Ios,Uiview,Core Animation,Calayer,我目前正在阅读苹果的文章,在那里我找到了以下关于iOS中分层视图的文章: 如果要使用核心动画类来启动动画,则必须从基于视图的动画块内部发出所有核心动画调用。UIView类默认情况下禁用层动画,但在动画块内重新启用它们。因此,在动画块外部所做的任何更改都不会设置动画 在报价的正下方,文档包括以下代码列表: [UIView animateWithDuration:1.0 animations:^{ // Change the opacity implicitly. myView.laye

我目前正在阅读苹果的文章,在那里我找到了以下关于iOS中分层视图的文章:

如果要使用核心动画类来启动动画,则必须从基于视图的动画块内部发出所有核心动画调用。UIView类默认情况下禁用层动画,但在动画块内重新启用它们。因此,在动画块外部所做的任何更改都不会设置动画

在报价的正下方,文档包括以下代码列表:

[UIView animateWithDuration:1.0 animations:^{
   // Change the opacity implicitly.
   myView.layer.opacity = 0.0;

   // Change the position explicitly.
   CABasicAnimation* theAnim = [CABasicAnimation animationWithKeyPath:@"position"];
   theAnim.fromValue = [NSValue valueWithCGPoint:myView.layer.position];
   theAnim.toValue = [NSValue valueWithCGPoint:myNewPosition];
   theAnim.duration = 3.0;
   [myView.layer addAnimation:theAnim forKey:@"AnimateFrame"];
}];
这意味着
CALayer
s backing
UIView
s上的隐式和显式动画必须放置在动画块中

然而,我发现这显然是不真实的。具体来说,我已经成功地使用
UIView
动画块之外的核心动画类实现了显式动画

我是否误解了这段话,或者它过时了,或者其他什么


一些补充说明:


我假设“UIView类在默认情况下禁用层动画,但在动画块中重新启用它们”指的是
+[UIView SetAnimationEnabled:
方法。当我回到一台可以这样做的计算机上时,我将检查
+[UIView areanimationEnabled]
是否返回

该引号指的是支撑视图的图层。对于您自己创建和管理的独立层,情况并非如此


iOS上的每个视图都有一个层支持。更改视图的特性时,它会更改基础图层特性。默认情况下,该层将具有隐式动画,但该层“禁用”该行为,除非您位于UIView动画块内。这就是文档的这一部分所指的内容


有几种方法可以使用核心动画设置层特性的动画。最常见的方法是在希望为特性设置动画时将动画对象添加到层中,但如果始终希望在特性更改时设置动画,则也可以通过
操作
字典和
样式
字典进行自定义。对于支持视图的层,最后两个也将被禁用。

那么您是说
UIView
s在其支持层上禁用隐式动画(在
UIView
动画块中除外),但继续允许显式动画?如果是这样,这与文档不同,文档坚持所有CA调用都必须在动画块中。如果它这样说,那么它是错误的/措词不当的。这绝对不是真的。@ravron该段落在“如何设置图层背景视图的动画”部分下。对我来说,很明显,这与支持UIView的层有关。当然。我们都同意它指的是支持
UIView
的层。问题是为什么文档中说,
UIView
s在其背景层上禁用隐式和显式动画,而事实并非如此。