2012-05-21 28 views
3

我有一個顯示在UIWebView內的SVG文件。此SVG包含多個指示可觸摸元素的<a>標籤。加載SVG文件後,我想滾動視圖,使特定元素位於屏幕中心附近。如何將UIWebView中顯示的SVG文件的元素居中?

我有什麼到目前爲止是這樣的:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [diagramView stringByEvaluatingJavaScriptFromString:@"" 
     "var e = document.getElementById('myelement');" 
     "var top = e.offsetTop;" 
     "while (e.offsetParent) {" 
     " e = e.offsetParent;" 
     " top += e.offsetTop;" 
     "}" 
     "alert(top);" 
     //"scrollTo(0, top);" 
    ]; 
} 

然而,top結束是0每當這個運行。元素e指向SVG文件的正確<a>元素(使用alert(e.id)進行檢查)。我似乎無法找到給我實際偏移的元素屬性的正確組合。

我可以硬編碼一組適當的偏移量,但我並不是很想。

+0

UIWebView加載一個使用URI的SVG文檔,據我所知。因此,如果您添加要顯示的元素的ID的片段標識符,它是否將該元素的顯示居中?您將加載http://someDrawing.svg#aId,其中someDrawing.svg是您正在加載的內容,而aId是您希望顯示器按照http://www.w3.org/中心顯示的元素的ID TR/SVGTiny12/linking.html#LinksIntoSVG –

+0

@RobertLongson:我忘了提及我曾嘗試過,但我無法使用末尾的URL片段加載文件資源。此外,即使這樣做加載,它會將元素滾動到視圖的頂部*,但我希望元素更多地位於中心(有一部分圖表我想在*和*下面看到*和* )。我也嘗試過'e.scrollIntoView()',但這似乎並沒有工作(沒有滾動發生,就像問題中的代碼)。 –

+0

嗨@GregHewgill只是想檢查下面是否爲你工作 –

回答

0

請參閱getBBox,在http://www.w3.org/TR/SVG11/types.html#__svg__SVGLocatable__getBBox記錄(抱歉無法張貼的鏈接,這樣的bug)

一個快速演示是使用Chrome指定載入https://upload.wikimedia.org/wikipedia/commons/0/07/Wikipedia_logo_(svg).svg和運行$('#path3695').getBBox().y

和爲貴,只需要使用:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    [diagramView stringByEvaluatingJavaScriptFromString:@"" 
     "var e = document.getElementById('myelement');" 
     "var top = e.getBBox().y;" 
     "alert(top);" 
     "scrollTo(0, top);" 
    ]; 
} 
+0

你好@GregHewgill爲你做了這項工作嗎? –