Можно ли рисовать текст с помощью [NSString drawAtPoint] или отображать NSButton внутри представления Metal?

Мне нужно отобразить текст в моем приложении Metal. Вместо того, чтобы делать это вручную, я бы хотел использовать API рендеринга текста Apple.

Вызов этого кода в простом пустом окне 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. Я так понимаю все смывается?

Является ли это возможным? И то же самое с отображением кнопки (NSButton) поверх Metal view.

Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
204
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Можно, но не просто. Вам нужно будет использовать drawViewHierarchyInRect с UILabel или UIButton и передать контекст, созданный из CVPixelBufferRef. Оттуда вам нужно использовать API металла, чтобы связать CVPixelBufferRef с металлической текстурой, которую затем вы можете рисовать как обычно. Я бы не рекомендовал делать это каждый кадр.

Если вам нужен какой-то причудливый пользовательский интерфейс, который визуализируется с помощью металла, вероятно, есть лучшие альтернативы, или вы можете просто отображать свои метки, кнопки и т. д. Внутри UIView поверх вашего металлического вида.

Ваш текст должен быть в 3D-мире или он накладывается сверху в 2D?

Спасибо. Текст должен быть поверх 2D.

Alex 25.12.2020 09:03

В этом случае просто прозрачный вид пользовательского интерфейса поверх вашего металлического вида должен отлично работать!

jjxtra 25.12.2020 19:08

Большое спасибо. Одна последняя вещь. Могу ли я использовать рендеринг шрифтов Apple, чтобы записать строку в текстуру, чтобы отобразить ее через Metal? Это должно быть проще, чем использование UILabel. Я думаю, что Valve делает что-то подобное с GDI+ здесь: github.com/lua9520/source-engine-2018-hl2_src/blob/master/vg‌​ui2/…

Alex 26.12.2020 00:05

Да, вы можете писать в текстуру, см. начало моего ответа об использовании буфера пикселей cv и сопоставлении его с текстурой.

jjxtra 26.12.2020 00:06
stackoverflow.com/questions/37445052/…
jjxtra 26.12.2020 00:06

@jixtra Мне удалось заставить это работать с UILabel через drawViewHierarchyInRect, но я бы не хотел создавать UILabel только для рендеринга строки. Могу ли я использовать его с [NSString drawAtPoint]?

Alex 12.01.2021 05:31

Другие вопросы по теме