我有一個UIWebView
顯示一些本地文本和圖像。要麼我在某個地方犯了錯誤,要麼UIWebView
不會自動處理@2x
後綴以獲得高分辨率圖像。UIWebView和iPhone 4視網膜顯示屏
所以,我的問題是有沒有人通過正常的方式成功地將@2x
圖像加載到UIWebView
,還是我需要做一些特殊的事情?我能否以某種方式檢測我的用戶是否有視網膜顯示器?
我有一個UIWebView
顯示一些本地文本和圖像。要麼我在某個地方犯了錯誤,要麼UIWebView
不會自動處理@2x
後綴以獲得高分辨率圖像。UIWebView和iPhone 4視網膜顯示屏
所以,我的問題是有沒有人通過正常的方式成功地將@2x
圖像加載到UIWebView
,還是我需要做一些特殊的事情?我能否以某種方式檢測我的用戶是否有視網膜顯示器?
根據您的要求...
功能測試。如果您想知道是否需要顯示視網膜圖像或常規圖像,請測試您的設備是否具有視網膜顯示屏,而不是特定型號(未來儘可能驗證您的應用程序,這意味着您必須更改當一個新的模型出來時,這些東西就少了)。要做到這一點,你可以使用下面的示例代碼:
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)] &&
[[UIScreen mainScreen] scale] == 2.0)
{
/* We have a retina display. */
}
else
{
/* We do not. */
}
這段代碼是安全的,因爲我寫這一點,在所有型號上的所有固件版本的時間。在未來的版本中它將是安全的,直到Apple棄用scale
方法,這種方法可能永遠不會發生。
更多關於你的問題,我不知道如何在webview中做到這一點,事先沒有位置視網膜圖像和非視網膜圖像。一旦我有了這些信息,我就可以使用它來替換一些已知的哨兵文本,這些文本是網頁期望我替換的,例如我會在HTML中添加一些內容:{{{image_location}}}
,我可以在其中下載HTML數據,將其轉換爲字符串格式,然後替換該字符串替換該文本,如果我們在視網膜顯示器上,則使用@ 2x圖像的URL,使用適當的比例因子,如果不是,則使用正常大小的圖像(使用上面的代碼)。
希望這有助於如果沒有人提供更好的解決方案。
至於檢測,你可以使用this code sample。我剛更新它也檢測iPhone 4.
-1用於推薦測試設備的代碼,而不是功能測試。建議檢查'UIScreen'是否響應'scale',如果是,則調用'UIScreen'的'mainScreen'上的'scale'並檢查其值是否爲2.0。如果這些條件屬實,視網膜顯示。 – jer 2010-09-16 06:22:56
那麼在這種情況下,你不能得到誤報,所以我會毫不猶豫。但是屏幕檢查更好,是的。 – zoul 2010-09-16 06:34:07
沒有得到上述確認的滿意答案。只需再補充一點,我之所以低估它的原因是因爲這些類型的硬件檢查工作很好,但在蘋果發佈新設備(可能帶有視網膜顯示器)的5個月內,我們必須編輯我們的代碼使它在那裏工作,而如果我們檢查規模,它會自動工作。 – jer 2010-09-16 06:41:32
就始終做到:
<img src="[email protected]" width={half-width} />
對CSS的引用背景圖像,使用-webkit-背景大小的一半大小的他們。
缺點:非視網膜設備將下載超大圖像。
我認爲這也可以通過使用一些CSS或Javascript魔術來僅顯示適當的圖片來實現。其主要思想是插入兩張圖片,正常和高分辨率,然後設置CSS屬性顯示到沒有的圖片面膜:
HTML文件
<link href="default.css" rel="stylesheet" media="screen" type="text/css" />
<link href="highresolution.css" media="screen and (-webkit-min-device-pixel-ratio:2)" type="text/css" rel="stylesheet" />
。 ...
<img src="image.png" width="..." height="..." class="normalRes" />
<img src="[email protected]" width="..." height="..." class="highRes" />
CSS file:default。CSS
.normalRes { display:block } /* or anything else */
.highRes { display:none }
CSS文件:highresolution.css
.normalRes { display:none }
.highRes { display:block } /* or anything else */
我已經測試它一點點,效果不錯。現在需要更多的測試。 我發現這裏的解決方案:http://www.mobilexweb.com/blog/iphone4-ios4-detection-safari-viewport
這裏是不需要highresolution.css文件中的另一個解決方案。
將以下代碼添加到default.css。
@media all and (-webkit-min-device-pixel-ratio: 2) {
.normalRes { display:none }
.highRes { display:block }
...
__img__標記的__width__和__height__屬性必須具有正常和視網膜圖像的保存值。 換句話說,只有__src__文件名和__class__值從正常圖像變爲視網膜圖像。 – Domsware 2012-06-24 12:08:38
最好的解決方案是將高分辨率圖像用於基於視網膜和非視網膜的WebViews。然後使用width和height屬性設置圖像的大小(以點爲單位)。
<img src="hi-res-icon.png" width="10px" height="10px" />
eek,對不起!我幾乎重複了Hafthor的回答 – mc7h 2011-07-20 12:23:37
我使用此JavaScript hack在視網膜設備上運行時加載縮放圖像。它將更改所有圖像上的src
和width
屬性以使用相應的縮放圖像。請注意,我只用本地圖像進行了測試。
設置display: none
然後在圖像加載接縫上重置它以修復一些閃爍。另請注意,此代碼可能與WebKit以外的其他瀏覽器不兼容。
document.addEventListener("DOMContentLoaded", function() {
var scale = window.devicePixelRatio;
// might want this to be scale != 2
if (scale == undefined || scale == 1) {
return;
}
var re = /^(.*)(\..*)$/;
var images = document.getElementsByTagName("img");
for (var i = 0; i < images.length; i++) {
var img = images[i];
var groups = re.exec(img.src);
if (groups == null) {
continue;
}
img.style.setProperty("display", "none");
img.addEventListener("load", function(event) {
event.target.width /= scale;
event.target.style.setProperty("display", "");
});
img.src = groups[1] + "@" + scale + "x" + groups[2];
}
});
提示是將其添加到名爲例如scaledimages.js
然後用
<script type="text/javascript" src="scaledimages.js"></script>
確保JS文件在「複製包資源」列出,並在你的目標不是在「編譯源」,「構建階段」。默認的Xcode接口將Javascript文件檢測爲它喜歡編譯的東西。還要注意,如果將來devicePixelRatio
碰巧等於或大於3,當前腳本可能會破壞事件,但現在可能需要將(scale == undefined || scale == 1)
更改爲scale != 2
,現在只需加載@2x
。
更新:還有一個jQuery-Retina-Display-Plugin,做類似的事情,但需要您設置width
屬性和接縫處還使用了HEAD
要求,看是否像存在,不知道如何將本地文件的工作。
我不明白爲什麼這會被拒絕投票。我已經在應用程序中使用了它,並且它工作正常,至少在小型HTML頁面上沒有很多圖像。但我承認這是一個醜陋的黑客:) – 2012-04-16 16:05:01
對不起,這是我。我以爲我投了票,但意外地必須按下向下按鈕,並且stackoverflow不會讓我改變它了。請更新答案,即使你有一個額外的空間:)我想這會讓我改變狀態。我自己測試了它,它像一個魅力。我也用它與小的HTML頁面。 – Mustafa 2012-04-17 04:57:38
:)我自己犯了同樣的錯誤。現在試試。 – 2012-04-17 05:57:52
鑑於沒有更好的答案進來,我接受這是一個可行的解決方案。理想情況下,UIWebView應該自己處理本地圖像,但檢查設備的屏幕比例和調整HTML相應的作品。 – 2010-09-19 12:18:34
在2x模式下的iPad上,縮放比例也是2.0。 – occulus 2011-05-27 15:09:42
當然,但這與iPhone應用程序無關。 iPad應用程序不能以縮放模式運行。因此,如果您在iPhone應用程序中正確處理這種情況,則不是問題。 :) – jer 2011-05-27 15:28:30