2012-02-08 40 views
2

我的界面中有幾個CALayers,我直接將圖像繪製到圖層,而不是imageViews。UIImageView,CGImage和Retina藝術

這裏有一個片段:

UIImage *anImage = [UIImage imageNamed:@"anyImage"]; 
CGImageRef anImageRef = [anImage CGImage]; 
CALayer *aLayer = [CALayer layer]; 
CGFloat anImageWidth = CGImageGetWidth(anImageRef); 
CGFloat anImageHeight = CGImageGetHeight(anImageRef); 
CGRect layerFrame = CGRectMake(0,0,anImageWidth, anImageHeight); 
[aLayer setLayerContents:(__bridge id)anImageRef]; 
[parentLayer addSublayer:aLayer]; 

所以我問題是,我得到不一致的結果與圖像的大小。在視網膜設備上,出現的圖像是預期尺寸的兩倍(例如,它匹配@ 2x圖像的像素尺寸)。在視網膜模式下的模擬器上,繪製到圖層的圖像是預期的大小(其中點與視網膜圖像的非像素點匹配)。

與此不同的是,靜態設置大小或減小大小(這可以糾正設備上的問題,但會中斷與非視網膜顯示器的兼容性),對此方案有什麼好的解決方案或解決方法?爲什麼會發生?

回答

2

UIImage包含一個scale屬性。視網膜顯示圖像將爲2.0。有關更多信息,請參閱the docs

+0

出於某種原因,我的大腦告訴我,scaleView是imageViews上的一個屬性,而不是圖像上,這就是爲什麼下一次我會詢問文檔。感謝您的提醒。 – isaac 2012-02-08 17:31:25

1

CGImageGetWidth()CGImageGetHeight()回報像素而你需要在圖像尺寸的數量。改爲使用-[UIImage size]

+0

謝謝,瞭解區別,只需要提醒一下! – isaac 2012-02-08 17:33:02