iOS4에서 drawRect: 메소드를 사용하지 않고 NavigationBar 이미지 적용하기

iOS5에서는 메소드가 추가되어 배경이미지 적용이 간편해졌습니다. 하지만 iOS4에서는 여전히 이를 위해서는 꼼수(?)를 사용해야 했습니다. 그 꼼수에는 여러 가지 방법이 있는데 일반적으로 – (void)drawRect: 메소드를 Category로 선언하여 사용합니다. 이 방법이 위험한 것은 MFMessageComposeViewController 와 같은 정의된 ViewController에까지 영향이 간다는 것입니다. 그래서 다음 방법으로 생각해 본 것이! UINavigationBar의 layer에 이미지를 적용하는 것이었고 각 ViewController마다 잘 적용이 되는 것을 확인하였습니다. 방법은 아래와 같습니다. 1. layer 속성 제어를 위해서는 QuartzCore.framework 를 추가 2. 헤더에 #import <QuartzCore/QuartzCore.h> 입력 3. 아래와 같은 코드로 – (void)loadView, – (void)viewDidLoad, -(void)viewWillAppear:, – (void)viewDidAppear: 메소드에 구현 self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"(이미지명)"].CGImage; 주의할 점은 이유는 모르겠으나 UINavigationBar의 titleView를 UILabel이나 UIView로 배치한 이전에 위처럼 구현하면 적용이 되지 않다는 문제입니다. 아래 코드 참고하세요. 1. UINavigationBar의 배경이미지가 적용안됨. self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"title1_bar.png"].CGImage; UILabel *titleLabel = [[UILabel alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 200.0f, 25.0f)]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont systemFontOfSize:20.0f]; titleLabel.textAlignment = UITextAlignmentCenter; titleLabel.textColor = [UIColor blackColor]; titleLabel.text = @"잘되는구먼!"; self.navigationItem.titleView = titleLabel; [titleLabel release];…