2012-04-21 91 views
3

我已經完成我的應用程序在@ 1X版本,並創造了大量的代碼的接口,這意味着:字體和線條Retina顯示屏上

  • UILabels
  • UIViews

和一切看起來不錯。如果我現在在視網膜顯示器上使用該應用程序,那麼顯然,所有內容都可以放大到@ 2x我有一些我用fireworks/photoshop設計的圖形,當然還有兩個版本的它們可以工作得很好。我的問題是如上所述的標準界面元素。

問:我怎麼會去

  • 擁有的字體在對兩項決議1px的行程一個UILabel,但上雙@ 2X的HIGHT和寬度?
  • 在這兩個分辨率上有一個高度爲1px(作爲屏幕分隔符)的UIView? @ 2x上的2px行可以,但是id確實需要1px的高度 - 看起來更加優雅。

創建一個分離器視圖我目前使用的:

UIView *separatorLine = [[UIView alloc]initWithFrame:CGRectMake(0,200,320,1)]; 
[self.view addSubview:seperatorLine]; 

其上@正常工作1個決議,但被吹起來爲2px在@ 2倍的高度,而不是在@ 2X顯示爲:

seperatorLine.frame == (0,400,640,1) 

我該如何改變這樣的代碼才能在兩種分辨率上工作?

回答

2

您可以通過

CGFloat scale = ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [UIScreen mainScreen].scale : 1.0); 

檢查屏幕比例如果規模等於2.0你是視網膜顯示屏上,可以改變分離器的框架,例如,CGRectMake(0.0, 200.0, 320.0, 0.5)

+0

所以基本上: 如果(2.0){seperator.frame = HIGHRES} 否則{seperator.frame =洛雷斯} addSubview:分隔符? – 2012-04-21 07:13:18

+0

和有趣的是:你爲什麼使用.5作爲高度,但仍然放大位置? – 2012-04-21 07:14:09

+0

不好意思,'seperatorLine.frame ==(0,400,640,1)'是你的默認框架。編輯。是的,你可以像在你的第一個評論中那樣做,但是if應該是if(scale == 2.0)'。 – 2012-04-21 07:21:27

1

當你使用蘋果的可可元素時,你不需要擔心這些,這對於我們的開發者來說,是視網膜顯示的最佳部分!

您需要@x您的圖形,就像您說過的那樣,但設備會根據需要自動縮放可可顯示元素。蘋果已經明確區分「像素」和「點」,並使用點設置幀。傳統顯示器上的點數爲1px,視網膜顯示器上的點數爲2px。這意味着,實際上,如果您將幀設置爲CGRectMake(0,400,640,1),如上所述,會將該行放在屏幕的底部,並且是屏幕寬度的兩倍(當然,屏幕的邊界將被剪切)。如果你真的想在視網膜顯示器上看到這條線爲1px的高度,請將它製作成圖像。標準圖像可以是320x1,@ 2x可以是640x1。

如果你要明白我的意思,但沒有視網膜顯示設備,您可以在模擬器上運行,並從菜單硬件>設備> iPhone(視網膜)

運氣好選擇。