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;
7 comments
딱히 쓸 곳이 없어서 댓글로 남깁니다.
피드를 추가하려고 봤더니 이 블로그의 엔트리는 보이지 않고 6~7개 정도 다양한 국가의 홈페이지가 뜨는군요. 피드도 몇 개 있기는 한데…
얼핏 보기는 무언가 바이러스같은 느낌이 강합니다.
혹시 의도하신 것이라면 모르겠지만 혹시나 싶어서 댓글 남깁니다.
제가 아직 세팅을 마무리하지 못해서요…
바이러스.. 무서운데요; 확인할 수 있는 방법이 있을까요? 초보 블로거라;
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
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
감사합니다. 정말 많이 찾아 돌아다니다가 해결하고 갑니다 🙂
너무 스트레스 받고있었는데 정말 다행입니다 ㅠㅠ
도움이 되셨다니 기쁘네요- 🙂
감사합니다. 많이 삽질하다가 해결하고 갑니다 🙂