gpt4 book ai didi

ios - 动画 CALayer 的 shadowPath 属性

转载 作者:技术小花猫 更新时间:2023-10-29 11:20:30 24 4
gpt4 key购买 nike

我知道 CALayer 的 shadowPath 只能使用显式动画进行动画处理,但我仍然无法让它工作。我怀疑我没有正确传递 toValue - 据我所知,这必须是一个 id,但该属性采用 CGPathRef。将其存储在 UIBezierPath 中似乎不起作用。我正在使用以下代码进行测试:

CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
theAnimation.duration = 3.0;
theAnimation.toValue = [UIBezierPath bezierPathWithRect:CGRectMake(-10.0, -10.0, 50.0, 50.0)];
[self.view.layer addAnimation:theAnimation forKey:@"animateShadowPath"];

(我使用负值以确保阴影延伸到位于其顶部的 View 之外...图层的 masksToBounds 属性设置为 NO ).

shadowPath的动画是如何实现的?

更新

问题几乎 已解决。不幸的是,主要问题是一个有点粗心的错误......

我犯的错误是将动画添加到 View Controller 的根层,而不是我专用于阴影的层。此外,@pe8ter 是正确的,因为 toValue 需要是一个 CGPathRef 转换为 id (很明显,当我尝试这个之前我仍然有由于错误的图层错误而没有动画)。动画使用以下代码:

CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
theAnimation.duration = 3.0;
theAnimation.toValue = (id)[UIBezierPath bezierPathWithRect:myRect].CGPath;
[controller.shadowLayer addAnimation:theAnimation forKey:@"shadowPath"];

我很高兴从我提供的示例代码中很难发现这一点。希望它仍然对处于类似情况的人有用。

但是,当我尝试添加行时

controller.shadowLayer.shadowPath = [UIBezierPath bezierPathWithRect:myRect].CGPath;

动画停止运行,影子立即跳到最终位置。文档说要添加与正在更改的属性具有相同键的动画,以便覆盖设置属性值时创建的隐式动画,但是 shadowPath 无法生成隐式动画......所以我如何获得新属性留在 动画之后?

最佳答案

首先,你没有设置动画的fromValue

其次,你是对的:toValue 接受一个 CGPathRef,除了它需要转换为 id。做这样的事情:

theAnimation.toValue = (id)[UIBezierPath bezierPathWithRect:newRect].CGPath;

如果您希望更改在动画后保留,您还需要显式设置层的 shadowPath 属性。

关于ios - 动画 CALayer 的 shadowPath 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924734/

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