gpt4 book ai didi

ios - 为什么文档指示 CALayer 动画必须在 UIView 动画 block 中?

转载 作者:可可西里 更新时间:2023-11-01 03:55:52 25 4
gpt4 key购买 nike

我目前正在阅读 Apple 的 Core Animation Guide ,我在其中找到了以下有关 iOS 中的图层支持 View 的段落:

If you want to use Core Animation classes to initiate animations, you must issue all of your Core Animation calls from inside a view-based animation block. The UIView class disables layer animations by default but reenables them inside animation blocks. So any changes you make outside of an animation block are not animated.

就在引号下方,文档包含以下代码 list :

[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 的支持 UIView 上的隐式和显式动画都必须放在动画 block 中。

但是,我发现这显然是不真实的。具体来说,我已经在 UIView 动画 block 之外使用 Core Animation 类成功实现了显式动画。

我是不是误解了这段话,或者它已经过时了,还是别的什么?


一些附加说明:

我假设“UIView 类默认禁用层动画,但在动画 block 内重新启用它们”指的是 +[UIView setAnimationsEnabled:] 方法。当我回到可以执行此操作的计算机时,我将检查 +[UIView areAnimationsEnabled] 是否返回 YESNO

最佳答案

该引用指的是支持 View 的层。对于您自己创建和管理的独立层而言,情况并非如此。


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

您可以通过多种方式使用 Core Animation 为图层属性设置动画。最常见的是在您想要为属性设置动画时将动画对象添加到图层,但如果您需要,也可以通过 actions 字典和 styles 字典进行自定义总是想在属性更改时设置动画。对于支持 View 的层,最后两个也将被禁用。

关于ios - 为什么文档指示 CALayer 动画必须在 UIView 动画 block 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com