2012-12-09 30 views
2

我非常想讓我的應用程序中的按鈕大小轉換爲其寬度和高度的像素數量。以像素爲單位的CGRect?

因此可以說它的寬度爲50,高度爲100,在視網膜顯示設備上,我希望它返回100的寬度和200的高度。在非視網膜設備上,它應該返回一個寬度的50和100的高度。

它應該在iPad上以相同的方式工作。無論如何,我將如何做到這一點?我會使用UIScreen的mainScreen比例尺,還是有其他方法?

謝謝!

回答

4

你放在屏幕上的所有東西都以點爲單位,而不是像素。非視網膜iPhone是320x480點。視網膜-iPhone(3.5 「)分辨率320x480是點。

這是在所有設備上正確的。不要擔心像素,擔心點。

  • 小320x480(3.5」 的iPhone/iPod touch上)
  • 320x568(4" 的iPhone/iPod的觸摸)
  • 768×1024(ipad公司 - 全部)

你的按鈕將作爲100x50上的所有設備進行測量

更新:

在處理圖像時,您需要創建兩組圖像。

的 「視網膜」 大小通過提供兩個圖像,OS抓住正確的一個。你的代碼仍然可以衡量一切。因此,視網膜設備上的200x100視網膜圖像將顯示爲100x50點。

+0

我擔心像素的原因是因爲我將UIImage的大小調整爲UIButton矩形的大小。所以如果我這麼做,我的圖片在Retina設備上看起來會模糊不清,因爲我錯過了它應該是的一半分辨率。 –

+0

@iBradApps查看我更新的答案。 – rmaddy

+0

我看到所以唯一的方法就是創建多個圖像?現在我只有一個BIG圖像,並根據按鈕的大小調整它的大小。我不明白爲什麼我不能在這種情況下使用UIScreen的scale屬性。這將減少資產的數量,它會適用於所有設備不正確? –

0

雖然我同意以前的答案,您應該通常發運兩套資產,而不是在運行時重新調整一套資產,但仍可以這樣做。

將UIImage縮放到正確的屏幕比例將確實意味着使用UIScreen的縮放屬性。但是,在未來的興趣中,不使用[UIScreen mainScreen]可能更有意義,而是確定圖像將顯示的視圖並從那裏獲取屏幕。總而言之,不要混淆創建一個單獨的圖像,並讓操作系統處理它自己的縮放比較有意義。如果您知道資產是@ 2x,則可以使用+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale創建對象並在其中定義比例,這樣系統就會知道比例,並且即使顯示在@ 1x屏幕上也會正確處理調整大小。

相關問題