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

2. UINavigationBar의 배경이미지가 적용됨.

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

self.navigationController.navigationBar.layer.contents =
              (id)[UIImage imageNamed:@"title1_bar.png"].CGImage;


Comments (7)

  1. 딱히 쓸 곳이 없어서 댓글로 남깁니다.
    피드를 추가하려고 봤더니 이 블로그의 엔트리는 보이지 않고 6~7개 정도 다양한 국가의 홈페이지가 뜨는군요. 피드도 몇 개 있기는 한데…
    얼핏 보기는 무언가 바이러스같은 느낌이 강합니다.
    혹시 의도하신 것이라면 모르겠지만 혹시나 싶어서 댓글 남깁니다.

    • 제가 아직 세팅을 마무리하지 못해서요…
      바이러스.. 무서운데요; 확인할 수 있는 방법이 있을까요? 초보 블로거라;

  2. hello!,I like your writing so a lot! share we communicate extra approximately your post on AOL? I require an expert in this space to solve my issue. Perhaps that is you! Searching ahead to see you. 581137

  3. 감사합니다. 정말 많이 찾아 돌아다니다가 해결하고 갑니다 🙂
    너무 스트레스 받고있었는데 정말 다행입니다 ㅠㅠ

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.