在iPhone上使用Core Graphics绘制一个矩形

时间:2011-12-03 16:35:25

标签: iphone objective-c core-graphics retina-display

我正在尝试在我的UIView子类上绘制一个矩形,一切正常,除了线的宽度加倍(我正在使用iPhone模拟器atm,在Retina版本上)。

这是drawRect方法:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect innerRect = CGRectInset(rect, 5, 5);
    CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);
    CGContextSetLineWidth(context, 2);
    CGContextMoveToPoint(context, CGRectGetMinX(innerRect), CGRectGetMinY(innerRect));
    CGContextAddLineToPoint(context, CGRectGetMaxX(innerRect), CGRectGetMinY(innerRect));
    CGContextAddLineToPoint(context, CGRectGetMaxX(innerRect), CGRectGetMaxY(innerRect));
    CGContextAddLineToPoint(context, CGRectGetMinX(innerRect), CGRectGetMaxY(innerRect));
    CGContextClosePath(context);
    CGContextStrokePath(context);
}

此代码在正确的位置绘制一个矩形,但宽度为4px,而不是指定的2px。

在网上看,我看到我可能要设置比例因子,所以我尝试添加:

    self.contentScaleFactor = [UIScreen mainScreen].scale;
    self.layer.contentsScale = [UIScreen mainScreen].scale;

在方法的开头,当这不起作用时我尝试了:

    self.contentScaleFactor = 2;
    self.layer.contentsScale = 2;

(因为2是视网膜显示的scale方法应该返回的数字) 这也不起作用。

这只是模拟器的一个问题,当我在设备上运行它时会修复吗? (我把它升级到了5.1,但忘了更新Xcode,所以我目前在7小时内等待Xcode更新完成下载2小时)

或者有什么东西我不见了?

1 个答案:

答案 0 :(得分:3)

这是正确的行为。

您指定的宽度为2磅(不是像素)。在标准屏幕上将转换为2像素,但在视网膜显示器上转换为4像素。您还应该注意到,您传递的rect的大小也不会随标准或视网膜而变化。 Apple鼓励使用点而不是像素进行绘图。

一个很好的参考是“WWDC 2011 Session 129 - iOS开发者实用绘图”视频。虽然视频作为一个整体提供了丰富的信息,但你所谈论的内容始于10:24左右的视频。