맥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가 활성화 여부를 체크해봐야 한다.