首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取动画CAEmitterLayer/Cell的发射器位置?

如何获取动画CAEmitterLayer/Cell的发射器位置?
EN

Stack Overflow用户
提问于 2012-06-05 01:28:55
回答 1查看 1.6K关注 0票数 1

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

代码语言:javascript
复制
 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"];

我的bezier轨迹是封闭的,并且在四个位置点中形成了一个"8“。使用我的timerFunction,我每秒都会尝试获取CAEmitterLayer的位置。为此,我使用

代码语言:javascript
复制
-(CGPoint)getEmitterPosition
{
    return fireEmitter.emitterPosition;
}

在发射器类中,

代码语言:javascript
复制
CGPoint emitterPosition = [self.ParticleEmitterView getEmitterPosition];
NSLog(@"%f / %f", emitterPosition.y, emitterPosition.y);

来自计时器函数。

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

为什么会这样?如何获得动画CAEmitterLayer/Cell的发射器位置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-05 01:40:57

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

这是由于Core Animation's rendering architecture固有的模型-视图分离。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10885480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档