4

回転した画像を別の画像の上に描画できません。私はそれを行うためにいくつかの方法を試しましたが、成功しませんでした。backgroundImg は問題ありませんが、logoImageView が回転していません。なんで?これが私のコードです:

CGSize newSize = CGSizeMake(555, 685);
//UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[backgroundImg.image drawInRect:CGRectMake(0, 0, 555, 685)];

CGAffineTransform rotate;
rotate = CGAffineTransformMakeRotation((rotationSlider.value + 360) * M_PI / 180.0);
logoImageView.layer.anchorPoint = CGPointMake (0.5, 0.5);
logoImageView.transform = CGAffineTransformMakeScale (1, -1);
[logoImageView setTransform:rotate];

次に、1)を試します:

   [logoImageView.image drawAtPoint:CGPointMake(logoImageView.center.x, logoImageView.center.y)];

そして2):

[logoImageView.image drawInRect:CGRectMake(0, 0, logoImageView.bounds.size.width * 2.20, logoImageView.bounds.size.height * 2.20) blendMode:kCGBlendModeNormal alpha:1];

次のように描画を終了します。

imageTwo = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

どちらも機能しません - 私の logoImageView は回転していません。どうしたの?結合された画像で logoImageView.image を回転させたい。

4

1 に答える 1

3

ここで行っているのは、のtransform-property の設定ですlogoImageView。このプロパティは、それ自体に適用される変換を指定しUIImageViewます。これにより、画像ビューが表示されたときに画像が回転して表示されますが、下にある画像は変更されません。
したがって、画像ビューを回転させて画像ビューの - プロパティを読み取るとimage、変換が画像自体ではなくビューに適用されるため、割り当てた画像とまったく同じ画像が得られます。

あなたがしたいことはCGContext、回転した変換で画像を描画することです。この変換を設定するには、CGContextRotateCTM関数を使用する必要があります。この関数は、コンテキストでの描画時に適用される変換を指定する「現在の変換マトリックス」を設定します。CGContextTranslateCTMまた、画像をコンテキストの中心に移動するためにも使用します。

最終的なコードは次のようになります。

CGSize newSize = [flowersImage size];
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[flowersImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];

CGContextTranslateCTM(UIGraphicsGetCurrentContext(), newSize.width / 2.f, newSize.height / 2.f);
CGContextRotateCTM(UIGraphicsGetCurrentContext(), -M_PI/6.f);

[appleImage drawAtPoint:CGPointMake(0.f - [appleImage size].width / 2.f, 0.f - [appleImage size].height / 2.f)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2013-09-12T15:09:36.803 に答える