2011-08-09 43 views
2

我想知道如何操纵我已经加载到UIWebview的SVG文件。目前我正在将SVG文件加载到HTML文件中,然后将其加载到UIWebview中。我认为你会使用Javascript来做到这一点,但我不知道如何完全去做。理想情况下,我希望能够在iPad应用程序中随时操作SVG。我知道你可以将代码'注入'UIWebview,但是我的尝试没有成功。清除泥浆?那么也许一些代码会有所帮助。UIWebview操纵SVG'飞'

这里是我的HTML文件加载到的UIWebView视图控制器内.m文件:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString* path = [[NSBundle mainBundle] pathForResource:@"SVG" ofType:@"html"]; 
    NSString* content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 

    webView = [UIWebView new]; 
    webView.frame = CGRectMake(0, 0, 1024, 768); 
    webView.dataDetectorTypes = UIDataDetectorTypeAll; 
    webView.userInteractionEnabled = YES; 
    [webView loadHTMLString:content baseURL:[[NSBundle mainBundle] bundleURL]]; 

    [self.view addSubview:webView]; 
    [webView release]; 
} 

这里是被装入的UIWebView html文件内的代码:

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>SVG</title> 
    </head> 
    <body> 
    <object id="circle" data="Circle.svg" width="250" height="250" type="image/svg+xml"/> 
    </body> 
</html> 

...最后这里是SVG文件中的代码:

<svg xmlns="http://www.w3.org/2000/svg"> 
<circle id="redcircle" cx="200" cy="50" r="50" fill="red" /> 
</svg> 

它创建了一个很好的升在UIWebview中出现红圈。现在我想能够在视图控制器.m文件中回放操作该圆。例如,当用户触摸iPad屏幕时,将填充颜色属性更改为绿色。这甚至有可能吗?

我希望这一切都有道理。这有点复杂。但最终我想要做的是用SVG在HTML框架中随时创建图形并将其显示在UIWebview中。

任何帮助,将不胜感激。谢谢。

回答

3

您可以在页面第一次加载之后的任意时刻,通过将它传递给webView上的stringByEvaluatingJavaScriptFromString来执行任意Javascript - 就像响应触摸事件一样。

所以如果Javascript功能来找到SVG对象,并改变颜色看起来像(因人而异,并没有实际测试过这一点):

NSString *string = @"var path=document.getElementById('circle').getSVGDocument().getElementById('redcircle');path.style.setProperty('fill', '#00FF00', '');"; 
[webView stringByEvaluatingJavaScriptFromString:string]; 
+0

var path=document.getElementById("circle").getSVGDocument().getElementById("redcircle");path.style.setProperty("fill", "#00FF00", ""); 

你可以用它执行感谢您的答复。我尝试了你的建议,但唉,这个圈子仍然顽固地发红。我尝试在添加UIWebview之后执行代码并在触摸事件中没有成功。这与我如何设置HTML和SVG有关吗? – Kangoo

+0

不,这是我的错。 :)获取红色圆形对象以便可以更改颜色需要两个步骤 - (1)getElementById('circle')获取SVG对象,然后(2)getElementById('redcircle')获取圆形本身。我错过了我给出的示例代码中的一个步骤。现在更正。 – Euan

+0

伴侣,你是一个血腥的传奇!谢谢你的帮助。非常感激。 – Kangoo