Попробуйте обернуть элементы NSShadow и Bezier для заполнения пути (например, от aPath = [[NSBezierPath bezierPath] retain];
до [fillGradient release];
) в [NSGraphicsContext saveGraphicsState]
и [NSGraphicsContext restoreGraphicsState]
.
Кроме того, тень может быть обрезана границами вида (я не помню, правда это или нет).
(Кроме того, «более правильный» способ сделать это, вероятно, заключался бы также в создании подкласса NSButtonCell
, переопределении drawWithFrame:inView:
/ -drawInteriorWithFrame:inView:
и возврате пользовательского класса ячейки из метода +cellClass
вашей кнопки (убедившись, что установить правильный класс ячеек в IB или поменять его в кнопке -initWithCoder:
). Однако способ, которым вы делаете это, может удовлетворить ваши потребности.)