Установка фона NSBox на градиент программно без подкласса

Я хочу, чтобы фон NSBox был градиентным. В Interface Builder можно установить цвет фона от NSBox до selectedMenuColor, который является градиентом.

NSBox имеет только метод setFillColor, так как же Interface Builder заполняет его градиентом?

Как мне программно заполнить NSBox без его подкласса? Было бы тривиально создать подкласс NSBox, но работа Interface Builder предполагает, что может быть лучшее решение.


person Community    schedule 11.11.2008    source источник
comment
Есть новости за 2013 год?   -  person Bertrand Caron    schedule 31.10.2013


Ответы (4)


selectedMenuColor — это «магический» цвет, который не отображается как сплошной цвет. Многие из этих «магических» цветов существуют в системе.

Я использовал colorWithPatternImage: для этого раньше. Но учтите, что изображение, которое вы используете в качестве шаблона, будет мозаичным, поэтому вам, вероятно, придется изменить размер изображения до размера блока.

person Dave Dribin    schedule 12.11.2008

Вероятно, самое близкое, что вы могли бы сделать, это использовать NSColor, созданный с помощью colorWithPatternImage:, затем создать нужный градиент в качестве изображения и загрузить его. Некрасиво, но должно работать. Я думаю, что подклассы - ваш лучший выбор.

person Ben Gottlieb    schedule 11.11.2008

Цвет selectedMenuColor на самом деле является предварительно обработанным изображением градиента, а не градиентом, нарисованным на лету, поэтому нет никакого способа указать произвольный градиент в качестве цвета фона. Как сказал Бен, подклассы — это, вероятно, правильный путь.

person Brian Webster    schedule 11.11.2008

В xib выберите NSBox, затем перейдите к инспектору эффектов, отметьте NSBox для Core Animation Layer. В настоящее время

IBOutlet NSBox *box;

[box.setWantsLayer:YES];

[box.layer setBackgroundColor:[[NSColor whiteColor] CGColor]];

or

[box.setWantsLayer:YES];

[box.layer setBackgroundColor:[[NSColor colorWithPatternImage:[NSImage imageNamed:@"white.gif"]] CGColor]];
person Surjeet    schedule 18.07.2013