菜鸟教程小白 发表于 2022-12-13 08:46:18

iphone - UIWebview 操作 SVG 'on the fly'


                                            <p><p>我想知道如何操作已加载到 UIWebview 中的 SVG 文件。目前我正在将 SVG 文件加载到 HTML 文件中,然后将其加载到 UIWebview 中。我假设您会使用 Javascript 来执行此操作,但不确定具体是如何进行的。理想情况下,我希望能够在 iPad 应用程序中动态操作 SVG。我知道您可以将代码“注入(inject)”到 UIWebview 中,但我的尝试没有成功。清如泥?好吧,也许一些代码会有所帮助。</p>

<p>这是我如何将 html 文件加载到 ViewController.m 文件内的 UIWebview 中:</p>

<pre><code>- (void)viewDidLoad
{
    ;

    NSString*path    = [ pathForResource:@&#34;SVG&#34; ofType:@&#34;html&#34;];
    NSString*content = ;

    webView = ;
    webView.frame = CGRectMake(0, 0, 1024, 768);
    webView.dataDetectorTypes = UIDataDetectorTypeAll;
    webView.userInteractionEnabled = YES;
    bundleURL]];

    ;
    ;
}
</code></pre>

<p>这是加载到 UIWebview 中的 html 文件中的代码:</p>

<pre><code>&lt;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&gt;
&lt;head&gt;
    &lt;title&gt;SVG&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;object id=&#34;circle&#34; data=&#34;Circle.svg&#34; width=&#34;250&#34; height=&#34;250&#34; type=&#34;image/svg+xml&#34;/&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>...最后是 SVG 文件中的代码:</p>

<pre><code>&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
&lt;circle id=&#34;redcircle&#34; cx=&#34;200&#34; cy=&#34;50&#34; r=&#34;50&#34; fill=&#34;red&#34; /&gt;
&lt;/svg&gt;
</code></pre>

<p>这会在 UIWebview 中创建一个漂亮的红色小圆圈。现在我希望能够在 ViewController.m 文件中即时操作圆。例如,当用户触摸 iPad 屏幕时,将填充颜色属性更改为绿色。这甚至可能吗?</p>

<p>我希望这一切都有意义。这有点令人费解。但最终我要做的是在 HTML 框架中使用 SVG 动态创建图形并将其显示在 UIWebview 中。</p>

<p>任何帮助将不胜感激。谢谢。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以在页面首次加载后的任何时候通过将其传递给 webView 上的 stringByEvaluatingJavaScriptFromString 来执行任意 Javascript - 就像响应触摸事件一样。</p>

<p>因此,如果用于查找 SVG 对象并更改颜色的 Javascript 看起来像(YMMV,还没有实际测试过):</p>

<pre><code>var path=document.getElementById(&#34;circle&#34;).getSVGDocument().getElementById(&#34;redcircle&#34;);path.style.setProperty(&#34;fill&#34;, &#34;#00FF00&#34;, &#34;&#34;);
</code></pre>

<p>你可以执行它:</p>

<pre><code>NSString *string = @&#34;var path=document.getElementById(&#39;circle&#39;).getSVGDocument().getElementById(&#39;redcircle&#39;);path.style.setProperty(&#39;fill&#39;, &#39;#00FF00&#39;, &#39;&#39;);&#34;;
;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - UIWebview 操作 SVG&#39;on the fly&#39;,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6991828/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6991828/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - UIWebview 操作 SVG &#39;on the fly&#39;