SVGKit的下载、集成在上篇文章中(http://blog.youkuaiyun.com/guobing19871024/article/details/52643358)提到过,这篇文章中介绍一下在实际使用过程中的一些重要操作:
1、加载svg图片并显示:
<pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;">//加载本地文件,也可以加载网络文件,</span><span style="font-family: Arial, Helvetica, sans-serif;">SVGKImage提供了相应方法</span>
SVGKImage *svgImg=[SVGKImage imageWithContentsOfFile:svgName];//加载svg图
//文档上推荐使用 SVGKFastImageView,显示比较快,也不用做其他操作;当然也可以有其他的方法,具体参考文档,只不过麻烦一点
SVGKFastImageView<span style="font-family: Arial, Helvetica, sans-serif;"> *contentView=[[SVGKFastImageView alloc] initWithSVGKImage:svgImg];//用于svg图的显示</span>
CGPoint hitPoint = [recognizer locationInView:self.contentView];//获取到点击到的点:地图上的点而不是scrollView上的
CALayer *svgLayer= ((SVGKFastImageView*)self.contentView).image.CALayerTree;//获取到svg图片的layer
SVGKImage *svgImage=((SVGKFastImageView*)self.contentView).image;//获取到svg图片
//显示的内容和实际的图片的比例:SVGKFastImageView不能够改变
CGSize actualPercentage=self.zoomedSize;//对应的缩放比例,不然获取的展示在图上不准
//获取实际在SVGKFastImageView上点击的点
hitPoint=CGPointApplyAffineTransform( hitPoint, CGAffineTransformInvert( CGAffineTransformMakeScale(actualPercentage.width, actualPercentage.height)));
//获取点击点层包含实际点击点的图层
CALayer *hitLayer = [svgLayer hitTest:hitPoint]; //SVGKFastImageView的图层不能改变,即是说改变的图层不能再屏幕上显示出来,因此必须自定义一个图层(和点击选中的图层frame一样)
CALayer *absoluteCloneHitLayer = [svgImage newCopyPositionedAbsoluteOfLayer:hitLayer];
SVGKImage *svgImage=((SVGKFastImageView*)contentView).image;//获取到svg图片
//获取SVGDocument
SVGDocument *domDocument=svgImage.DOMDocument;
NSString *xmlTagID = [<span style="font-family: Arial, Helvetica, sans-serif;">absoluteCloneHitLayer </span>valueForKey:kSVGElementIdentifier];
Element *svgElement = [domDocument getElementById:xmlTagID];
// if([svgElement isKindOfClass:[SVGPathElement class]]){
// svgPathElement=(SVGPathElement *)svgElement;
// }
return svgElement;
4、获取选中svg元素所在区域的CGRect
//获取元素所在区域的CGRect
NSString *identity=[element getAttribute:@"id"];
SVGKImage *svgImage=((SVGKFastImageView*)contentView).image;
CALayer *cloneLayer = [svgImage newCopyPositionedAbsoluteLayerWithIdentifier:identity];
return cloneLayer.frame;