iPad プロジェクトでパーティクル エミッタを使用しています (SpriteKit を使用していません)。パーティクル エミッタは UIImageView 内で生成され、iOS 9 以降、このエミッタはアプリ全体をクラッシュさせています。実際には、iPad 全体がクラッシュし、画像がフリーズし、iPad を再起動する以外に iPad のフリーズを解除することはできません。
出生率を 19.0f から 6.0f に下げると、iPad がクラッシュしなくなります。私が使用している画像は、サイズが 256 × 256 の png です。それがクラッシュの原因になるかどうかはわかりません。
iOS 8 ではすべて正常に動作していました。
現在、Xcode 7.0.1 を使用して、iPad Air 2 で iOS 9.0.1 を使用しています。
+(void)smogGeneral:(UIImageView *)myView{
[myView setNeedsDisplay];
CALayer *rootLayer = [myView layer];
CALayer *emitterSuperLayer = [CALayer layer];
emitterSuperLayer.bounds = myView.bounds;
emitterSuperLayer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
[rootLayer addSublayer:emitterSuperLayer];
CGFloat midX = floorf(CGRectGetMidX(myView.bounds));
CGFloat midY = floorf(CGRectGetMidY(myView.bounds));
[emitterSuperLayer setPosition:CGPointMake(midX, midY)];
CAEmitterLayer *whiteSmokeEmitter = [CAEmitterLayer layer];
[whiteSmokeEmitter setName:@"whiteSmokeEmitter"];
whiteSmokeEmitter.zPosition = 0.00f;
whiteSmokeEmitter.emitterPosition = CGPointMake(300, 300);
whiteSmokeEmitter.renderMode = kCAEmitterLayerBackToFront;
whiteSmokeEmitter.emitterSize = CGSizeMake(10.00f, 10.0f);
whiteSmokeEmitter.velocity = 0.05f;
whiteSmokeEmitter.emitterMode = kCAEmitterLayerOutline;
whiteSmokeEmitter.emitterShape = kCAEmitterLayerRectangle;
CAEmitterCell *puffCell = [CAEmitterCell emitterCell];
[puffCell setName:@"puffCell"];
puffCell.contents = (__bridge id)[[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"smokeCell" ofType:@"png"]] CGImage];;
CGColorRef colorRefPuffcell = [UIColor colorWithRed:0.99f green:0.98f blue:1.00f alpha:0.10f].CGColor;
puffCell.color = colorRefPuffcell;
puffCell.scale = 0.2f;
puffCell.emissionLongitude = 1.84f;
puffCell.emissionRange = 1.11f;
puffCell.lifetime = 16.0f;
puffCell.birthRate = 19.0f;
puffCell.scaleSpeed = 0.15f;
puffCell.velocity = 2.56f;
puffCell.velocityRange = 9.80f;
puffCell.xAcceleration = 9.15f;
puffCell.yAcceleration = -0.01f;
whiteSmokeEmitter.emitterCells = @[puffCell];
[emitterSuperLayer addSublayer:whiteSmokeEmitter];
}