Как использовать изображение в качестве фона для текстового поля в Cocoa?
-
12-09-2019 - |
Вопрос
Можно ли использовать изображение в качестве фона для текстового поля в Какао?Если да, то как?
Решение
Я не знаю, является ли это «правильным» способом, но первое, что приходит на ум, — это создать собственный подкласс NSTextField, который может выглядеть примерно так:
- (void)awakeFromNib
{
[self setDrawsBackground:NO];
}
- (void)drawRect:(NSRect)rect
{
[super drawRect:rect];
[self lockFocus];
[[NSImage imageNamed:@"<#image filename#>"] drawInRect:rect
fromRect:rect
operation:NSCompositeSourceOver
fraction:1.0];
[self unlockFocus];
}
Опять же, это лишь приблизительный набросок основных частей.
В любом случае, как я уже сказал, я не уверен, действительно ли это «правильный» способ сделать это (или, если уж на то пошло, существует ли вообще «правильный» способ), но это даст вам фоновое изображение для вашего NSTextField. .
Отредактируйте ответ на комментарий Джошуа (мне не хватит места в этом крошечном поле для комментариев):
Чтобы добавить изображение в свой проект, вы должны перетащить его из любого места в окно проекта (основной список файлов в середине окна проекта, хотя в зависимости от того, как вы настроили среду редактирования Xcode, это у вас может быть по-другому).
Чтобы создать подкласс NSTextField
, вы захотите создать новый файл класса Objective-C (Файл -> Новый файл…), но отредактируйте заголовок так, чтобы класс наследовался от NSTextField
вместо NSObject
.Другими словами, ваш заголовочный файл может выглядеть так:
#import <Cocoa/Cocoa.h>
@interface BGImageTextField : NSTextField
{
}
@end
Что касается остальной части кода, вы можете добавить ее в основную часть файла реализации (BGImageTextField.m
, например), особенно между @implementation
и @end
ключевые слова.
Я также хотел бы упомянуть две вещи.Во-первых, я бы порекомендовал взять копию Программирование какао для Mac OS X, автор Аарон Хиллегасс — он охватывает большую часть основ какао, которые я только что рассмотрел, и является одним из лучших способов изучить какао в целом.Во-вторых, хотя мой подход и работает, возможно, это не лучший подход, тем более что я совсем недавно обнаружил эта почта, что, кажется, намекает на лучший способ расширения NSTextField.
Другие советы
Вместо создания подкласса NSTextField просто сделайте цвет фона прозрачным [NSColor ClearColor] и поместите за ним изображение.