2013-11-26 32 views
2

我需要留下的UIView一个线索,是动画与CAKeyframeAnimationCAEmitterLayer动画留下准确的小道沿路径

Ball * ball = [[Ball alloc]init]; 
// customized the ball 

CGMutablePathRef path = CGPathCreateMutable(); 
// filling in the path from points. 

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
anim.path = path; 
anim.rotationMode = kCAAnimationRotateAuto; 
anim.repeatCount = HUGE_VALF; 
anim.duration = 1.2; 
anim.cumulative = YES; 
anim.additive = YES; 

[ball.layer addAnimation:anim forKey:@"fly"]; 

现在Ball.m将具有以下发射层:

@implementation TennisBall{ 

    __weak CAEmitterLayer *emitterLayer; 

} 


+ (Class)layerClass 
{ 
    return [CAEmitterLayer class]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setupLayer]; 
    emitterLayer = [CAEmitterLayer layer]; 
    emitterLayer.frame = self.bounds; 
    emitterLayer.emitterPosition = CGPointMake(160, 240); 
    emitterLayer.emitterSize = CGSizeMake(10, 10); 
    emitterLayer.renderMode = kCAEmitterLayerAdditive; 

    CAEmitterCell *emitterCell = [CAEmitterCell emitterCell]; 
    emitterCell.birthRate = 1; 
    emitterCell.lifetime = 10.0; 
    emitterCell.lifetimeRange = 0.5; 
    emitterCell.velocity = 20; 
    emitterCell.velocityRange = 10; 
    emitterCell.emissionRange = 0; 
    emitterCell.scaleSpeed = 0.3; 
    emitterCell.spin = 0; 
    emitterCell.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] 
         CGColor]; 
    emitterCell.contents = (id)[[UIImage imageNamed:@"first.png"] CGImage]; 
    [emitterCell setName:@"fire"]; 

    emitterLayer.emitterCells = [NSArray arrayWithObject:emitterCell]; 

    [self.layer addSublayer:emitterLayer]; 


    } 
return self; 
} 

我只需要在球上留下一条重复球传播路线的足迹。我如何实现这一目标?

+0

您是否找到了解决方案? – SpaceDog

回答

0

为了确保发射器位置正确,它的球层 您需要确保emitterPosition与其anchorPoint相同。

例如,如果anchorPoint是(0,0),那么emitterPosition是(0,0)。 如果anchorPoint是(0.5,0.5),并且大小是(0,0,300,300),那么emitterPosition是(150,150)