c# - 联合或逻辑或在两个 CGPaths(或 CAShapeLayers)上创建一个

标签 c# ios xamarin.ios cashapelayer cgpath

我正在尝试在 iOS 中执行多个 CGPath 的联合。我怎样才能做到这一点?

我已经尝试使用“path.AddPath()”添加组合路径,但我得到了这个奇怪的伪像,就好像它在做一个连接而不是一个联合。我也尝试过使用“path.CopyByStrokingPath()”,但它也留下了这些奇怪的空白。我注意到 CopyByStrokingPath 的参数是“CGLineJoin”,但我真的想要“CGLineUnion”,但这似乎不存在。

基本上您在这里看到的是,我在每个对象周围制作一个圆形路径,然后在每个对象之间制作矩形路径以填充间隙。然后我将所有路径组合起来并在它们之间添加这些尴尬的空白(当我想要它完全填充时)。我可以让每个形状(圆形和矩形)成为一个单独的层,然后空间消失,但​​是我有 15 个单独的层只用于一张图......我真的只想组合路径并将它绘制到一个 CAShape 上图层

Screenshot of Joins

引用帖子

Multiple CGPaths to create one

How to implement boolean operations on bezier paths

最佳答案

事实证明,由点和线创建的矩形与通过 CGPath.AddRect 创建的矩形之间存在很大差异。

CGPath path = ...
CGRect rectToDraw = ...
CGAffineTransform transform = ....
path.AddRect (transform, rectToDraw);

当您想要重叠形状并让重叠部分像逻辑并集一样完全填充时,上述方法有效。

下面的代码不会像 Union 那样重叠,并且会产生原始帖子的屏幕截图中所见的尴尬间隙。它似乎与其他一些逻辑表达式重叠

CGPath path3 = new CGPath ();
path3.MoveToPoint (100, 100);
path3.AddLineToPoint (100, 250);
path3.AddLineToPoint (350, 250);
path3.AddLineToPoint (350, 100);
path3.CloseSubpath ();

关于c# - 联合或逻辑或在两个 CGPaths(或 CAShapeLayers)上创建一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910721/

相关文章:

c# - .Net Core MVC 应用程序的图像调整大小、裁剪、旋转库

c# - Visual Studio 如何在调试期间显示 System.Double?

ios - Xcode Device Simulator的文档目录路径

ios - 无法导入 robovm 绑定(bind)

svn - MonoDevelop 与 Team Foundation Server(TFS、SVN?)一起使用

c# - C++ 作为 Windows 游戏编程的第一语言?

javascript - 将参数传递给 Ajax 安全方式

ios - iphone 设备上的 UIPopoverController 替代品

xamarin.ios - Monotouch - 使 UIView 可滚动

c# - 在运行时从 iOS 上的 native 方法创建委托(delegate)