Добавьте ползунок непрозрачности на цветовую панель для одного цвета, но не для других

Я хотел бы добавить ползунок непрозрачности к NSColorPanel, который отображается для 1 конкретного NSColorWell. На всех остальных цветных лунках ползунок непрозрачности не должен отображаться.

Я знаю, что могу установить это для sharedColorPanel так:

 [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];

Но как мне это сделать, если мне нужно такое поведение только для одного цвета?

Я попытался добавить IBAction, но этот IBAction не вызывается, когда вы щелкаете мышью по цвету. (Поэтому я не могу вносить какие-либо изменения до отображения панели). Он вызывается, когда вы выбираете другой цвет на панели цветов.


person Community    schedule 03.03.2013    source источник


Ответы (4)


Хорошо, вот код, который работает. Установите для класса colorwell в IB значение AlphaColorWell: **

@implementation AlphaColorWell

- (void)activate:(BOOL)exclusive
{
    [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];
    [super activate:exclusive];
}

- (void)deactivate
{
    [super deactivate];
    [[NSColorPanel sharedColorPanel] setShowsAlpha:NO];
}

@end
person Community    schedule 04.03.2013

AppKit не показывает ползунок непрозрачности на панели, потому что считает, что приложение не поддерживает альфа-канал, который используется по умолчанию. Поэтому вместо подкласса просто сделайте следующее:

func applicationDidFinishLaunching(_ aNotification: Notification) {
    ...
    NSColor.ignoresAlpha = false
    ...
}
person John Scalo    schedule 20.04.2018
comment
Наиболее удобное и простое в реализации решение: D Еще работает - person Silviu St; 09.05.2020

class ANColorWell: NSColorWell {
override func activate(_ exclusive: Bool) {
    NSColorPanel.shared.showsAlpha = true;
    super.activate(exclusive);
}

override func deactivate() {
    NSColorPanel.shared.showsAlpha = false;
    super.deactivate();

}
}

Это версия swift4.0, которую я пробовал, и надеюсь, она будет вам полезна.

person Simon    schedule 26.08.2017

Ответ, как и в случае с большей частью AppKit, заключается в создании подклассов.

@interface AlphaColorPanel : NSColorPanel

@end

@implementation AlphaColorPanel

- (BOOL)showsAlpha {
    return YES;
}

@end

Затем перейдите в IB и переопределите класс панели единственного цвета, которую вы хотите показать альфа-ползунком.

person CodaFi    schedule 03.03.2013
comment
Спасибо, но как мне установить NSColorPanel для NSColorWell? Я могу изменить имя класса NSColorWell, но не вижу возможности изменить класс NSColorPanel для этого цвета. - person ; 03.03.2013
comment
Похоже, я могу создать подкласс NSColorWell и переопределить метод activate: и deactivate:. Это, вероятно, поможет. Спасибо. - person ; 04.03.2013