2013-04-24 34 views
1

我在我的應用程序中使用SDWebImage庫進行圖像緩存,但尚未能正確顯示視網膜圖像。iOS SDWebImage - 如何正確處理不同設備上的視網膜圖像?

我知道關於在github頁面上下載視網膜圖像的討論很多,但不能確定它是否已完全解決,並且沒有任何「官方」方法。

因爲我的應用程序是通用的,我將下載每個圖像的4個變體。這裏有一個例子:

什麼是下載這些圖像的正確方法和設備是否使用SDWebImage的正確設備?

我試過在我的iPhone 5上下載@ 2x-iphone.png圖像,但它顯示的圖像被炸燬和像素化,就好像它不知道它是@ 2x圖像一樣。

什麼是正確的方法來處理多種設備類型的視網膜圖像?

回答

4

首先,原因 - UIImage不知道圖像是視網膜圖像還是普通圖像。當你致電-[UIImage imageNamed:]它調用-[UIImage imageWithData:scale:]與適當的價值的規模。

您的問題是由SDWebImage中的錯誤引起的。見source。如果它不存在,請繼續並且file a bug

問題是SDWebImage只查找@ 2x.png/jpeg文件名以確定它是否是視網膜圖像。您可以繼續並修復該功能,以檢查@ 2x〜iphone.png/@ 2x〜ipad.png文件名。

另外,如果你不想碰SDWebImage代碼,在你的webImageManager:didFinishWithImage:forURL:userInfo:回調,檢查文件名是視網膜圖像,並且如果是這樣,這樣做:

image = [UIImage imageWithCGImage: image.CGImage scale: [UIScreen mainScreen].scale] 
+0

謝謝!這讓我指出了正確的方向!這是過濾器串用於檢測視網膜的問題。看到我的下面的答案。 – JimmyJammed 2013-04-25 16:48:37

+0

@ Mar0ux幹得好,謝謝!但請編輯你的答案,因爲有一個小錯誤。 imageWithData不會接受image.CGImage(它應該是NSData類型),所以它可能應該是[UIImage imageWithCGImage:image.CGImage scale:[UIScreen mainScreen] .scale orientation:UIImageOrientationUp]。 – KlimczakM 2014-07-25 05:57:33

+1

@KlimczakM完成。謝謝! – Mar0ux 2014-07-30 21:33:42

0

才發現SDWebImage只有使用下面的過濾器,以確定是否一個圖象是視網膜或不(位於SDWebImageCompat.m):

NSRange range = [path rangeOfString:@"@2x." options:0 range:NSMakeRange(path.length - 8, 5)]; 

因爲它僅用於搜索「@ 2X」。 (注意時間段),並且只有在字符串末尾出現這種情況時,纔會將名稱爲「[email protected]~iphone.png」的圖像視爲視網膜。

更新了代碼以搜索「@ 2x」的整個圖像url。只有這個問題是你不能在URL中使用「@ 2X」其他地方(但什麼開發商曾使用了一種命名規範):

NSRange range = [path rangeOfString:@"@2x" options:0 range:NSMakeRange(0,path.length)]; 

我還提交了SDWebImage GitHub的頁面上拉請求( https://github.com/rs/SDWebImage/pull/370

相關問題