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

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

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

 [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];

Но как мне это сделать, если я хочу, чтобы это поведение было хорошо только для одного цвета?

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

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

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

func applicationDidFinishLaunching(_ aNotification: Notification) {
    ...
    NSColor.ignoresAlpha = false
    ...
}
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, которую я пробовал. Надеюсь, она вам пригодится

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

@interface AlphaColorPanel : NSColorPanel

@end

@implementation AlphaColorPanel

- (BOOL)showsAlpha {
    return YES;
}

@end

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

Другие вопросы по тегам