UIWebview манипулирует SVG "на лету" - PullRequest
2 голосов
/ 09 августа 2011

Я хотел бы знать, как манипулировать файлами SVG, которые я загрузил в UIWebview. В настоящее время я загружаю файл SVG в файл HTML, а затем загружаю его в UIWebview. Я предполагаю, что вы будете использовать Javascript для этого, но я не уверен, как именно это происходит. В идеале я хотел бы иметь возможность манипулировать SVG на лету в приложении для iPad. Я знаю, что вы можете «внедрить» код в UIWebview, но мои попытки не увенчались успехом. Ясно как грязь? Ну, возможно, немного кода поможет.

Вот как я загружаю 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];
}

Вот код внутри html-файла, который загружается в UIWebview:

<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.

Любая помощь будет оценена. Благодарю.

1 Ответ

3 голосов
/ 09 августа 2011

Вы можете выполнить произвольный Javascript, передав его в stringByEvaluatingJavaScriptFromString в webView в любой точке после первой загрузки страницы - как в ответ на событие касания.

Так что, если Javascript для поиска объекта SVG и изменения цвета выглядит примерно так (YMMV, на самом деле не проверял это):

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

Вы можете выполнить это с:

NSString *string = @"var path=document.getElementById('circle').getSVGDocument().getElementById('redcircle');path.style.setProperty('fill', '#00FF00', '');";
[webView stringByEvaluatingJavaScriptFromString:string];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...