0

アプリには、最初に iOS 7 を搭載した iPad 3 でチェックしたパーティクル システムがいくつかあります。パーティクルは、予想どおりに見え、動作しましたが、ios6 を搭載した iPad2 でテストすると. 粒子は上に移動し、小さくなります。パーティクルのサブクラスがあります。これは、私のパーティクル システムの 1 つのコードです。CGREctMake が粒子を非 Retina ディスプレイの別の領域に配置しているかどうか迷っていましたが、ディスプレイに他のものを配置するとそれは起こりません。

パーティクルを呼び出すコード。

- (void)ShowSteamEffect
{
    //Create view for Steam particle effect.
    CGRect SteamFrame = CGRectMake(790, 380, 100, 100);
    //Show Steam effect
    ShowSteam = [[SteamEffect alloc]initWithFrame:SteamFrame];
    ShowSteam.hidden = NO;
    [self.view insertSubview:ShowSteam aboveSubview:imgComputerLights];

}

Steam subclass.

#import "SteamEffect.h"

@implementation SteamEffect

{
    CAEmitterLayer* SteamEmitter;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        SteamEmitter = (CAEmitterLayer*) self.layer;
        //SteamEmitter.emitterPosition= CGPointMake(0, 0);
        //SteamEmitter.emitterSize = CGSizeMake(10,10);
        CAEmitterCell* Steam = [CAEmitterCell emitterCell];
        Steam.birthRate = 50;
        Steam.spin = .6;
        Steam.lifetime = 1.7;
        Steam.alphaRange = 0.2;
        Steam.alphaSpeed = 0.2;
        Steam.contents = (id)[[UIImage imageNamed:@"Steam1.png"]CGImage];
        Steam.velocity = 30;
        Steam.velocityRange = 50;
        Steam.emissionLongitude = -60;
        Steam.emissionRange = M_1_PI;
        Steam.scale = .2;
        Steam.scaleSpeed = .5;
        Steam.yAcceleration = -200;

        SteamEmitter.renderMode =  kCAEmitterLayerBackToFront;
        SteamEmitter.emitterShape = kCAEmitterLayerCircle;
        SteamEmitter.emitterCells = @[Steam];

}
    return self;
}

-(void)didMoveToSuperview
{

    [super didMoveToSuperview];
    if (self.superview==nil) return;

    [self performSelector:@selector(disableEmitterCell) withObject:nil afterDelay:0.5];
}

-(void)disableEmitterCell
{ 
    [SteamEmitter setValue:@0 forKeyPath:@"birthRate"];
}

+ (Class) layerClass
{
    //tell UIView to use the CAEmitterLayer root class
    return [CAEmitterLayer class];
}

- (void) setEmitterPosition:(CGPoint)pos
{
    SteamEmitter.emitterPosition = pos;
}

- (void) toggleOn:(bool)on
{
    //SteamEmitter.birthRate = on? 300 : 0;
}
4

0 に答える 0