2015-01-29 9 views
3

NSWindow 객체에서 setColorSpace를 호출하면 색상이 변경되지 않습니다. 색상이 렌더링되는 방식을 동적으로 변경할 수 있다는 인상하에있었습니다. 여기 OSX NSColorspace를 사용하여 colorsync 프로필을 토글합니다.

내 컨트롤러 여기

#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 

에 대한 .H 파일 내 컨트롤러

#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 

이 작동하지 않는 이유는 어떤 생각의하는 .m 파일입니다?

+0

변경 후'setViewsNeedDisplay'를 호출해야합니까? – user1118321

+0

그럴 것 같지 않습니다. 그냥 통화를 추가하려고 시도했지만 동작이 변경되지 않았습니다. 또한 디스플레이 ICC 프로필을 전환 할 때 창에서 색상이 변경됩니다. 그래서 현재 내가 얻고있는 것은 sRGB 관리 컬러입니다. –

답변

0

변경 사항을 즉시 적용하려면 지정된 Notification을 기본 NotificationCenter에 게시해야합니다 (새 색상 프로파일로 다시 그리기 창이 발생 함).

- (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]; 
}