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;


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

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

  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

    1. Thanks for your comment. Sorry about that I don’t have AOL account. But How about Google Talk? If you agree to this, share me your Google Talk account to me using mail which is yunbong.kim@gmail.com

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

답글 남기기

이메일 주소는 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

You May Also Like