Objective c 设置CALayer阴影路径的动画
我正在为Objective c 设置CALayer阴影路径的动画,objective-c,core-animation,Objective C,Core Animation,我正在为CALayer设置阴影路径动画 框架大小调整正确,但阴影不缩放 相反,阴影从最终大小CGSize(20,20)开始,并在整个动画中保持不变,即使我将阴影路径设置为初始值 [CATransaction begin]; [CATransaction setAnimationDuration: 0]; [CATransaction setDisableActions: TRUE]; layer.frame = CGRectMake(0,0,10,10); layer.shado
CALayer
设置阴影路径动画
框架大小调整正确,但阴影不缩放
相反,阴影从最终大小CGSize(20,20)
开始,并在整个动画中保持不变,即使我将阴影路径设置为初始值
[CATransaction begin];
[CATransaction setAnimationDuration: 0];
[CATransaction setDisableActions: TRUE];
layer.frame = CGRectMake(0,0,10,10);
layer.shadowPath = [UIBezierPath bezierPathWithRect:layer.bounds].CGPath;
[CATransaction commit];
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:10] forKey:kCATransactionAnimationDuration];
layer.frame = CGRectMake(0,0,20,20);
layer.shadowPath = [UIBezierPath bezierPathWithRect:tile.bounds].CGPath;
[CATransaction commit];
起初,小正方形带有阴影 按下按钮时,正方形和阴影一起变大 主要代码如下:
[CATransaction begin];
[CATransaction setAnimationDuration:5.0];
CAMediaTimingFunction *timing = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[CATransaction setAnimationTimingFunction:timing];
layer.frame = CGRectMake(0,0,100,100);
[CATransaction commit];
CABasicAnimation *shadowAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
shadowAnimation.duration = 5.0;
shadowAnimation.fromValue = (id)[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 50, 50)].CGPath;
shadowAnimation.toValue = (id)[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 100, 100)].CGPath;
[layer addAnimation:shadowAnimation forKey:@"shadow"];
您可以从GitHub下载这个项目并运行它
这个问题对我来说太难了!:) 希望根据Weed的答案添加另一个答案。我接受了威德的答案,并试图把所有的东西都放在一个CATTransaction中,因为我想制作多个层的动画,并确保动画同时发生。如果你们需要的话,给你们。另外,我仍然不明白为什么在CATTransaction中必须使用fromValue和toValue。为什么不能对框架等其他属性执行相同的操作
[CATransaction begin];
[CATransaction setValue:[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseOut]
forKey:kCATransactionAnimationTimingFunction];
for (CALayer *layer in self.layers){
CABasicAnimation *shadowAnimation =
[CABasicAnimation animationWithKeyPath:@"shadowPath"];
shadowAnimation.fromValue =
(id)[UIBezierPath bezierPathWithRect:layer.bounds].CGPath;
shadowAnimation.timingFunction =
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
layer.frame = rectFinal;
shadowAnimation.toValue =
(id)[UIBezierPath bezierPathWithRect:layer.bounds].CGPath;
layer.shadowPath =
[UIBezierPath bezierPathWithRect:layer.bounds].CGPath;
[layer addAnimation:shadowAnimation forKey:nil];
}
[CATransaction commit];
谢谢你的努力。你能告诉我为什么我的解决方案不起作用吗?为什么可以设置帧动画而不能设置阴影路径?阴影动画的要点是将
animationWithKeyPath
设置为@“阴影路径”
。这意味着动画的对象是阴影路径。我也不知道这个机制,但是设置animationWithKeyPath
对于制作动画非常重要。这样行吗?