Добавьте ползунок непрозрачности на цветовую панель для одного цвета, но не для других
Я хотел бы добавить ползунок непрозрачности в 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 и переопределите класс единственной цветной панели, которую вы хотите показать альфа-слайдер.