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 回答