0

アプリにフリーフォーム描画を実装したいと考えています。まず、内部のコードを試してみたところ、drawLayer:inContext:希望どおりの結果が得られました。

CALayer での描画:

CALayer 描画の実装

しかし、 内drawRect:にコードを実装することにしたとき、次のことが起こりました。

drawRect: メソッドで実装された描画

空白の内側に描画しても、上記のように外側にレンダリングされます。私が使用したコードはまったく同じです。から にコピペしdrawLayer:inContext:ましたdrawRect:。私は何も変えていないのに、どうしてこうなったの?

コード:

CGContextSaveGState(ctx);

CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineWidth(ctx, 1.0);
CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, prevPoint.x, prevPoint.y);
for (NSValue *r in drawnPoints){
    CGPoint pt = [r CGPointValue];
    CGContextAddLineToPoint(ctx, pt.x, pt.y);
}
CGContextStrokePath(ctx);

CGContextRestoreGState(ctx);
4

1 に答える 1

0

ビューが中央に配置され、画面の全幅を占めていない全画面モードでアプリを使用しているようです。

CALayer描画を画面の左側から中央に移動する変換が適用されている可能性があります。の場合はそうではないかもしれませんdrawRect:。CGContext の変換行列を設定してみてください。

CGContextSaveGState(ctx);
CGFloat xOffset = CGRectGetMidX(screenFrame) - CGRectGetMidX(viewFrame);
CGContextTranslateCTM(ctx, xOffset, 0.0f);
// rest of drawing code
// ...
CGContextRestoreGState(ctx);
于 2012-07-09T07:06:00.317 に答える