首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OS X NSColorspace切换色彩同步配置文件

使用OS X NSColorspace切换色彩同步配置文件
EN

Stack Overflow用户
提问于 2015-01-29 12:41:40
回答 1查看 353关注 0票数 3

当我尝试在NSWindow对象上调用setColorSpace时,颜色没有变化。我的印象是我可以动态地改变颜色的呈现方式。

下面是我的控制器的.h文件

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>

@interface MainWindow : NSWindowController <NSTextFieldDelegate>
{

}
@property (strong) IBOutlet NSWindow *theWindow;
@property (weak) IBOutlet NSTextField *RedField;
@property (weak) IBOutlet NSTextField *GreenField;
@property (weak) IBOutlet NSTextField *BlueField;
@property (weak) IBOutlet NSTextField *PatternField;
@property (weak) IBOutlet NSButton *ICCBox;
- (IBAction)UpdateICC:(id)sender;

@end

下面是我的控制器的.m文件

代码语言:javascript
复制
#import "MainWindow.h"
#import <AppKit/AppKit.h>

@interface MainWindow ()

@end

@implementation MainWindow


- (id)init
{
   self = [super init];

    return self;
}

- (void)awakeFromNib
{
    [_RedField setDelegate:self];
    [_GreenField setDelegate:self];
    [_BlueField setDelegate:self];
}


-(void) controlTextDidChange:(NSNotification *) note {

    float redByte = [_RedField floatValue];
    float redF = redByte/255.0;

    float greenByte = [_GreenField floatValue];
    float greenF = greenByte/255.0;

    float blueByte = [_BlueField floatValue];
    float blueF = blueByte/255.0;

    _PatternField.backgroundColor = [NSColor colorWithCalibratedRed:redF green:greenF blue:blueF alpha:1];
}

- (IBAction)UpdateICC:(id)sender {

    NSColorSpace *acs = [NSColorSpace adobeRGB1998ColorSpace];
    NSColorSpace *scs = [NSColorSpace sRGBColorSpace];
    NSColorSpace *dcs = [NSColorSpace deviceRGBColorSpace];

    if(_ICCBox.state == NSOnState)
    {
        [_theWindow setColorSpace:scs];
    }
    else
    {
        [_theWindow setColorSpace:dcs];
    }

}
@end

你知道为什么这不管用吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-01 00:28:20

您应该将指定的通知张贴到默认NotificationCenter以立即应用更改(导致使用新的颜色配置文件重新绘制窗口)。

代码语言:javascript
复制
- (IBAction)UpdateICC:(id)sender {

    NSColorSpace *acs = [NSColorSpace adobeRGB1998ColorSpace];
    NSColorSpace *scs = [NSColorSpace sRGBColorSpace];
    NSColorSpace *dcs = [NSColorSpace deviceRGBColorSpace];

    if(_ICCBox.state == NSOnState)
    {
        [_theWindow setColorSpace:scs];
    }
    else
    {
        [_theWindow setColorSpace:dcs];
    }

    [[NSNotificationCenter defaultCenter] postNotificationName:NSWindowDidChangeScreenNotification object:_theWindow];
    // In some cases additional call needed:
    [_theWindow.contentView viewDidChangeBackingProperties];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28207130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档