NSTextField с тенью?
Мне бы хотелось, чтобы в NSTextFields, которые я настроил в Интерфейсном Разработчике, были тени. Я реализовал способ сделать это, который, кажется, работает, но я не уверен, что это правильный путь.
То, что я сделал, это подкласс 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
3 ответа
Вместо того, чтобы подкласс, вы можете просто использовать NSCell's setBackgroundStyle:
[[aTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
Смотрите этот похожий вопрос;
В этом подходе нет ничего плохого. Другой вариант будет слой назад вашего текстового поля (вызов [textField setWantsLayer:YES]
и использовать свойства тени CALayer, но это часто нежелательный способ сделать это, потому что при рендеринге текста в Core Animation отсутствует субпиксельное сглаживание.
Самый простой способ
[[yourTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];
как сказал zpasternack, но это используется только для теневого копирования по умолчанию, для пользовательского подкласса или для использования слоя...