NSButton으로 이미지버튼 만들기

맥OS의 코코아(cocoa)프레임웍에서 NSButton을 이미지버튼(image button)으로 사용할때 아래 속성을 제대로 설정하지 않으면, 클릭했을때 투명이미지 처리가 제대로 안되는 문제가 발생한다.

[button setButtonType:NSMomentaryChangeButton];

iOS의 UIButton에서 커스텀 버튼을 만들고 이미지를 설정해서 사용하는 것처럼 동일하게 NSButton을 사용하려면 다음과같이 사용하면된다.

NSButton* button = [[NSButton alloc] initWithFrame:NSMakeRect(0 , 0, 30,20)];
    [button setImage:[NSImage imageNamed:@"bg.png"]];
    [button setAlternateImage:[NSImage imageNamed:@"bg_highlighted.png"]];
    // button의 frame과 image사이즈가 다를경우 scaling 설정
    [button.cell setImageScaling:NSImageScaleAxesIndependently]; 
    [button setBordered:NO];
    [button setButtonType:NSMomentaryChangeButton];
    [self.view addSubview:button];

strechable NSImage

iOS에는 이미지 내부의 특정 영역만 늘려주는 UIImage내의 stretchableImageWithLeftCapWidth:(iOS5 미만) 나 resizableImageWithCapInsets:(iOS 5 이상) 메서드를 이용하여 나인패치(nine-patch) 버튼을 만들 수 있었다. 해당 메서드는 현재 Mac OS에 포함되어있지않은데, iOS와 비슷한 형태로 구현을 해놓은 라이브러리가 있어서 소개한다.

https://github.com/beefon/Mac—Stretchable-NSImage

주의: 위 라이브러리는 내부적으로 drawInRect: 메서드를 이용한다. 때문에 해당 버튼의 상위뷰에서 코어애니메이션 레이어(CALayer)가 활성화 되어 있을경우 streching이 제대로 동작하지 않게되니, 문제가있을경우 CALayer가 활성화 여부를 체크해봐야 한다.