2012-05-28 47 views
5

我有一個問題,我只是無法弄清楚。我已經完成了一個應用程序,它將從正面拍攝一張照片,並從後置照相機拍攝一張照片,然後將它們合併在一起。以編程方式加載視網膜(高質量)圖像(在按鈕上)

應用程序的名稱是GroupCam

但是我在我的UIButtons不會被加載從一開始就視網膜圖像的問題。如果我在界面生成器上將它們設置爲@ 2x,它們確實以高質量出現,但是一旦我以編程方式重新加載它們,低版本就會出現。

這是由於以下事實:拍攝照片並且屏幕改變按鈕圖像改變,但是當用戶按下後退按鈕時,相機圖標看起來很可怕(因爲正在加載低質量版本) 。

請檢查下面的圖片:

第一屏:顯示只有右上角的按鈕扭曲,因爲我檢查相機閃光燈的價值和「加載」編程相應的圖像。

First Screen

第二個屏幕:用戶移動到另一個畫面,又重新回到了第一個,所有按鈕都重新加載,他們現在都看起來失真。

Second Screen

如果任何人有爲什麼會這樣我會很感激的任何想法!

謝謝。

編輯:

這是我如何加載圖像。

[self.flashButton setImage:[UIImage imageNamed:@"flashOff"] 
          forState:UIControlStateNormal]; 

我在網上的某個地方看過,這樣做會自動加載最合適的圖像版本。

我也試過,但結果是一樣的:

[self.takeButton setImage:[UIImage imageNamed:@"takePhoto.png"] forState:UIControlStateNormal]; 
+1

我在應用程序中使用正常和視網膜圖像的效果很好。所以我建議你做的是選擇這些圖像的正常分辨率,而不是將它們包括在你的項目中(通過第三個最右邊的窗格 - 只需取消選擇複選框)。現在你的應用程序只有視網膜圖像。那麼,如果事情變壞,那麼你的應用程序中的東西就搞砸了。 [UIImage imageNamed:foo.png]存在一些問題。如果您更改該圖像,該圖像的所有後續用戶都將獲得修改後的圖像。重新讀取UIImage imageNamed: –

+2

所以我只是重新讀你的問題,我剛剛看到這樣的說法:「如果我在接口生成器上將它們設置爲」@ 2x「」。因此,在IB中,您輸入了他們的名字「[email protected]」,這是有效的。所以我可以想到的唯一的事情是你的問題可能是「@ 2x」的格式。你是否確定你已經正確地命名了這些圖像 - 「[email protected]」,NOT&2x.png等。看起來好像iOS沒有看到hi rez文件,這是我能想到的唯一原因,這將解釋它。所以請嘗試刪除IB中的「@ 2x」,看看會發生什麼。我敢打賭,你一直都會得到所有低雷茲。 –

+0

是的,它們被格式化並命名正確。這些圖像將以HD完美加載,唯一的問題是當我以編程方式加載它們時。 iOS決定加載低分辨率的。 – Pochi

回答

3

如果您的應用程序正在從前面攝像頭的圖片,一條來自背面的攝像頭和將它們合併在一起,那麼設備需要前面對相機。所有擁有前置攝像頭的iOS設備也都具有視網膜顯示屏(只要您沒有爲iPad 2開發,但這是一個不同的故事),因此您根本不必擁有正常的圖像,因此所有圖像都應該是視網膜圖像。如果沒有正常的圖像,那麼這個問題根本不應該發生。做一個備份副本,並嘗試刪除所有正常的圖像,然後嘗試。因爲你使用UIImage imageNamed:@「ImageName」,就像你說的那樣,應該自動選擇圖像!祝你好運!

+0

我有點希望找到發生這種情況的原因,但這似乎是一個解決方案。 – Pochi

+0

@LuisOscar對不起,這是我最好的猜測:(嘗試在bugreport.apple.com上報告錯誤。 – sridvijay

4

首先,它可能值得驗證低分辨率版本實際上正在顯示。我最近跳到了一個類似的假設,用不同的東西替換了低分辨率圖像,並確認高分辨率版本實際上仍在顯示,但被扭曲。

我實際的問題,我已經建立

<uibutton_superview>.layer.shouldRasterize = YES;

如果任何按鈕的祖先有這個設置的,它有可能成爲你的問題。

3

模擬器上的圖像文件名的情況並不重要,但在設備上。

使用所有一致的情況。 Image.png和[email protected]被識別並且將在模擬器中一起工作,但不在設備上。使用image.png和[email protected]。或者,只要大小寫匹配,您也可以使用.jpg。

相關問題