- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Catalyst 应用程序中,我使用 Mac Helpers 存储库中的代码生成一个带有回调的 NSColorPanel
。
@interface IPDFMacColorPanel : NSObject
+ (void)showColorPanelWithColorChangeHandler:(void(^)(UIColor *color))colorChangeHandler;
/// Hides the color picker panel and removes the colorChangeHandler observer
+ (void)hide;
+ (void)removeColorChangeHandlerObserver;
@end
@interface NSColorPanel_Catalyst : NSObject
+ (instancetype)sharedColorPanel;
- (void)makeKeyAndOrderFront:(id)sender;
- (void)orderFront:(id)sender;
- (void)orderOut:(id)sender;
- (void)setTarget:(id)target;
- (void)setAction:(SEL)action;
- (UIColor *)color;
@end
@interface IPDFMacColorPanel ()
@property (nonatomic,copy) void(^colorChangeHandler)(UIColor *color);
@end
@implementation IPDFMacColorPanel
+ (instancetype)sharedPanel
{
static IPDFMacColorPanel *panel = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
panel = [IPDFMacColorPanel new];
});
return panel;
}
+ (NSColorPanel_Catalyst *)colorPanel
{
return [NSClassFromString(@"NSColorPanel") performSelector:@selector(sharedColorPanel)];
}
+ (void)showColorPanelWithColorChangeHandler:(void(^)(UIColor *color))colorChangeHandler
{
IPDFMacColorPanel *observer = [IPDFMacColorPanel sharedPanel];
observer.colorChangeHandler = colorChangeHandler;
NSColorPanel_Catalyst *colorPanel = [self colorPanel];
[colorPanel setTarget:observer];
[colorPanel setAction:@selector(colorChange:)];
[colorPanel orderFront:nil];
}
+ (void)hide
{
[[self colorPanel] orderOut:nil];
[self removeColorChangeHandlerObserver];
}
+ (void)removeColorChangeHandlerObserver
{
[IPDFMacColorPanel sharedPanel].colorChangeHandler = nil;
}
- (void)colorChange:(NSColorPanel_Catalyst *)colorPanel
{
if (self.colorChangeHandler) self.colorChangeHandler(colorPanel.color);
}
@end
我是这样生成它的:
IPDFMacColorPanel.show { (color) in
if let color = color {
self.saveColor(color)
}
}
然后写入到Realm中:
public func saveColor(_ color: UIColor) {
try! realm.write {
let converted = ColorUtility.convert(color: color)
if let green = converted["green"] {
self.restaurant.green = green
}
if let red = converted["red"] {
self.restaurant.red = red
}
if let blue = converted["blue"] {
self.restaurant.blue = blue
}
if let alpha = converted["alpha"] {
self.restaurant.alpha = alpha
}
}
}
但是,发生的事情是,因为我收到了太多回调,Realm 正在写入大量颜色,导致颜色面板滞后。我有什么办法可以解决这个问题吗?
最佳答案
合并 Objective-C 端的写入。
// new property - add after `@interface IPDFMacColorPanel` line
@property (nonatomic,copy) UIColor *pendingNewColor;
- (void)colorChange:(NSColorPanel_Catalyst *)colorPanel
{
if (self.pendingNewColor) {
self.pendingNewColor = colorPanel.color;
} else {
self.pendingNewColor = colorPanel.color;
[self performSelector:@selector(doUpdateColor:) withObject:nil afterDelay:0.4];
}
}
- (void)doUpdateColor:(id)ignore {
UIColor *color = self.pendingNewColor;
self.pendingNewColor = nil;
if (self.colorChangeHandler) self.colorChangeHandler(color);
}
当颜色改变时,如果存在挂起的颜色,它假定 doUpdateColor: 消息将在 0.4 秒内发送并且只更新挂起的颜色,否则它设置挂起的颜色并调度要发送的 doUpdateColor: 消息.
此解决方案牺牲了一些明显的响应能力。您也可以在接收 Swift 端做类似的事情,通过将颜色存储在某处并且暂时不将其写入 Realm,这将保持即时响应,但如果某些东西正在使用颜色从 Realm 读取刚刚写入的值,那里仍然会有延迟。
关于swift - Realm 写入使 NSColorPanel 滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58714205/
是否可以从 NSColorWell 制作一个 NSColorPanel“弹出”,几乎像一个弹出菜单? 我不喜欢它作为调色板的实现方式,因为有时它与哪个 NSColorWell 关联并不明显。 谢谢!
我正在使用 NSColorWell,它被设置为持续更新。我需要知道用户何时完成从颜色面板中的颜色选择器编辑控件(鼠标向上)。 我安装了事件监视器,并成功接收鼠标按下和鼠标移动消息,但是 NSColor
我想让 NSColorPanel 在用户点击 NSColorWell 时启动。当用户点击颜色井时面板打开,但即使在用户关闭面板后面板的实例也会保留。 所以我将它的 releasedWhenClosed
我正在使用 NSColorPanel 来更改 View 的颜色。此 View 的颜色也保存在数据库 (Firestore) 中。 import AppKit class ColorPanel {
我正在集成 HTML 编辑器 CKEditor在我的 Cocoa 应用程序中使用 WebView。 到目前为止,它按预期工作,除了一件事:如果我打开 NSColorPanel在应用程序的任何其他位置并
为什么 NSColorPanel 会累积内存使用量?尝试一下: 在 Xcode 中创建一个全新的基于 cocoa 的应用程序 向主窗口添加一个单一的 NSColorWell 运行应用并打开内存监视器(
我想阅读 NSColorPanel 底部显示的颜色列表(见下图)。有办法做到这一点吗? 最佳答案 对于无证访问(这可能无法在沙箱中运行,如果您计划通过 App Store 分发,您的应用程序将被 Ap
在我的 Catalyst 应用程序中,我使用 Mac Helpers 存储库中的代码生成一个带有回调的 NSColorPanel。 @interface IPDFMacColorPanel : NSO
我有一些代码可以打开 NSColorPanel。我如何才能检测到颜色何时更改,然后运行回调? NSColorPanel *colorPanel = [NSColorPanel sharedColorP
我在一个 Controller 中共享了 NSControlPanel。我正在更改 NSTextView 背景颜色和文本前景色。但是当我更改面板中的背景颜色时,文本颜色也会自动更改。问题出在哪里?谢谢
当您添加 NSColorWell 控件并单击它时,它会显示 NSColorPanel 的共享实例。不幸的是,默认情况下它不显示 Alpha/不透明度 slider 。从默认的 MainMenu > F
我遵循了一些示例,使 NSButton 子类作为 NSColorWell 工作(因为我们的 NSButton 子类已经为我们提供了所需的外观行为),但是我注意到,在使用按钮调用面板并更改颜色后,它也会
我是一名优秀的程序员,十分优秀!