xamarin 在Mac上裁剪贝塞尔圆

bfrts1fy  于 2022-12-07  发布在  Mac
关注(0)|答案(1)|浏览(123)

我的应用程序在Mac和iOS上运行。(两个代码库,有很多共享代码)。
我有一段通用代码,可以将一个形状转换为NSBezierPath/UIBezierPath。这两段代码完全相同--除了NS*/UI*。然后我创建了一个CAShapeLayer,并将该层的路径设置为贝塞尔路径。该层被添加到视图中的一组层中。同样......这是iOS和Mac之间的通用代码。
一种形状是简单的圆。为了创建这种形状,我调用:

path.AddArc(point.CGPoint(), width/2, 0, (float)(2 * Math.PI), true);

当我把这个添加到我的层中时...我得到了一个剪辑的圆圈,但只在Mac上。在iOS上这非常好用。

我尝试切换到带椭圆形矩形的追加路径:

path.AppendPathWithOvalInRect(rect);

这提供了稍微不同的剪辑方向:

层结构非常简单,在Mac和iOS之间是相同的。

var layer = new CAShapeLayer();
layer.LineWidth = 0f;
layer.FillColor = color;
layer.StrokeColor = color;
layer.Path = GetBezier().CGPath();

objectLayer.AddSubLayer(layer);

我在其他任何物体上都看不到遮罩或裁剪的证据。只有我所有的圆圈,而且只在Mac上。
我在下面还包括了一些简单对象的例子--线、粗线、圆。你可以看到所有的圆都有这种奇怪的剪裁。

有什么想法,我可能错过了这里?谢谢你的帮助...

guicsvcw

guicsvcw1#

我有个办法
结果发现我遗漏了一个ClosePath()。
有趣的是... iOS不需要ClosePath调用。在Mac上,以下调用 * 不 * 需要ClosePath调用:AddArc、FromOvalInRect、AppendPathWithArc。以下调用似乎不需要ClosePath调用:因为我可以用它来画一个完美的圆。

相关问题