gpt4 book ai didi

objective-c - 如何获得动画 CAEmitterLayer/Cell 的发射器位置?

转载 作者:行者123 更新时间:2023-11-29 11:12:36 25 4
gpt4 key购买 nike

我有一个带有 CAEmitterCell 的动画 CAEmitterLayer,动画运行良好

 fireEmitter = (CAEmitterLayer*)self.layer; 
fireEmitter.emitterPosition = CGPointMake(50, 50);
fireEmitter.emitterSize = CGSizeMake(10, 10);

CAEmitterCell* fire = [CAEmitterCell emitterCell];
...
[fire setName:@"fire"];

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"];
anim.path = theBezierPath.CGPath;
anim.calculationMode = kCAAnimationCubicPaced;
anim.repeatCount = HUGE_VALF;
anim.duration = 12.0;
[self.layer addAnimation:anim forKey:@"fire"];

我的贝塞尔曲线路径是闭合的,并在四个位置点中形成一个“8”。使用我的 timerFunction,我尝试每秒获取 CAEmitterLayer 的位置。为此我使用

-(CGPoint)getEmitterPosition
{
return fireEmitter.emitterPosition;
}

在发射器类和

CGPoint emitterPosition = [self.ParticleEmitterView getEmitterPosition];
NSLog(@"%f / %f", emitterPosition.y, emitterPosition.y);

来自定时器函数。

但是当动画运行时,尽管发射器在屏幕上运行,但控制台每次调用都会输出相同的位置。

这是为什么?我如何才能获得动画 CAEmitterLayer/Cell 的发射器位置?

最佳答案

您是否尝试过查询 CAEmitterLayerpresentationLayer 属性并询问生成的 CALayer 的位置?表示层应允许您访问该层的属性,因为它们在动画期间出现在屏幕上,而发射器层将为您提供所有当前动画结束时的属性。

这是由于 Core Animation's rendering architecture 中固有的模型- View 分离所致.

关于objective-c - 如何获得动画 CAEmitterLayer/Cell 的发射器位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10885480/

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