0

Sprite Kit を使用して、iPad で簡単な 2D アニメーション アプリケーションを作成しました。このアプリケーションの唯一の難しい部分は、計算されたポリゴン (影) で画像 (.png) をクリップすることです。調査の結果、これを実現する唯一の方法は、UIImage と UIBezier パスを使用することであることがわかりました (注: 私のパスはベジエ パスの全機能を必要としません。私の場合は単純な CGPath が機能します)。このクリッピングを実現するために、次のメソッドを作成しました。

- (UIImage *) maskImage: (UIImage *)originalImage toPath: (UIBezierPath *)path
{
    UIGraphicsBeginImageContextWithOptions (originalImage.size, NO, 0.0f);
    [path addClip];
    [originalImage drawAtPoint: CGPointZero];
    UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext ();
    UIGraphicsEndImageContext ();
    return maskedImage;
}

この操作の結果は、最終的に以下に渡されます。

SKSpriteNode *node = [SKSpriteNode spriteNodeWithTexture: [SKTexture textureWithImage: [self buildShadowMask]]];

このコードを iOS シミュレーターを使用して実行すると、非常に高速に、実際にはリアルタイムで実行されます。しかし、これを実際の iPad (iPad Air または iPad 4G) で実行すると、実行速度が非常に遅くなります。そこで、私の質問は次のとおりです。実際の iPad デバイスで画像をクリッピングするこの方法が非常に遅いのはなぜですか? より高速な画像を(単純なパスで)クリップする方法はありますか?これは UIGraphicsContext または Sprite、あるいはその両方の問題ですか? 誰でも私にできるアドバイスやガイダンスをいただければ幸いです。どうもありがとう!

4

0 に答える 0