gpt4 book ai didi

ios - 动画 CAEmitterLayer 的 emitterPosition

转载 作者:行者123 更新时间:2023-12-01 15:55:01 24 4
gpt4 key购买 nike

我正在尝试为 CAEmitterLayeremitterPosition 设置动画,如下所示:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"emitterPosition.x"] ;
animation.toValue = (id) toValue ;
animation.removedOnCompletion = NO ;
animation.duration = self.translationDuration ;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] ;
animation.completion = ^(BOOL finished)
{
[self animateToOtherSide] ;
} ;
[_emitterLayer addAnimation:animation forKey:@"emitterPosition"] ;
CGPoint newEmitterPosition = CGPointMake(toValue.floatValue, self.bounds.size.height/2.0) ;
_emitterLayer.emitterPosition = newEmitterPosition ;

请注意,animation.completion 是在仅调用相应的 CAAnimation 委托(delegate)方法的类别中声明的。

问题是它根本没有动画,而是在其最终位置显示发射器。我的印象是,一旦将动画添加到图层,就应该将其背后的实际模型更改为最终位置,以便动画完成时模型处于最终状态;即,防止动画“弹回到”其原始位置。

我已经尝试将最后两行放在 animation.completion block 中,这确实按预期进行了动画处理。但是,当动画结束时,一些粒子会间歇性地在发射器的原始位置发射。如果您将系统置于负载之下(例如,在播放动画时滚动 tableview),这种情况会更频繁地发生。

我正在考虑的另一个解决方案是根本不移动 emitterPosition 而只是移动 CAEmitterLayer 本身,尽管我还没有尝试过。

在此先感谢您提供的任何帮助。

最佳答案

也许 emitterPosition.x 不是动画的有效关键路径。尝试改用 emitterPosition(因此您必须提供包含在 NSValue 中的 CGPoint 值)。

我刚刚在我自己的机器上试过了,它工作正常:

CABasicAnimation* ba = [CABasicAnimation animationWithKeyPath:@"emitterPosition"];
ba.fromValue = [NSValue valueWithCGPoint:CGPointMake(30,100)];
ba.toValue = [NSValue valueWithCGPoint:CGPointMake(200,100)];
ba.duration = 6;
ba.autoreverses = YES;
ba.repeatCount = HUGE_VALF;
[emit addAnimation:ba forKey:nil];

其他需要考虑的事情:

  • 您通常可以使用 nil 作为 addAnimation:forKey: 中的键,除非您稍后需要找到此动画(例如删除它或以某种方式覆盖它).关键路径是关键。

  • removedOnCompletion 设置为 NO 几乎总是错误的,并且通常是无赖的最后避难所(即由于不了解动画的工作原理)。

  • 如果像您所说的那样,在完成 block 内设置 _emitterLayer.emitterPosition = newEmitterPosition 确实会设置动画,那么您什么时候才使用 CABasicAnimation?为什么不直接调用 UIView animate... 并在动画 block 中设置 emitterPosition?如果可行,它会用一 block 石头杀死两只鸟,移动位置并为其设置动画。

关于ios - 动画 CAEmitterLayer 的 emitterPosition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653367/

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