2017-05-07 4 views
2

私はSVGイメージをUIWebViewに読み込んでいますが、SVGイメージの選択位置からのレンダリングデータは発生していません。でも、私はこの機能に関する情報を得られなかったということについてもっと調べました。同様に、私はSVGKitを試しましたが、私はSVGKitの完全なシナリオを理解していなかったので、UIWebView.Ifを選択した理由は、ここでこの機能のplzコメントについて知っています。Obj Cでは、SVGの青写真画像を追加し、UIWebViewからデータをレンダリングする方法は?

SVGマップは以下のように見えます.iはSVG画像についてリンクがほとんど見つかりませんでしたが、UIWebViewではロードされません。 SVGKIT & chensheng12330/SVGKitDemo

enter image description here

答えて

3
//Create a empty test.html and override below html code and reload the Webview. 
    -(UIWebView *)setup{ 
     [email protected]"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; 
    } 
関連する問題