2012-10-19 73 views
7

在我FirstViewController我,如果設備是iPhone4的或iPhone5的寫開關後臺驗證碼:開關背景圖像的iphone5 - iPhone4的

文件名: [email protected]
BG-FOR4 @ 2X巴紐
BG-for4.png

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIImage *backgroundImage = [[UIImage alloc] init]; 
    if([[UIScreen mainScreen]bounds].size.height == 568) 
    { 
     backgroundImage = [UIImage imageNamed:@"bg-for5-568h"]; 
    } 
    else 
    { 
     backgroundImage = [UIImage imageNamed:@"bg-for4"]; 
    } 
    self.view.backgroundColor = [[[UIColor alloc] initWithPatternImage:backgroundImage] autorelease]; 
    [backgroundImage release]; 
} 

當我lanch我的模擬器應用程序,對於iPhone5的背景顯示兩倍大小,走出了看法。

/*解決THANK YOU */

+0

看起來:http://stackoverflow.com/questions/12446990/how-to-detect-iphone-5-widescreen-devices –

+2

它將雙倍的大小,因爲它是雙倍大小和iOS將拉伸它,使1像素的圖像將顯示在grphic窗格的1.0英寸像素上,該窗格在視網膜設備上延伸超過2個硬件像素。處理這個問題有幾種方法。最簡單的方法是將該行代碼中的「bg-for5-568h @ 2x」更改爲「bg-for5-568h」,但不要更改png文件的名稱。 –

+0

非常感謝!現在完美的作品。 – Jimmy

回答

5

我不確定這是否是這個問題的解決方案,因爲我失蹤一些信息,但:

首先:從imageNamed:方法剝離.png方法。自iOS4以來,你不應該這樣做了。接下來的事情是:你的形象的名字是什麼?請注意,iPhone5具有視網膜顯示屏,您的圖像應命名爲[email protected],但在源代碼中稱爲bg-for5-568h

除此之外:幾乎在任何情況下,您的圖像不是照片,你在做什麼是一個壞主意。即使是照片,也可以使用iPhone 4和4S的更大圖像。它並沒有那麼大,所以內存佔用不是問題!看看UIImageViewcontentMode屬性。您可以使用它來調整較大圖像的位置。如果圖像不是全屏,您還可能要檢查UIImageViewclipSubviews屬性以剪輯圖像。

相信我,在我們公司,我們有一些東西像〜ipad,〜iphone,〜2x,甚至可拉伸的圖像。所有這些鉤子都能很好地工作,直到日期,蘋果宣佈了類似的東西或者只是一種新設備。所以我決定不再做這些鉤子了。首先,它們似乎非常有幫助,但是當市場上出現新的東西時,您遇到的麻煩是不值得的!

+0

我編輯了我的代碼,我對每個視圖都有不同的背景。我不知道是因爲在iphone5後臺顯示更大,出於觀點。 – Jimmy

+1

在編輯的代碼中去掉@ @ 2x'!只要圖像應該用'@ 2x'命名,在代碼中,只需輸入文件名即可! –

+0

現在工作!非常感謝。 – Jimmy

1

我不會建議這樣做,如果蘋果再次改變自己的屏幕尺寸,你必須回去重寫所有的代碼?

一個簡單的解決方法是使用:

self.view.backgroundColor = [UIColor colorWithPatternImage:/* your image*/]; 

這會給你伸展或平鋪一些問題。

我更喜歡使用

UIImage* imageName = [[UIImage imageNamed:/*image name*/]resizableImageWithCapInsets:UIEdgeInsetsMake(top,left,bottom,right)]; 

在iOS 6中,你可以通過定義,如果你想要的形象伸展或瓷磚改善這進一步。這允許你創建一個不會改變的邊框,然後圖像的中心默認平鋪並填充你的圖像視圖的空間

+0

只有在您必須支持ipad和iphone或iphone時纔有效。這不適用於iphone 4和iphone 5(該死的蘋果!) –

+0

它適用於我在iPhone 4和iPhone 5上。你需要設置你的imageview的幀爲self.view.bounds –

+0

嗯,閱讀蘋果的參考我沒有找到它,它是否也適用於Xib? –

2

您應該在所有視網膜圖像上追加@ 2x後綴。 在你的情況下,你的圖像應該被存儲爲「[email protected]」。 希望它能解決問題。