我正在尝试创建一个可以在iPhone 4上很好地扩展的应用程序。目前大多数都可以完美地扩展,除了一个关键部分:我在其中绘制的文本,在其drawInContext:方法内。这是我的代码:
- (void)drawInContext:(CGContextRef)context {
UIGraphicsPushContext(context);
CGContextSetGrayFillColor(context, 1.0f, 1.0f);
CGContextFillRect(context, self.bounds);
CGContextSetAllowsAntialiasing(context, true);
CGContextSetShouldAntialias(context, true);
CGContextSetAllowsFontSmoothing(context, true);
CGContextSetShouldSmoothFonts(context, true);
CGContextSetAllowsFontSubpixelQuantization(context, true);
CGContextSetShouldSubpixelQuantizeFonts(context, true);
CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextSelectFont(context, "CardKit", 30.0f, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextShowText(context, "A", sizeof("A"));
UIGraphicsPopContext();
}
这个短片在两个设备上都会产生清晰的文字,但不幸的是,它会在两个设备上产生模糊的文字。以下是它的显示方式:
该图像是在iPhone 4上以100%变焦拍摄的。世界上有什么?我有什么想法可以解决这个问题吗?
答案 0 :(得分:27)
您应该将图层的contentsScale
设置为与屏幕的scale
相同:
layer.contentsScale = [UIScreen mainScreen].scale;
这将在所有iOS设备,Retina Display和非Retina Display上正确缩放。除非你有充分的理由这样做,否则你不应该硬编码到2.0(或其他任何事情)。
答案 1 :(得分:2)
由于您正在处理CALayers,因此需要将图层的contentsScale属性设置为2.0。
请参阅适用于iOS 4的iPhone应用程序编程指南中的this section。
答案 2 :(得分:2)
现在打破了上一个答案的链接。新链接为this one。