从两个相交的多边形创建一个新的MKPolygon

3
我知道有一个关于这个问题的具体问题,但它有点陈旧,如果可能的话,我想更加深入地讨论一下技术方面的内容。
首先看一下这个屏幕截图:https://www.dropbox.com/s/f94q3qaxrog0ec9/intersections.png 我希望实现的是,当两个多边形相交时,“我可以看到它们的交点,并且在那里发生时,我不想绘制这些多边形的'部分'”。在这种情况下,我想绘制两个多边形,但不绘制在橙色多边形内部的黄色多边形的“路径”。这不仅包括线条,也包括填充颜色。
显然,这很棘手,因为您不总是会在每个多边形路径上准确的交点上与另一个多边形路径相交。如您从这个屏幕截图中可以看到,为了使此可能,我认为需要将它们相交的点重新获取回来。
在做到这一点并假设我能够做到这一点后,我不知道是否有办法使用CGPathRef类完成我需要做的事情。显然,我将不得不重新创建多边形,但根据文档,除非它是封闭路径,否则无法填充它。那么如何填充没有相交的多边形而不关闭路径呢?
我唯一能想到的就是“隐藏”相交的多边形部分,但不确定如何做到这一点。有人可以提供帮助/见解吗?

1
你要找的词是“联合”,而不是“交集”。 - malhal
请查看https://stackoverflow.com/a/52051890/4260691 - OhadM
3个回答

2

给你。我写了一个Objective-C的包装器,用于Alan的GPC库。请查看MKPolygon-GPC


0
经过数日调查,这是我在Swift 4中找到的解决方案:
1)前往此处克隆项目
2)将以下内容拖放到您的项目中:
- MKPolygon+GPC.m - MKPolygon+GPC.h - gpc232(文件夹)
3)创建一个桥接头文件(这里有一个教程
4)打开您的桥接头文件并添加以下内容:
#import "MKPolygon+GPC.h"

5) 在你的视图控制器中,使用这个方法来合并你的两个多边形:

let mergedPolygon = polygon1.fromUnion(with:polygon2) 

注意:当前库存在崩溃问题,我已经修复了它,但是我正在等待我的拉取请求被审核。感谢SunGard-Labs提供的框架!


不需要执行这些步骤。你只需要在你的podfile中添加相关的pod,然后执行pod update命令,并将库导入到你的Swift文件中即可。我刚刚测试过了,它可以正常工作。 - OhadM

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接