2010-06-27 24 views
9

我想創建一個可以在iPhone 4上很好地放大的應用程序。目前大多數應用程序都完美地擴展了,除了一個關鍵部分:我在裏面繪製的文本一個CALayer,它的drawInContext:方法。這裏是我的代碼:兩臺設備上CGContext文字繪圖不會在iPhone 4上放大

- (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

這種形象在100%縮放採取的iPhone 4在世界什麼?任何想法如何解決這個問題?

+0

這只是一個猜測,我沒有試過看它是什麼。您目前使用的是30pt字體,您可以通過(CGSize)sizeWithFont:(UIFont *)字體測試字符串的大小和60pt字體,如果寬度在您的尺寸目標矩形內,則使用60pt繪製,如果不是,則使用30pt繪製。 iphone4屏幕是iphone屏幕的直接2x,所以我只是猜測渲染文本的兩倍點大小可能工作。 – scottbates22 2010-07-06 17:04:16

+0

這只是讓信件被切斷。參見:http://zcr.me/01g 仍然模糊。只是更大。 – 2010-07-11 22:48:46

回答

27

你應該設置圖層的contentsScale是一樣的你的屏幕scale

layer.contentsScale = [UIScreen mainScreen].scale; 

這將正確縮放它在所有iOS設備,視網膜顯示和非視網膜顯示。除非你有足夠的理由這麼做,否則你不應該將其硬編碼爲2.0(或其他任何其他方面)。

2

由於您正在處理CALayers,因此需要將圖層的contentsScale屬性設置爲2.0。

this section在iPhone應用程序編程指南適用於iOS 4

+0

工作完美!謝謝一堆! – 2010-07-14 21:11:34

+0

非視網膜顯示會發生什麼情況?文字會縮小50%嗎? – thierryb 2010-08-21 18:27:55

+1

是的,它會出現在錯誤的規模(這使得這個答案不正確)。要渲染在Retina或非Retina顯示屏上正確顯示的圖像,應使用' - [UIScreen scale]'屬性來確定「contentsScale」的正確值。看到我對這個問題的回答... – 2011-02-13 03:33:49

2

以前的答案的鏈接現在被打破。新鏈接是this one

+0

謝謝松本 – 2011-09-26 22:39:30

+0

我已經更新了上面的帖子和你的鏈接 – 2012-03-09 13:48:33