我正在尝试在我的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小时)
或者有什么东西我不见了?
答案 0 :(得分:3)
这是正确的行为。
您指定的宽度为2磅(不是像素)。在标准屏幕上将转换为2像素,但在视网膜显示器上转换为4像素。您还应该注意到,您传递的rect的大小也不会随标准或视网膜而变化。 Apple鼓励使用点而不是像素进行绘图。
一个很好的参考是“WWDC 2011 Session 129 - iOS开发者实用绘图”视频。虽然视频作为一个整体提供了丰富的信息,但你所谈论的内容始于10:24左右的视频。