16

UIViewで描画されたカスタム形状のを持っていdrawRect:ます。frameプロパティは次のように設定されます。

{5.f, 6.f, 50.f, 50.f}

ここで、ビューをImage Contextでレンダリングしますが、のframeプロパティを無視し、常に左上にUIView描画します。UIView

[_shapeView.layer renderInContext:UIGraphicsGetCurrentContext()];

のを変更しようとしましたframeCALayer、何も変更されませんでした。プロパティを変更すると、bounds事態はさらに悪化しました。私が有用だと思った唯一の回避策は次のとおりです。

CGRect frame = _shapeView.frame;
CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
[_shapeView.layer renderInContext:context];

ただし、これは多くの形状を扱う場合には実用的ではありません。frameプロパティのみを使用したいと思います。

4

1 に答える 1

31

使用CGContextTranslateCTMするのが適切な方法です。renderInContext: ドキュメントに記載されているように、「レイヤーの座標空間でレンダリングします。」これは、レイヤー/ビューのフレームの原点が無視されることを意味します。

に関しては、で使用するのではなく、CGContextDrawLayerで使用するように作られています。これらは2つの非常に異なるものであり、クラッシュを説明します。CALayerCGLayer

于 2012-09-07T14:33:05.657 に答える