我想为NSColorPanel添加一个不透明度滑块,该滑块显示为1个特定的NSColorWell。所有其他颜色的孔不应显示不透明度滑块。
我知道我可以为sharedColorPanel设置这样:
[[NSColorPanel sharedColorPanel] setShowsAlpha:YES];
但是,如果我只希望单一颜色的这种行为,我该怎么做呢?
我尝试添加IBAction,但是当您单击颜色时不会调用此IBAction。 (因此,在显示面板之前,我无法进行任何更改)。在颜色面板中选择其他颜色时会调用它。
答案 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版本,希望对你有用