2015-11-02 166 views
0

我正在研究一個有很多圖形的應用程序。該應用針對iOS 7+的iPhone,因此所有支持它的設備都具有視網膜顯示屏。我只添加了@ 2x和@ 3x圖形,因爲@ 1x圖形永遠不會被使用,而且我不希望包的大小增加得多。@ 2x圖像資產沒有@ 1x資產

我最加載程序的映像:

[self.imageView setImage:[UIImage imageNamed:@"ButtonOn"]]; 

這應該加載[email protected]爲@ 2倍顯示器和[email protected]爲iPhone 6加。

不過,我注意到這種行爲:

  • iPhone 6加不加載@ 3倍的圖像。
  • 但其他iPhone - 4,4s,5s和6不加載@ 2x。
  • 我可以強制它通過使用圖形全名來加載@ 2x圖像,例如:[UIImage imageNamed:@"[email protected]"],但是這違背了命名約定的目的,它也迫使我自己檢測屏幕密度。

有沒有辦法讓@ 2x和@ 3x圖像沒有@ 1x的?

UPDATE:該問題與屏幕密度無關。問題在於,由於我使用的是JPG圖形而不是PNG圖形,因此除非使用文件的全名擴展名,否則Xcode無法找到它們。也許這是一個錯誤。

+0

當您的應用程序在iPad 2上運行時,您需要1x圖像。 – rmaddy

+0

錯誤在於聽不到您所聽到的內容... – matt

+0

我在聽,但我也在使用資產目錄。 – calvillo

回答

1

忽略1x圖像並沒有什麼錯,實際上對於僅iPhone應用程序(因爲沒有單分辨率iPhone設備可以運行此係統)通常這樣做。問題是你的代碼。特別是,這條線是錯誤的:

[self.imageView setImage:[UIImage imageNamed:@"ButtonOn"]]; 

你有兩個選擇:

  • 這是一個的.jpg文件,所以這樣說:

    [self.imageView setImage:[UIImage imageNamed:@"ButtonOn.jpg"]]; 
    
  • 更妙,只需保留它的樣子,然後使用資產目錄而不是具有滑稽的@2x名稱的單個文件。

編輯:根據您的意見,並在你的問題的細節,我不得不說,你是深深的困惑您是否正在使用的資產類別。你說你是,但是在那種情況下,說[UIImage imageNamed:@"[email protected]"]不起作用 - 而你說它確實有效。很明顯,你仍然有這個文件坐在你的應用程序包的頂層。這是你的問題的一部分。您需要從應用程序包中刪除這些圖像文件,並在資產目錄上依靠完全

+0

我正在使用資產目錄。除非我還添加1張圖像,否則不會加載2張圖像。 – calvillo

+0

「除非我還添加1張圖片,否則不會加載2張圖片」這只是不正確。我一直這樣做。如果您使用的是資產目錄,則名稱「@」[email protected]「'不應該工作。我不得不建議你 - 你正在使用資產目錄,但也許你不是。顯然你仍然有名字的圖像文件仍然在你的應用程序包中。你需要刪除這些。我已經修改了我的回答,提到這一點。 – matt

+0

我發誓我只使用資產目錄= P。我保留了命名約定,因爲如果您使用命名約定將圖像拖入資產目錄中,Xcode會自動將它們置於正確的屏幕密度。我注意到這個問題不是我描述的問題。真正的問題是,除非我添加.jpg擴展名,否則圖像不會被加載......我不知道這是否與它們不是PNG的事實有關。 – calvillo