6

CAEmitterLayerを使用すると、@ 2x(網膜)画像はiOSの他の場所のようにスケーリングされたプロパティではありません。私が得ている結果は、@ 2xバージョンが縮小されるのではなく、非網膜画像の4倍のサイズで表示されていることです。

これを修正する方法について何か考えはありますか?UIImageViewで画像の痛みをテストしようとしましたが、結果は期待どおりであるため、これはCAEmitterLayerとCAEmitterCellの問題のようです。画像には正しい@2x.png指定子があります。

これが私が使用しているコードです:

CAEmitterLayer *fallingCoinEmitter = [CAEmitterLayer layer];
fallingCoinEmitter.emitterPosition = CGPointMake(self.view.bounds.size.width / 2.0, -30);
fallingCoinEmitter.emitterSize = CGSizeMake(self.view.bounds.size.width * 2.0, 0.0);;

    // Spawn points for the flakes are within on the outline of the line
fallingCoinEmitter.emitterMode  = kCAEmitterLayerOutline;
fallingCoinEmitter.emitterShape = kCAEmitterLayerLine;

    // Configure the snowflake emitter cell
CAEmitterCell *coin = [CAEmitterCell emitterCell];
coin.birthRate      = 8.0;
coin.lifetime       = 5.0;
coin.velocity       = -180;             // falling down slowly
coin.velocityRange = 80;
coin.yAcceleration = 40;
coin.emissionRange = 0.4 * M_PI;        // some variation in angle
coin.spinRange      = 0.45 * M_PI;      // slow spin
coin.contents       = (id) [[UIImage imageNamed:@"Coin_Generic_Emitter"] CGImage];
coin.scale          = 1.0;
coin.scaleRange     = 0.0;

    // Make the flakes seem inset in the background
fallingCoinEmitter.shadowOpacity = 1.0;
fallingCoinEmitter.shadowRadius  = 4.0;
fallingCoinEmitter.shadowOffset  = CGSizeMake(0.0, 3.0);
UIColor *darkGreenColor = [UIColor colorWithRed:0.005 green:0.163 blue:0.005 alpha:1.000];
fallingCoinEmitter.shadowColor   = [darkGreenColor CGColor];
[fallingCoinEmitter setContentsScale:[UIScreen mainScreen].scale];
//fallingCoinEmitter.shouldRasterize = YES;
//[fallingCoinEmitter setRasterizationScale:[UIScreen mainScreen].scale];
//fallingCoinEmitter.scale = fallingCoinEmitter.scale / [[UIScreen mainScreen] scale];

    // Add everything to our backing layer below the UIContol defined in the storyboard
fallingCoinEmitter.emitterCells = [NSArray arrayWithObject:coin];
[self.view.layer insertSublayer:fallingCoinEmitter atIndex:0];

ありがとう!

アップデート:

@Fabian、contentScaleの設定が機能していません、少なくとも私のソリューションではありません

    [fallingCoinEmitter setContentsScale:[UIScreen mainScreen].scale];

私もこれを試しましたが、結果はありませんでした。

    emitter.shouldRasterize = YES;
    [emitter setRasterizationScale:[UIScreen mainScreen].scale];

また、スケール範囲の設定が機能しませんでした。iPad 2と3(w RD)のサイズにはまだ違いがあります。

4

1 に答える 1

8

デバイスの画面に応じて、CAEmmitterCellsscaleとプロパティを変更してみてください。scaleRange

cell.scale = cell.scale / [[UIScreen mainScreen] scale];

于 2013-02-05T16:41:55.963 に答える