如何将 NSBezierPath 转换为 CGPath
我如何在 NSBezierPath
和 CGPath
之间进行转换。
谢谢。
How can i convert between NSBezierPath
to CGPath
.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我如何在 NSBezierPath
和 CGPath
之间进行转换。
谢谢。
How can i convert between NSBezierPath
to CGPath
.
Thanks.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
来自Apple文档: 从 NSBezierPath 对象创建 CGPathRef
这是相关代码。
Bug Reporter
rdar://15758302:NSBezierPath 到 CGPath。
Right from Apple documentation: Creating a CGPathRef From an NSBezierPath Object
Here is the relevant code.
Bug Reporter
rdar://15758302: NSBezierPath to CGPath.
Xcode 8 GM 中的语法得到了进一步简化,代码是根据上面 rob-mayoff 的答案修改的。使用这个和
addLine(to point: CGPoint)
的帮助器我正在跨平台共享绘图代码。The syntax in Xcode 8 GM has been further simplified, code modified from rob-mayoff's answer above. Using this and a helper for
addLine(to point: CGPoint)
I am sharing drawing code cross platform.这适用于 Swift 3.1 及更高版本:
This works in Swift 3.1 and later:
为了更好地使用 macOS - CGMutablePath
但是,如果你想要
cgPath
对于NSBezierPath
:Swift 5.0
For macOS better use - CGMutablePath
But, if you want
cgPath
forNSBezierPath
:Swift 5.0
如果其他人发现需要的话,这里有一个 Swift 版本:
Here is a Swift version if anyone else finds a need for it:
我不明白为什么接受的答案添加了一些复杂的闭合路径逻辑(也许在某些情况下需要),但对于那些只需要路径的原始转换的人来说,这里是干净的该代码的版本,作为常规方法实现:
顺便说一句,我需要它来实现“NSBezierPath 笔划包含点”方法。
我寻找了这个转换来调用 CGPathCreateCopyByStrokingPath() ,它将
NSBezierPath
笔画轮廓转换为常规路径,因此您也可以测试笔画的命中,这是解决方案:这与 Qt 中的
QPainterPathStroker
类似,但适用于NSBezierPath
。I can't figure out why the accepted answer adds some sophisticated close-path logic (maybe it is needed under some circumstances), but for those who just need a pristine conversion of the path, here is cleaned version of that code, implemented as a regular method:
Btw, I needed this to implement "NSBezierPath stroke contains point" method.
I've looked for this conversion to call
CGPathCreateCopyByStrokingPath()
, that convertsNSBezierPath
stroke outline to regular path, so you can test hits on strokes too, and here is the solution:This is similar to
QPainterPathStroker
from Qt, but forNSBezierPath
.时间:2019-03-17 标签:c#Xamarin
c# Xamarin
如果您的目标平台是 macOS 14,则
cgPath
已经是NSBezierPath
API 的一部分。WWDC 视频:https://developer.apple.com/videos/ play/wwdc2023/10054/?time=676
文档:https: //developer.apple.com/documentation/appkit/nsbezierpath/4191603-cgpath
If you are targeting macOS 14 then
cgPath
is already part of theNSBezierPath
API.WWDC video: https://developer.apple.com/videos/play/wwdc2023/10054/?time=676
Documentation: https://developer.apple.com/documentation/appkit/nsbezierpath/4191603-cgpath