3

彼ら!CGContext に画像を描画する必要があります。関連するコードは次のとおりです。

CGContextSaveGState(UIGraphicsGetCurrentContext());

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGRect rect = r;

CGContextRotateCTM(ctx, DEGREES_TO_RADIANS(350));
[image drawInRect:r];


CGContextRestoreGState(UIGraphicsGetCurrentContext());

実際には、長方形を回転させて領域に表示するのは私の目的ではありません。画像を回転させて同じ位置に表示したいだけです。何か案は ?????

4

3 に答える 3

21

回転は、コンテキストの原点を中心に行われます。これは、長方形が相対的であるのと同じポイントです。背景にある方眼紙を想像すると、何が起こっているかがより明確にわかります。

背景に方眼紙グリッド、前景に四角形を配置した回転コンテキスト

線は、ウィンドウ/ビュー/レイヤー/コンテキストの「下」(y=0) です。もちろん、必要に応じて下に描画することもできます。コンテキストが正しく変換されていれば、それを見ることさえできるかもしれません。

とにかく、あなたがしたいことは、世界とその中のすべてを回転させるのではなく、回転していない世界に対して長方形をその場で回転させることだと思います。

何かを回転させる唯一の方法は、世界を回転させることです。そのため、次のようにする必要があります。

  1. グラフィックス状態を保存します。

  2. 長方形を描画するポイントに原点を移動します。(おそらく、長方形の原点ではなく、その中心点に変換する必要があります。)

    長方形の中心となる原点を示す、方眼紙の背景を持つ翻訳されたコンテキスト

  3. コンテキストを回転します。

    方眼紙の背景で翻訳および回転されたコンテキスト。軸が以前のように上に傾いていることを示していますが、長方形と同じように翻訳された原点も移動しています。

  4. 原点を中心に長方形を描きます。つまり、四角形の原点は、幅の半分、高さの半分を負にする必要があります (つまり、(CGPoint){ width / -2.0, height / -2.0 })。以前の原点は使用しないでください。これは、変換ステップで既に使用しているためです。

    方眼紙の背景と原点線を削除して、その位置に描画された長方形

  5. 今後の描画が回転しないように gstate を復元します。

于 2013-03-29T16:29:24.300 に答える
1

私にとってうまくいったのは、最初に回転行列を使用して、画像を中央に保つために必要な移動量を計算することでした. 以下では、描画フレームの中心になるように centerX と centerY を既に計算しており、「シータ」は希望する回転角度 (ラジアン) であると想定しています。

let newX = centerX*cos(theta) - centerY*sin(theta)
let newY = centerX*sin(theta) + centerY*cos(theta)

CGContextTranslateCTM(context,newX,newY)
CGContextRotateCTM(context,theta)
<redraw your image here>

私にとってはうまくいきました。それが役に立てば幸い。

于 2015-08-11T11:52:47.713 に答える
-1

次のコードを使用して画像を回転させます

// 度をラジアンに変換

CGFloat DegreesToRadians(CGFloat degrees)
{
    return degrees * M_PI / 180;
};

drawRectメソッドに書く

 // create new context
CGContextRef context = UIGraphicsGetCurrentContext();
// define rotation angle
CGContextRotateCTM(context, DegreesToRadians(45));
// get your UIImage
UIImage *img = [UIImage imageNamed:@"yourImageName"];
// Draw your image at rect
CGContextDrawImage(context, CGRectMake(100, 0, 100, 100), [img CGImage]);
// draw context
UIGraphicsGetImageFromCurrentImageContext();
于 2013-03-29T04:16:16.323 に答える