Подтвердить что ты не робот

NSTextField с тенью?

Мне нужен NSTextFields, который я установил в Interface Builder, чтобы иметь тени. Я реализовал способ сделать это, который, кажется, работает, но я не уверен, правильно ли он.

То, что я сделал, это подкласс NSTextFieldCell следующим образом, а затем установить мой подкласс как тип ячейки NSTextField в IB. Есть ли проблема с этим подходом? Есть ли лучший способ?

#import "ShadowTextFieldCell.h"

static NSShadow *kShadow = nil;

@implementation ShadowTextFieldCell

+ (void)initialize
{
    kShadow = [[NSShadow alloc] init];
    [kShadow setShadowColor:[NSColor colorWithCalibratedWhite:0.f alpha:0.08f]];
    [kShadow setShadowBlurRadius:0.f];
    [kShadow setShadowOffset:NSMakeSize(0.f, -2.f)];
}

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
    [kShadow set];
    [super drawInteriorWithFrame:cellFrame inView:controlView];
}

@end
4b9b3361

Ответ 2

Нет ничего плохого в этом подходе. Другой вариант - сложить ваше текстовое поле (вызовите [textField setWantsLayer:YES] и использовать свойства CALayer shadow, но это часто нежелательный способ сделать это, потому что В Core Animation отсутствует рендеринг субпиксельного сглаживания.

Ответ 3

Самый простой способ -

[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised]; 

как и zpasternack, но это используется только для затенения по умолчанию, для пользовательского одного подкласса или использования слоя...