Как вы можете использовать изображение в качестве фона для текстового поля в какао? - PullRequest
3 голосов
/ 19 апреля 2009

Можно ли использовать изображение в качестве фона для текстового поля в какао? Если да, то как?

Ответы [ 2 ]

4 голосов
/ 20 апреля 2009

Я не знаю, является ли это «правильным» способом сделать это, но первое, что приходит на ум, - это создать собственный подкласс 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.

Я также хотел бы упомянуть две вещи. Во-первых, я бы порекомендовал взять копию Aaron Hillegass Cocoa Programming для Mac OS X - она ​​охватывает большинство основ Cocoa, которые я только что изучил, и является одним из лучших способов изучения Какао в целом. Во-вторых, хотя мой подход работает, это, вероятно, не самый лучший подход, тем более что я недавно нашел этот пост , который, похоже, намекает на лучший способ расширения NSTextField.

3 голосов
/ 20 апреля 2009

Вместо создания подкласса NSTextField, просто сделайте цвет фона прозрачным [NSColor clearColor] и поместите изображение за ним.

...