2011-03-24 22 views
17

試圖瞭解爲什麼我得到CGContextShowTextAtPoint低質量的繪圖?請參閱附加圖像: img視網膜顯示核心圖形字體質量

字母「W」是使用CALayer上的CGContextShowTextAtPoint繪製的,看起來非常像素化。它旁邊的按鈕是一個標準按鈕,看起來像預期的那樣高分辨率。我希望將文本繪製爲高分辨率。

enter image description here

回答

36

默認情況下,您的CALayer未呈現,在更高的分辨率視網膜顯示屏的石英含量。 CALayers內

if ([layer respondsToSelector:@selector(setContentsScale:)]) 
{ 
    layer.contentsScale = [[UIScreen mainScreen] scale]; 
} 

這將影響不僅僅是文字渲染,但所有你的Quartz繪製的,所以您需要爲所有定製的石英圖層的做到這一點:您可以啓用此使用如下代碼內容。

+0

我沒有看到contentScaleFactor上的CALayer – vance 2011-03-25 04:17:08

+0

謝謝,這是contentsScale上的CALayer:CGFloat的比例= [[UIScreen mainScreen]規模]; self.contentsScale = scale; – vance 2011-03-25 04:33:11

+0

其實,設置contentsScale會使圖像看起來非常模糊。看到秒附加圖像。 – vance 2011-03-25 04:38:58

5

是否使用CGContextScaleCTM提供任何結果嗎?當使用圖形上下文,像這樣的工作:

CGFloat scale = [[UIScreen mainScreen] scale]; 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextScaleCTM(context, scale, scale); 
1

一組功能控制核芯顯卡是如何呈現的字體:

  • CGContextSetAllowsAntialiasing
  • CGContextSetAllowsFontSmoothing
  • CGContextSetAllowsFontSubpixelPositioning
  • CGContextSetAllowsFontSubpixelQuantization
0

斯威夫特版本:

textLayer.contentsScale = UIScreen.mainScreen().scale 

enter image description here