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

iOS도 코드네임(Codename)이 있다!

iOS도 숫자가 아닌 코드네임(Codename)이 있군요. 1.0: Alpine (1.0.0 – 1.0.2: Heavenly) 1.1: Little Bear (1.1.1: Snowbird, 1.1.2: Oktoberfest) 2.0: Big Bear 2.1: Sugarbowl 2.2: Timberline 3.0: Kirkwood 3.1: Northstar 3.2: Wildcat (iPad only) 4.0: Apex 4.1: Baker 4.2: Jasper (4.2.5 – 4.2.10: Phoenix) 4.3: Durango 5.0: Telluride 5.1: Hoodoo   지명이나 지형명을 땅 이름을 모티브로 한 것 같은데요. (공통점 찾기 쉽지 않은… 실망이야 애플.. ㅠㅠ) 안드로이드 OS 코드네임보다 이쁘거나 귀엽진 않네요. SSH로 iPhone에 접속할 때 초기 비밀번호는 iOS1의 코드명이라는 재미난 사실도.. (많이 봤다 했네요..)

Path 2에 적용된 Animation메뉴 UI!

GitHub에 오픈소스로 공개되었습니다. Path2에 적용된 메뉴 외에도 두 가지 타입이 더 존재하네요. 정말 멋지네요. 공개한 개발자와 공개를 하게 허락(?)을 해줬을 회사나… 우리나라 회사들도 이런 공헌에 대해서 소극적이지 않았으면 좋겠습니다 https://github.com/levey/QuadCurveMenu

Customizing UITabBarController & TabBar 숨기기

UIKit의 UITabBarController는 분명 아주 편리한 Controller임에 틀림이 없다. 하지만 그라데이션이 적용된 검은 바(Bar)를 다른 색상으로 변경할 수 없고 이쁘게 디자인한 이미지는 음각처리를 해버리며, 글자 크기는 고정되어 있다는 단점이 있다. 디자이너들은 분명 이런 부분이 불만일테고, 개발자는 쉽게 쓸 수 있는 UITabBarController를 포기하거나 힘들게 Customizing 할 수 밖에 없다. 더욱이 UITabBarController의 tabBar에 addSubview나 insertSubview 하는 방법은 iOS4까지 유효하였으나 iOS5에서는 아래와 스크린샷과 같이 적용한 이미지는 사라지고 TabBar만 덩그러니 보여지게 되는 문제점이 있다. 실제로 여러 앱들이 이런 현상이 있었고 아직도 고쳐지지 않은 앱들이 많이 존재한다.   그럼 방법이 없는 것일까? 이 때문에 ‘UITabBarController를 내 손으로 만들어야하는가?’ 라는 생각에 한숨만 나올 것이다. 하지만 아래와 같이 구현하면 UITabBarController를 사용할 수 있으며 이미지도 올릴 수 있어 쉽게 사용이 가능할 것이다. 1. UITabBarController를 상속받는 Class를 생성한다.   2. UITabBarController는 UIViewController를 상속받기 때문에 일반적으로 사용하는 ViewController와 같은 구조를 가지고 메소드가 호출된다. 따라서 loadView나 viewDidLoad에서 TabBar 영역을 대신할 View를 하나 생성하여 self.view에 addSubview한다. TabBar의 높이는 49 픽셀이다. – (void)loadView   …

iOS UI에 사용된 기본 이미지(Artwork) 저장하기

iOS 개발을 하다보면 간혹 iOS 기본 UI에 포함된 이미지가 필요할 때가 있습니다. 저 역시 빨간 Badge 배경이미지가 필요해서 이래저래 검색을 해봤는데요 멋진 프로젝트를 발견했습니다. https://github.com/0xced/UIKit-Artwork-Extractor 위 사이트 코드를 내려받으셔서 아래와 같이 하시면 쉽게 이미지를 내려받을 수 있습니다.   1. 코드를 컴파일해서 시뮬레이터에서 실행. 참고 시뮬레이터의 Device를 iPhone, iPhone(Retina), iPad 할 때마다 저장할 수 있는 이미지는 달라집니다. 즉, iPhone에서 수행 시 3GS 이미지 (320×480 기준). iPhone(Retina)에서 수행 시 4 이미지 (640×960 기준). 2. 원하는 이미지를 선택하고 화면 상단 오른쪽의 “Save” 버튼 터치. 이미지가 저장되는 경로는 프로젝트의 AppDelegate에 정의된 -saveDirectory: 메소드에 정의되어 있습니다. 제 경우에는 데스크탑(Desktop)의 “iPhone Simulator 5.0 artwork”에 디렉토리가 생성되고 그 내부에 저장이 되었습니다. 3. iPhone4용 이미지가 필요한 경우에는 시뮬레이터 옵션의 Hardware > Device에서 iPhone(Retina)를 선택해서 앱 실행하고 1. 2. 과정을 그대로 하시면 쉽게 이미지를 가져올 수 있습니다. 4. 그 외에 이모티콘 이미지와 버튼 이미지도 생성이 가능하여 여러모로 쓸모있는 프로젝트로 보입니다. 참고 iOS UI에 사용된 Artwork의 경로와 파일명은 http://www.idownloadblog.com/2008/10/05/logo-images-and-icons-locations-on-your-iphone/ 에…