我正在尝试创建一个可以在iPhone 4上很好地缩放的应用程序。目前,除了一个关键部分:我在CALayer内的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();
}
该短消息在两个设备上都产生清晰的文本,但是不幸的是,它在两个设备上都产生模糊的文本。看起来是这样的:
ugly text http://files.droplr.com.s3.amazonaws.com/files/16285043/1gBp61.Screen%20shot%202010-06-26%20at%2021:25:09.png
该图像是在iPhone 4上以100%缩放比例拍摄的。世界上发生了什么?有什么想法我可以解决这个问题吗?
最佳答案
您应该将图层的contentsScale
设置为与屏幕的scale
相同:
layer.contentsScale = [UIScreen mainScreen].scale;
这样可以在所有iOS设备,Retina Display和非Retina Display上正确缩放。除非有充分的理由,否则不应将其硬编码为2.0(或其他任何形式)。