微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以通过 [NSString drawAtPoint] 绘制文本或在 Metal 视图中显示 NSButton?

如何解决是否可以通过 [NSString drawAtPoint] 绘制文本或在 Metal 视图中显示 NSButton?

我需要在我的 Metal 应用中渲染一些文本。与其手动操作,不如使用 Apple 的文本渲染 API。

一个简单的空窗口的 drawRect调用代码打印字符串:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:26],NSFontAttributeName,[NSColor blackColor],NSForegroundColorAttributeName,nil];

NSAttributedString * s = [[NSAttributedString alloc] initWithString:@"Hello!"
attributes: attributes];


[s drawAtPoint:NSMakePoint(300,300)];

但这在具有 Metal 视图的窗口中不起作用。我猜一切都被冲淡了?

有可能吗?与在 Metal 视图顶部显示按钮 (NSButton) 相同。

谢谢。

解决方法

有可能,但并不简单。您需要将 drawViewHierarchyInRectUILabelUIButton 一起使用,并传递从 CVPixelBufferRef 创建的上下文。从那里,您需要使用金属 API 将 CVPixelBufferRef 链接到金属纹理,然后您可以正常绘制。我不建议每帧都这样做。

如果您需要一些用金属渲染的精美 UI,可能有更好的选择,或者您可以在金属视图顶部的 UIView 中渲染标签、按钮等。

您的文本需要在 3D 世界中还是在 2D 中叠加?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?