5

私はこれを数日間試しています。スプライト シート ローダーを作成していますが、スプライトを反対方向にロードできる必要があります。これには、既に読み込んだ画像を反転することが含まれます。

UIImageOrientation / UIImageOrientationUpMirrored メソッドを使用してこれを実行しようとしましたが、これはまったく効果がなく、以前とまったく同じ向きでフレームを描画するだけです。

それ以来、私は以下に含めるもう少し複雑な方法を試みました. それでも、アプリケーションに読み込まれたときとまったく同じ方法で画像を描画するだけです。(ミラーリングされません)。

以下の方法を含めました(私の思考パターンに従うことができるように、私のコメントとともに)、私が間違っていることを理解できますか?

- (UIImage*) getFlippedFrame:(UIImage*) imageToFlip
{
//create a context to draw that shizz into
UIGraphicsBeginImageContext(imageToFlip.size);
CGContextRef currentContext = UIGraphicsGetCurrentContext();



//WHERE YOU LEFT OFF. you're attempting to find a way to flip the image in imagetoflip. and return it as a new UIimage. But no luck so far.
[imageToFlip drawInRect:CGRectMake(0, 0, imageToFlip.size.width, imageToFlip.size.height)];

//take the current context with the old frame drawn in and flip it.
CGContextScaleCTM(currentContext, -1.0, 1.0);

//create a UIImage made from the flipped context. However will the transformation survive the transition to UIImage? UPDATE: Apparently not.

UIImage* flippedFrame = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return flippedFrame;
}

ありがとう、ガイ。

4

1 に答える 1

6

コンテキストの変換を変更してから描画する必要があると予想していました。また、負の座標に反転しているため、変換する必要があります。

[imageToFlip drawInRect:CGRectMake(0, 0, imageToFlip.size.width, imageToFlip.size.height)];
CGContextScaleCTM(currentContext, -1.0, 1.0);

with(コメントに基づいて編集)

CGContextTranslateCTM(currentContext, imageToFlip.size.width, 0);      
CGContextScaleCTM(currentContext, -1.0, 1.0);
[imageToFlip drawInRect:CGRectMake(0, 0, imageToFlip.size.width, imageToFlip.size.height)];

注: コメントから、使用するカテゴリ

@implementation UIImage (Flip) 
  - (UIImage*)horizontalFlip { 
     UIGraphicsBeginImageContext(self.size); 
     CGContextRef current_context = UIGraphicsGetCurrentContext();                           
     CGContextTranslateCTM(current_context, self.size.width, 0);
     CGContextScaleCTM(current_context, -1.0, 1.0); 
     [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; 
     UIImage *flipped_img = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     return flipped_img; 
  } 
@end
于 2012-04-23T14:42:13.643 に答える