2013-05-28 34 views
4

我有一個UIImage,我想在iPhone 4/4S/5屏幕上顯示像素對像素。重要的是它沒有縮放,但是當我嘗試使用setImage時,它會使圖像太大。iPhone編程:如何在實際尺寸的UIImageView中製作UIImage?

我的UIImageView是在UIStoryboard(因爲我真的很陌生),並設置爲模式「重繪」與其他一切默認。其他模式都沒有正確縮放UIImage(編輯:也就是說,將UIImageViews contentMode設置爲其他東西將不起作用)。

我環顧四周,發現這一點:

[self.imageView setImage: image]; 
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x, 
            self.imageView.frame.origin.y, 
            image.size.width, 
            image.size.height); 

不工作。我試圖將每個維度減半,但它仍然沒有。

更新:我認爲它被縮放爲視網膜顯示後,因爲在我使用的視網膜iPhone 4和非視網膜模擬器模式下,圖像使用相同百分比的屏幕。有什麼方法可以將UIImage或UIImageView或項目設置爲「視網膜準備好」?

更新2:通過將每個維度減半來縮小圖像似乎可行。 iPhone 4/4S具有2G/3G/3GS像素的兩倍。但是,這似乎是一個黑客解決方案,我甚至不確定當我這樣做時它是否利用了視網膜顯示像素密度。

回答

1

試着改變你的UIImageViewUIViewContentModeCentercontentMode屬性:

self.imageView.contentMode = UIViewContentModeCenter; 

這應該會導致圖像無法形成規模,在所有的,並顯示出的UIImageView的中心。

+0

感謝您的回覆。我試過了,但它仍然不起作用。我認爲問題在於它在事實之後縮放了視網膜顯示的所有內容,因爲我在視網膜iPhone 4和非模擬非視網膜iPhone上嘗試了這種方法,並且圖像總是佔用屏幕寬度/高度的相同百分比。添加到原始問題。 – sudo

0
[self.imageView setContentMode:UIViewContentModeScaleAspectFit]; 

這不會導致圖像縮放。

8

如果您的UIImage的大小比你的UIImageView的大小大於使用:

if image.size > imageView.size 

[self.imageView setContentMode:UIViewContentModeScaleAspectFit]; 

這將讓你的圖像中的比例,同時將裝配到圖像視圖內,

但是,如果你的UIImage的大小比你的UIImageView的尺寸,然後使用:

if image.size < imageView.size 

self.imageView.contentMode = UIViewContentModeCenter; 

它會讓你在圖像中心,比例,並在其全尺寸。

+0

這是完美的 – Mateusz

+0

而這是因爲蘋果很爛 – hasan83

0

您正在使用的代碼正確

[self.imageView setImage: image]; 
self.imageView.frame = CGRectMake(self.imageView.frame.origin.x,  self.imageView.frame.origin.y, 
         image.size.width, image.size.height); 

但你需要設置其內容模式

[self.imageview setContentMode:UIViewContentModeScaleToFill]; 

現在這個UIViewContentModeScaleToFill將填補與圖像的UIImage的視圖。由於您已將圖像尺寸設置爲與圖像相同,因此圖像現在將顯示爲扭曲。

希望這會幫助你

1

對不起,我忘記了這個問題!答案在其他方面很有幫助,我嘗試了所有這些,但是我發現的解決方案是,您需要在文件的擴展名之前追加「@ 2x」,而無需在視網膜顯示屏上進行縮放,從而標記出想要顯示的圖像名稱。例如,「foo.png」和「[email protected]」。單獨將內容模式更改爲UIViewContentModeCenter將不起作用。

您需要這樣做的原因是,iOS會將UIImageView中的非視網膜圖像放大到4倍的區域,以使它們在視網膜和非視網膜設備上顯示相同。如果您希望它利用所有像素,而不是將其擴展,則必須在文件名中用「@ 2x」表示,並且僅將該圖像用於視網膜設備。