将不透明度滑块添加到颜色面板中以获得一种颜色,但不添加其他颜色

时间:2013-03-03 18:21:30

标签: objective-c cocoa nscolorpanel nscolorwell

我想为NSColorPanel添加一个不透明度滑块,该滑块显示为1个特定的NSColorWell。所有其他颜色的孔不应显示不透明度滑块。

我知道我可以为sharedColorPanel设置这样:

 [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];

但是,如果我只希望单一颜色的这种行为,我该怎么做呢?

我尝试添加IBAction,但是当您单击颜色时不会调用此IBAction。 (因此,在显示面板之前,我无法进行任何更改)。在颜色面板中选择其他颜色时会调用它。

4 个答案:

答案 0 :(得分:11)

好的,这是有效的代码。将IB中的colorwell类设置为AlphaColorWell:**

@implementation AlphaColorWell

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

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

@end

答案 1 :(得分:3)

AppKit没有在面板中显示不透明度滑块,因为它认为应用程序不支持alpha,这是默认设置。因此,而不是子类,只需这样做:

func applicationDidFinishLaunching(_ aNotification: Notification) {
    ...
    NSColor.ignoresAlpha = false
    ...
}

答案 2 :(得分:2)

答案就像处理大多数AppKit一样,是子类。

@interface AlphaColorPanel : NSColorPanel

@end

@implementation AlphaColorPanel

- (BOOL)showsAlpha {
    return YES;
}

@end

然后进入IB并覆盖要显示alpha滑块的奇异颜色面板的类。

答案 3 :(得分:1)

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版本,希望对你有用