[英]Suggestions for how to communicate from JS running in a UIWebView to the hosting obj-c app?
[英]In Obj C, How to add SVG blueprint image and rendering the data from UIWebView?
我已经将SVG图像加载到了UIWebView中,它具有工作魅力,但是未发生从SVG图像的选定位置渲染数据的情况。 即使我被搜索了更多的信息,也没有得到关于此功能的任何信息。 同样,我尝试了SVGKit,但是我不了解SVGKit的完整情况,所以选择UIWebView的原因。如果有人知道此功能,请在此处评论。
SVG地图似乎如下所示。我发现有关SVG图片的链接很少,但UIWebView并未加载这些链接。 SVGKIT和chensheng12330 / SVGKitDemo
//Create a empty test.html and override below html code and reload the Webview.
-(UIWebView *)setup{
self.svgName=@"third";
//create a webview
UIWebView *webview = [[UIWebView alloc] init];
//create a empty html file and convert the svg into html and save dynamically
NSString *testPath = [[NSBundle mainBundle]pathForResource:@"test"ofType:@"html"inDirectory:nil ];
NSString *filePath = [self writeAndAppendString:[self getHTMLStringForLoadSVG:[self.svgName stringByAppendingString:@".svg"]] toFile:testPath];
//load svg file into the webview
//NSString *path = [[NSBundle mainBundle] pathForResource:@"loadSVG" ofType:@"html"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
NSURLRequest *req = [NSURLRequest requestWithURL:fileURL];
[ webview loadRequest:req];
[ webview setScalesPageToFit:YES];
[webview setUserInteractionEnabled:NO];
// webview.contentMode = UIViewContentModeScaleAspectFit;
[webview setBackgroundColor:[UIColor cyanColor]];
webview.delegate = self;
return webview;
}
//HTML file
-(NSString *)getHTMLStringForLoadSVG :(NSString *)svgFileName{
NSString *jQueryLib = @"https://code.jquery.com/jquery-3.2.1.min.js";
NSString *idOfJQuery = @"test";
NSString *type = @"image/svg+xml";
NSString *id = @"test";
return [NSString stringWithFormat:@"<!DOCTYPE html>\n<html>\n<head>\n<script src='%@'></script>\n<script>\n window.clickedId;\n$(document).ready(function() {\nvar embed = document.getElementById('%@');\nembed.addEventListener('load', function(){\nvar svg = embed.getSVGDocument();\nvar pathElements = svg.getElementsByTagName('path');\nfor(var i=0;i<pathElements.length;i++){\n$(pathElements[i]).bind('click', function() {\nwindow.clickedId = $(this).attr('id');\n});\n}});\n});\nfunction clicked(){\n return window.clickedId;\n}</script>\n</head>\n<body>\n<embed src='%@' type='%@' id='%@'/>\n</body>\n</html>", jQueryLib,idOfJQuery,svgFileName,type,id];
}
- (void)tapAction:(UITapGestureRecognizer *)sender{
[self performSelector:@selector(getJSObj) withObject:nil afterDelay:1.0];
}
-(void)getJSObj{
NSLog(@"return value :%@",[self.self.mapWebview stringByEvaluatingJavaScriptFromString:@"clicked()"]);
}
//write the code of converting svg to html code dynamically
- (NSString *)writeAndAppendString:(NSString *)str toFile:(NSString *)fileName {
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:fileName]) {
NSString *testP = [[paths firstObject] stringByAppendingPathComponent:@"testHtml.html"];
NSString *testPath = [[NSBundle mainBundle]pathForResource:svgName ofType:@"svg"inDirectory:nil ];
NSString *testSvgP = [[paths firstObject] stringByAppendingPathComponent:[svgName stringByAppendingString:@".svg"]];
[[NSFileManager defaultManager] copyItemAtPath:testPath toPath:testSvgP error:nil];
[[NSFileManager defaultManager] copyItemAtPath:fileName toPath:testP error:nil];
// Add the text at the end of the file.
NSFileHandle *fileHandler = [NSFileHandle fileHandleForUpdatingAtPath:testP];
// [fileHandler seekToEndOfFile];
[fileHandler writeData:data];
[fileHandler closeFile];
return testP;
}
return nil;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.