아이폰어플개발정보2010. 8. 26. 07:57

[출처: 맥부기 카페 http://cafe.naver.com/mcbugi.cafe]

//----------------Arial 폰트군---------------------------

#define ArialFont0@"Arial"

#define ArialFont1@"Arial-ItalicMT"

#define ArialFont2@"Arial-BoldMT"

#define ArialFont3@"Arial-BoldItalicMT"

#define ArialFont4@"ArialRoundedMTBold"

#define ArialFont5@"ArialHebrew"

#define ArialFont6@"ArialHebrew-Bold"

#define ArialFont7@"ArialUnicodeMS"

//----------------AmericanTypewriter 폰트군---------------

#define AmericanFont0@"AmericanTypewriter"

#define AmericanFont1@"AmericanTypewriter-Bold"

//----------------AppleGothic 폰트군----------------------

#define AppleGothic0@"AppleGothic"

//----------------Courier 폰트군--------------------------

#define CourierFont0@"Courier"

#define CourierFont1@"Courier-Bold"

#define CourierFont2@"Courier-Oblique"

#define CourierFont3@"Courier-BoldOblique"

//----------------Courier New폰트군-----------------------

#define CourierNewFont0@"CourierNewPSMT"

#define CourierNewFont1@"CourierNewPS-ItalicMT"

#define CourierNewFont2@"CourierNewPS-BoldMT"

#define CourierNewFont3@"CourierNewPS-BoldItalicMT"

//----------------DB LCD Temp 폰트군----------------------

#define DBLCDFont0@"DBLCDTEmpBlack"

//----------------Geeza Pro 폰트군------------------------

#define GeezaFont0@"GeezaPro"

#define GeezaFont1@"GeezaPro-Bold"

//----------------Georgia 폰트군--------------------------

#define GeogiaFont0@"Geogia"

#define GeogiaFont1@"Geogia-Italic"

#define GeogiaFont2@"Geogia-Bold"

#define GeogiaFont3@"Geogia-BoldItalic"

//----------------Heiti J 폰트군--------------------------

#define HeitiJFont0@"STHeitiJ-Light"

#define HeitiJFont1@"STHeitiJ-Medium"

//----------------Heiti K 폰트군--------------------------

#defineHeitiKFont0@"STHeitiK-Light"

#defineHeitiKFont1@"STHeitiK-Medium"

//----------------Heiti SC 폰트군-------------------------

#defineHeitiSCFont0@"STHeitiSC-Light"

#define HeitiSCFont1@"STHeitiSC-Medium"

//----------------Heiti TC 폰트군-------------------------

#define HeitiTCFont0@"STHeitiTC-Light"

#define HeitiTCFont1@"STHeitiTC-Medium"

//----------------Helvetica 폰트군------------------------

#define HelveticaFont0@"Helvetica"

#define HelveticaFont1@"Helvetica-Oblique"

#define HelveticaFont2@"Helvetica-Bold"

#define HelveticaFont3@"Helvetica-BoldOblique"

//----------------Helvetica Neue 폰트군-------------------

#define HelveticaNFont0@"HelveticaNeue"

#define HelveticaNFont1@"HelveticaNeue-Bold"

//----------------Hiragino Kaku Gothic 폰트군-------------

#define HiraginoFont0@"HiraKakuProN-W3"

#define HiraginoFont1@"HiraKakuProN-W6"

//----------------Marker Felt 폰트군----------------------

#define MarkerFont0@"MarkerFelt-Thin"

//----------------Thonburi 폰트군-------------------------

#define ThonburiFont0@"Thonburi"

#define ThonburiFont1@"Thonburi-Bold"

//----------------Times New Roman 폰트군------------------

#define TimesFont0@"TimesNewRomanPSMT"

#define TimesFont1@"TimesNewRomanPS-ItalicMT"

#define TimesFont2@"TimesNewRomanPS-BoldMT"

#define TimesFont3@"TimesNewRomanPS-BoldItalicMT"

//----------------Trebuchet MS 폰트군---------------------

#define TreFont0@"TrebuchetMS"

#define TreFont1@"TrebuchetMS-Italic"

#define TreFont2@"TrebuchetMS-Bold"

#define TreFont3@"TrebuchetMS-BoldItalic"

//----------------Verdana 폰트군--------------------------

#define VerdanaFont0@"Verdana"

#define VerdanaFont1@"Verdana-Italic"

#define VerdanaFont2@"Verdana-Bold"

#defineVerdanaFont3@"Verdana-BoldItalic"

//----------------Zapfino 폰트군--------------------------

#define ZapfinoFont0@"Zapfino"



[출처: 맥부기 카페 http://cafe.naver.com/mcbugi.cafe]



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150071512733
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플정보2010. 6. 28. 20:41
카카오톡 - 아이폰 사용자간 무료로 연락을 할 수 있는 연락처 기반의 메신저 서비스

카카오톡 KakaoTalk (무료)

어플 소개(Description)

카카오톡은 아이폰 사용자간 무료로 실시간 그룹채팅 및 1:1 채팅 을 할 수 있는 연락처 기반의 메신저 서비스입니다.
카카오톡을 이용하면 푸쉬 기능을 통해 즉각적으로 메시지를 받을 수 있고 사진, 동영상, 연락처 등의 멀티미디어도 간편하게 주고 받을 수 있습니다. 이제 SMS에서 벗어나 카카오톡으로 친구, 동료, 가족들과 보다 편리하고 다양한 멀티미디어 채팅을 시작해 보세요.

- 카카오톡의 주요 기능 -

* 무료로 즐기는 그룹채팅 및 1:1 채팅
카카오톡을 설치한 친구들간에는 무료로 채팅을 즐길 수 있습니다. 기본적인 1:1 채팅뿐 아니라, 그룹 채팅을 통해 여러 친구들과 동시에 메시지, 사진, 동영상, 연락처 등을 간편하게 주고 받을 수 있습니다. (카카오톡은 WIFI 또는 3G를 이용합니다)

* 다양한 멀티미디어 채팅
문자 메시지는 기본! 사진이나 동영상을 직접 촬영 또는 앨범에서 선택하여 주고 받을 수도 있고 아이폰의 연락처에 저장되어 있는 친구의 연락처를 보내거나 친구로부터 받은 연락처를 내 아이폰의 연락처에 곧 바로 저장할 수 있습니다.

* 자동 채팅 친구 등록
내 연락처에 등록된 친구들 중 카카오톡을 설치한 친구들을 자동으로 채팅 친구 목록에 추가해 주기 때문에 별도로 채팅을 하기 위해 친구들을 일일이 등록할 필요가 없습니다.

* 가입과 로그인 없이 간편하게
카카오톡은 회원가입 및 로그인을 해야 하는 복잡한 절차 없이 사용하고 있는 전화번호만 있으면 애플리케이션 설치 후 바로 서비스를 이용할 수 있습니다.

* 채팅 친구 추천
이제 연락처를 모르고 지냈던 친구들과도 채팅을 즐길 수 있습니다. 내 연락 처에는 없지만 친구들간의 채팅을 통해서 형성된 관계를 기반으로 서로 알고 있을만한 친구들을 추천해드립니다. 추천된 친구 목록에서 추가 버튼을 누르기만 하면 친구목록에 저장됩니다

미국 애플스토어 : http://itunes.apple.com/us/app/id362057947?mt=8#

한국 애플스토어 : http://itunes.apple.com/kr/app/id362057947?mt=8#

개인적으로 아이폰 무료문자 어플중 국내에서 가장 성공(?)했다고 생각되는 어플입니다.

일단 제 아이폰 카카오톡만 봐도 카카오톡 쓰는 분들이 젤 많군요. 그 다음은 와츠어플... ㅠㅜ

와츠어플을 좋아하지만 사용자들이 많은 이유로 카카오톡을 주로 쓰고 있습니다.

그렇다고 이 어플이 나쁘다는 뜻은 아닙니다!!

꾸준한 업데이트해주고 있어서 참 좋아하는 어플입니다.

그리고 상대방 전화번호가 없더라도 아이디만 알아도 추가할수 있는 기능은 정말 좋습니다.

(보통 무료문자 어플은 주소록의 전화번호로 상대방을 추가해주기 때문에 아이디로 추가해주는 카카오톡의 기능은 너무 좋군요.)

카카오톡 사용하는 아이폰 사용자들은 상대방 아이디만 알아도 등록해서 채팅을 즐길수 있기 때문에

카카오톡 아이디/자기소개하고 친구 구하는 게시판도 많더라구요. ㅋㅋ

또한 그룹채팅이 가능합니다. 와츠어플은 이 기능을 지원안하더라구요.

카카오톡 쓰는 친구들끼리 그룹채팅하면 볼만하더군요. 메신져 채팅급은 아니지만 할만합니다. ㅋ

아이폰 사용자들은 필히 설치하는게 좋다고 말해도 될만한 어플이군요. ^^

제 카카오톡 ID는 arterror 입니다~ 

아이폰 무료문자 어플 소개 (5+1)
http://blog.naver.com/jkw1120/60109282963



출처 : http://blog.naver.com/PostView.nhn?blogId=jkw1120&logNo=60109528998
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 13:18
저작권 문제없이 사용할 수 있는 효과음

어플 개발에 필요한 음원은 여러 방법으로 구하지만, 가장 손쉬운 방법은 역시 인터넷이다.

www.soundsnap.com 에서는 저작권 문제가 없는 음원을 무료로 다운받을 수 있으며,

원칙적으로는 회원가입시 월 5건의 오디오 클립만 제공되지만, 클립 전체에 대한 미리듣기 기능은

제약없이 사용할 수 있으므로 Soundflower 와 같은 오디오 캡쳐 프로그램 (프리웨어)을 사용할 수도 있다.

음원 소스가 MP3 라면 switch와 같은 프리웨어를 이용해서 변환시킬 수 있다. 

음원 편집은 Adobe Soundbooth Trial 버전으로 해결할 수 있다.

(자체적으로 제공되는 오디오 클립도 함께 쓸 수 있어서 편하다)

 

SDK에서 System Audio Services로 처리할 수 있는 짧은 효과음은 다음과 같은 조건을 갖는다.

 

- 30초 이내여야 할 것
- 확장자가 .caf, .aif, .wav 중 하나일 것

- 오디오 포맷이 PCM 혹은 IMA/ADPCM (IMA4) 일 것

 

경험상 caf 나 aif 보다는 wav 가 사용하기 훨씬 수월했고,

mono, 16bit, 22k 형태로 저장하면 음질과 용량 측면에서 적절한 것 같다.

 

www.vanillabreeze.com

 

펑펜 `>~

 


출처 : http://blog.naver.com/PostView.nhn?blogId=gonagi&logNo=150044567657
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 08:00
분할 컨트롤은 더 많은 기능으로 호텔방 컨트롤 리모콘을 만들 수 있다.
모바일 환경이라함은 한정된 공간적 제약을 가지고 있다. 그렇기 때문에 컨트롤러 하나하나를 배치하거나, 레이아웃을 작성하는데 있어서 신중을 기해야 한다. 분할 컨트롤은 이러한 공간적 제약을 조금이나마 벗어날 수 있는 기능을 제공해 준다. 백개의 버튼을 한 화면에 담을 수는 없지만, 열개씩 나누어서 볼 수 있다면 충분히 넉넉하게 볼 수가 있다.


New project.
새로운 프로젝트를 시작한다. 'View-based Application' 을 선택하고 프로젝트 이름은 'roomControl' 로 하였다. 이번에 만들게 될 애플리케이션은 방의 불을 On/Off 하는기능, 온도를 조절하는 기능, 스텝을 호출하는 기능을 분할컨트롤 버튼을 이용하여 선택적으로 보여지게 한다. 우선은 프로그램에 대한 구상을 한다.



그림1. 프로젝트 구상

애플리케이션을 구상하는데 있어서 가장 먼저 해야 할 것은 아웃렛과 액션을 선언해야 하는 부분은 어떤 부분인가이다. 이 프로젝트에서는 분할 컨트롤을 선택하여 모든 객체에 hidden 메소드를 이용해야 하기때문에 표현되는 모든 라벨, 버튼, 스위치, 슬라이더 객체가 아웃렛으로 선언되어야 한다. 또한 액션으로는 어떠한 액션이 정의되어야 하는지 계획해야 한다.


첫번째 segmented Control
모든 화면을 한꺼번에 설명하기엔 양이 조금 많을 수 있기 때문에 한 화면씩 구체화 하도록 한다. 분할 컨트롤은 슬라이더와 마찬가지로 이미 아웃렛이 선언되어 있기 때문에 임의로 선언할 필요는 없다. 하지만, 분할 컨트롤의 선택에 대한 액션은 구현해 주어야 한다. 액션을 구현해 주지 않으면 분할컨트롤 객체가 무엇을 해야 할찌 모르기 때문이다. 첫 분할컨트롤은 방의 불을 조절하는 스위치와 라벨이 자리하고 있다. 세개의 스위치와 세개의 라벨이 모두 아웃렛으로 선언되어야 한다. 그리고 스위치는 On/Off 를 표시할 수 있도록 액션이 선언되어야 한다. 분할컨트롤와 첫번재 컨트롤에 들어가는 아웃렛은 다음과 같이 선언할 수 있다.

<roomControlViewController.h>
@interface roomControlViewController : UIViewController {
    UISwitch *roomLight1_Switch;
    UISwitch *roomLight2_Switch;
    UISwitch *indoorLight_Switch;
    UILabel *roomLight1_Label;
    UILabel *roomLight2_Label;
    UILabel *indoorLight_Label;
}

@property (nonatomic, retain) IBOutlet UISwitch *roomLight1_Switch;
@property (nonatomic, retain) IBOutlet UISwitch *roomLight2_Switch;
@property (nonatomic, retain) IBOutlet UISwitch *indoorLight_Switch;
@property (nonatomic, retain) IBOutlet UILabel *roomLight1_Label;
@property (nonatomic, retain) IBOutlet UILabel *roomLight2_Label;
@property (nonatomic, retain) IBOutlet UILabel *indoorLight_Label;

- (IBAction) toggleControls: (id) sender;
- (IBAction) switchChange: (id)sender;


<roomControlViewController.m>
@implementation roomControlViewController

@synthesize roomLight1_Switch;
@synthesize roomLight2_Switch;
@synthesize indoorLight_Switch;
@synthesize roomLight1_Label;
@synthesize roomLight2_Label;
@synthesize indoorLight_Label;

- (IBAction) toggleControls: (id)sender {
    if([sender selectedSegmentIndex] == 0) {
        roomLight1_Switch.hidden = NO;
        roomLight2_Switch.hidden = NO;
        indoorLight_Switch.hidden = NO;
        roomLight1_Label.hidden = NO;
        roomLight2_Label.hidden = NO;
        indoorLight_Label.hidden = NO;
    } else if([sender selectedSegmentIndex] == 1) {
        roomLight1_Switch.hidden = YES;
        roomLight2_Switch.hidden = YES;
        indoorLight_Switch.hidden = YES;
        roomLight1_Label.hidden = YES;
        roomLight2_Label.hidden = YES;
        indoorLight_Label.hidden = YES;
    } else if([sender selectedSegmentIndex] == 2) {
        roomLight1_Switch.hidden = YES;
        roomLight2_Switch.hidden = YES;
        indoorLight_Switch.hidden = YES;
        roomLight1_Label.hidden = YES;
        roomLight2_Label.hidden = YES;
        indoorLight_Label.hidden = YES;
    }
}

- (IBAction) switchChange: (id)sender {
    UISwitch *whichSwitch = (UISwitch *)sender;
    BOOL setting = whichSwitch.isOn;
    [roomLight1_Switch setOn:setting animated:YES];
    [roomLight2_Switch setOn:setting animated:YES];
    [indoorLight_Switch setOn:setting animated:YES];
}

... ... ...

- (void)dealloc {
    [roomLight1_Switch release];
    [roomLight2_Switch release];
    [indoorLight_Switch release];
    [super dealloc];
}


위 소스코드에서 toggleControls 액션은 분할컨트롤에 대한 액션이다. 액션 개체는 sender 라는 인자를 통해 값을 전달받을 수 있는데, 분할컨트롤은 선택영역에 따라 인덱스값을 받을 수 있다. 분할컨트롤의 분할컨트롤의 첫번째는 '0', 두번째는 '1', 세번째는 '2' 와 숫자의 배열 형식을 갖는다. 이 값은 'selectedSgmentedIndex' 라는 변수값으로 구분지을 수 있다. 이 값을 비교함으로써 분할컨트롤이 어떤 값을 선택하였는지 알 수 있게 된다. 분할컨트롤이 선택되고 '{ }' 안의 내용을 보면 hidden 이라는 메소드가 호출되는 것을 볼 수 있다. UIview 를 상속받는 모든 객체의 기본적인 메소드이며, 화면에 표시할것인지를 결정하는 요소가 된다. 'NO' 일경우는 숨기지 않겠다는 뜻으로 화면에 표시가 되고, 'YES' 값일 경우는 숨기겠다는 뜻으로 화면에 표시하지 않겠다는 뜻이 된다. switchChange 액션은 스위치가 On / Off 되는 액션을 표현한다. 중간에 setting animated 옵션은 스위치가 순식간에 변하게, 또는 애니메니션이 적용되어 변하게 되는지 설정할 수 있다.


첫번째 레이아웃 작성.
레이아웃을 작성하기 위해서는 인터페이스 빌더를 실행해야 한다. 'Resources' 폴더의 'roomControlViewController.xib' 파일을 더블클릭하여 인터페이스 빌더를 실행한다. 분할 컨트롤러를 이용한 첫번째 화면의 레이아웃을 작성한다. 라이브러리 윈도우에서 분할 컨트롤 객체, 스위치 객체를 드래그하여 뷰 윈도우의 적당한 위치에 배치시킨다. 그리고 라벨을 위치시키고 텍스트 내용을 변경한다.



그림2. 첫번째 레이아웃 작성

분할 컨트롤러는 기본적으로 두개의 선택 버튼을 기본으로 제공한다. 하지만, 위의 그림처럼 세개의 메뉴로 늘리기 위해서는 Attibute 윈도우의 segments 항목을 '2' 에서 '3'으로 늘려주면 항목수가 하나 늘어나게 된다.


액션과 아웃렛 연결하기.
액 션과 아웃렛은 인터페이스 빌더를 통해 연결하지 않으면 아무 소용이 없다. 아웃렛을 연결하는 방법에는 두가지가 있다. 첫번째는 'ctrl' 키를 누른채로 main 윈도우의 File's Owner 아이콘을 클릭하고, 아웃렛을 연결하고자 하는 객체로 드래그하여 선택하는것이다. 두번째는 File's Owner 아이콘을 선택한 후 Connections 윈도우에서 아웃렛을 먼저 선택하여 원하는 객체에 연결 시키는 방법이다. 방법의 차이만 있을 뿐 다른 차이점은 없기 때문에 선호하거나, 편한 방법으로 세개의 스위치와, 라벨의 아웃렛을 연결한다. 액션을 연결하는 방법도 아웃렛을 연결하는 것과 비슷한 방식으로 이루어진다. 액션을 연결하는 방법 역시 두가지가 있다. 첫번째는 아웃렛을 연결하는 방법과 반대의 순서로 하면 된다. 'ctrl' 키를 누르는 것은 동일하고, File's Owner 에서 객체로 드래그 하는 것이 아니라, 객체를 먼저 선택한 후 File's Owner 아이콘으로 드래그하는 것이다. 그러면 Events 항목이 팝업으로 나오게 되고, 적절한 항목을 선택하면 된다.



그림3. 액션 연결하기

액 션을 연결하는 두번째 방법은 File's Owner 아이콘을 선택한 후 Connections 윈도우를 이용하는 것이다. 아웃렛을 연결하는 것과 마찬가지로 Connections 윈도우를 보면 아랫부분에 Received Actions 항목에 이미 선언한 액션들을 볼 수가 있다. 원하는 액션의 항목 오른쪽으로 마우스 커서를 가져가면 원안에 십자가 모양이 생기게 된다. 이것을 액션을 연결하고자 하는 객체에 끌어다가 놓으면 팝업으로 액션 항목이 나오는데, 가장 적절한 액션을 선택하도록 한다. 스위치와 분할 컨트롤러에는 Value Changed 값이 가장 적당하다. togleControls 액션도 분할컨트롤러에 연결하도록 한다. 첫번째로 작성한 컨트롤러가 잘 작동하는지 시뮬레이션을 해보도록 한다. 분할컨트롤의 첫번째 버튼에만 화면이 나오는 것을 볼 수 있을 것이다. 만약 오류가 있어가, 생각했던대로 실행이 되지 않는다면 오류를 확인해 보고, 위에서부터 차근차근 다시 해보길 바란다.



그림4. 첫번째 분할컨트롤 작성 후 시뮬레이션 화면


두번째 Segmented Control
두번째 분할컨트롤 화면은 위와 같은 순서를 반복하면 된다. 두번째 화면에서는 슬라이더에 의한 제어를 하기 때문에 세개의 슬라이더와 세개의 라벨이 필요하다. 다음과 같이 코드를 입력한다.

<roomControlViewController.h>
@interface roomControlViewController : UIViewController {
    ... ...

    UILabel *roomTmep1_SliderLabel;
    UILabel *roomTemp2_SliderLabel;
    UILabel *indoorTemp_SliderLabel;
    UISlider *roomTemp1_Slider;
    UISlider *roomTemp2_Slider;
    UISlider *indoorTemp_Slider;

}
... ...

@property (nonatomic, retain) IBOutlet UILabel *roomTmep1_SliderLabel;
@property (nonatomic, retain) IBOutlet UILabel *roomTemp2_SliderLabel;
@property (nonatomic, retain) IBOutlet UILabel *indoorTemp_SliderLabel;
@property (nonatomic, retain) IBOutlet UISlider *roomTemp1_Slider;
@property (nonatomic, retain) IBOutlet UISlider *roomTemp2_Slider;
@property (nonatomic, retain) IBOutlet UISlider *indoorTemp_Slider;

... ...

- (IBAction) SliderChangeRoom1: (id)sender;
- (IBAction) SliderChangeRoom2: (id)sender;
- (IBAction) SliderChangeIndoor: (id)sender;


<roomControlViewController.m>
... ...
@synthesize roomTmep1_SliderLabel;
@synthesize roomTemp2_SliderLabel;
@synthesize indoorTemp_SliderLabel;
@synthesize roomTemp1_Slider;
@synthesize roomTemp2_Slider;
@synthesize indoorTemp_Slider;
... ...

- (IBAction) toggleControls: (id)sender {
    if([sender selectedSegmentIndex] == 0) {
        ... ...

        roomTmep1_SliderLabel.hidden = YES;
        roomTemp2_SliderLabel.hidden = YES;
        indoorTemp_SliderLabel.hidden = YES;
        roomTemp1_Slider.hidden = YES;
        roomTemp2_Slider.hidden = YES;
        indoorTemp_Slider.hidden = YES;
    } else if([sender selectedSegmentIndex] == 1) {
        ... ...

        roomTmep1_SliderLabel.hidden = NO;
        roomTemp2_SliderLabel.hidden = NO;
        indoorTemp_SliderLabel.hidden = NO;
        roomTemp1_Slider.hidden = NO;
        roomTemp2_Slider.hidden = NO;
        indoorTemp_Slider.hidden = NO;
    } else if([sender selectedSegmentIndex] == 2) {
        ... ...

        roomTmep1_SliderLabel.hidden = YES;
        roomTemp2_SliderLabel.hidden = YES;
        indoorTemp_SliderLabel.hidden = YES;
        roomTemp1_Slider.hidden = YES;
        roomTemp2_Slider.hidden = YES;
        indoorTemp_Slider.hidden = YES;
    }
}
... ...

- (IBAction) SliderChangeRoom1: (id)sender {
    UISlider *slider = (UISlider *)sender;
    int progressAsInt = (int)(slider.value + 0.5f);
    NSString *newText = [[NSString alloc] initWithFormat: @"Room1 temperature is %d degrees", progressAsInt];
    roomTmep1_SliderLabel.text = newText;
    [newText release];
}

- (IBAction) SliderChangeRoom2: (id)sender {
    UISlider *slider = (UISlider *)sender;
    int progressAsInt = (int)(slider.value + 0.5f);
    NSString *newText = [[NSString alloc] initWithFormat: @"Room2 temperature is %d degrees", progressAsInt];
    roomTemp2_SliderLabel.text = newText;
    [newText release];
}

- (IBAction) SliderChangeIndoor: (id)sender {
    UISlider *slider = (UISlider *)sender;
    int progressAsInt = (int)(slider.value + 0.5f);
    NSString *newText = [[NSString alloc] initWithFormat: @"Indoor temperature is %d degrees", progressAsInt];
    indoorTemp_SliderLabel.text = newText;
    [newText release];
}
... ...

- (void)dealloc {
    ... ...

    [roomTmep1_SliderLabel release];
    [roomTemp2_SliderLabel release];
    [indoorTemp_SliderLabel release];
    [roomTemp1_Slider release];
    [roomTemp2_Slider releasd];
    [indoorTemp_Slider release];
    [super dealloc];
}

첫번째 화면을 작성하면서 작성했던 소스코드에 위의 내용을 추가하면 된다. 슬라이더의 경우 일반적으로 아웃렛을 선언하지 않아도 그 값을 받아 사용할 수 있지만, 이번 프로젝트에서는 분할컨트롤러를 이용할때 hidden 옵션을 사용해야 하기 때문에 아웃렛을 선언하여 hidden 옵션을 사용할 수 있도록 하였다. 화면의 작업을 마친 후에는 분할컨트롤의 항목도 신경을 써 주어야 한다. 어느 버튼을 선택했을때 보여야 할찌 각 객체별로 모두 선언을 해 주어야 한다. 각 슬라이더의 액션은 슬라이더의 인자값을 받아서 라벨에 출력하는 액션이다. 먼저 슬라이더의 인자값을 구하고, 정수형으로 변환한 후 텍스트 형식으로 바꾸어 준다. 그리고 아웃렛으로 선언된 라벨에 출력해준다. 코딩을 하면서 retain 으로 선언된 모든 객체들은 꼭 release를 해서 자원의 낭비를 막아야 한다는 것을 잊지 말기 바란다.


화면디자인하고, 아웃렛과 액션 연결하기.
다시 인터페이스 빌더로 이동하여 화면을 디자인하도록 한다. 분할 컨트롤을 사용하는 경우 이미 객체들이 배치되어 있는 상태에서 그 위에 또 다른 객체를 표현하는 것이기 때문에 화면 하나씩 순서대로 작성하는 것이 화면을 구성하는데 불편함을 덜 수 있다.



그림5. 화면디자인및 아웃렛, 액션 연결

첫번째 페이지를 만들때와 동일한 방법으로 뷰 윈도우의 객체들과 아웃렛을 이어주고, 액션을 연결해 주면 된다. 한가지 주의해야 할 점은 두번째 화면의 객체들은 Attribute 윈도우에서 View -> Drawing -> Hidden 을 체크해 주어야 한다. 그렇지 않으면 처음 화면에서 위의 화면과 같이 겹치는 화면을 보게 될 것이다.


세번째 Segmented Control
세번째는 버튼을 이용한 화면이다. 버튼을 이용한 액션을 가장 기초적인 액션이기 때문에 어렵지 않게 구현할 수 있어야 한다. 잘 모르겠다면 이전의 포스팅을 보면서 버튼을 구현하도록 한다. 이 프로젝트에 필요한 버튼은 여섯개이다. 버튼의 내용을 표현하기 위한 하나의 라벨이 필요하다. 또 버튼의 내용을 인자값으로 전달받아서 출력하기 위한 액션을 추가한다.

<roomControlViewController.h>
@interface roomControlViewController : UIViewController {
    ... ...

    UIButton *roomStaff1_Button;
    UIButton *roomStaff2_Button;
    UIButton *roomStaff3_Button;
    UIButton *roomStaff4_Button;
    UIButton *roomStaff5_Button;
    UIButton *roomStaffAll_Button;
    UILabel *callStaff;

}
... ...

@property (nonatomic, retain) IBOutlet UIButton *roomStaff1_Button;
@property (nonatomic, retain) IBOutlet UIButton *roomStaff2_Button;
@property (nonatomic, retain) IBOutlet UIButton *roomStaff3_Button;
@property (nonatomic, retain) IBOutlet UIButton *roomStaff4_Button;
@property (nonatomic, retain) IBOutlet UIButton *roomStaff5_Button;
@property (nonatomic, retain) IBOutlet UIButton *roomStaffAll_Button;
@property (nonatomic, retain) IBOutlet UILabel *callStaff;

... ...

- (IBAction) buttonPress: (id)sender;


<roomControlViewController.m>
... ...
@synthesize roomStaff1_Button;
@synthesize roomStaff2_Button;
@synthesize roomStaff3_Button;
@synthesize roomStaff4_Button;
@synthesize roomStaff5_Button;
@synthesize roomStaffAll_Button;
@synthesize callStaff;

... ...

- (IBAction) toggleControls: (id)sender {
    if([sender selectedSegmentIndex] == 0) {
        ... ...

        roomStaff1_Button.hidden = YES;
        roomStaff2_Button.hidden = YES;
        roomStaff3_Button.hidden = YES;
        roomStaff4_Button.hidden = YES;
        roomStaff5_Button.hidden = YES;
        roomStaffAll_Button.hidden = YES;
        callStaff.hidden = YES;

    } else if([sender selectedSegmentIndex] == 1) {
        ... ...

        roomStaff1_Button.hidden = YES;
        roomStaff2_Button.hidden = YES;
        roomStaff3_Button.hidden = YES;
        roomStaff4_Button.hidden = YES;
        roomStaff5_Button.hidden = YES;
        roomStaffAll_Button.hidden = YES;
        callStaff.hidden = YES;

    } else if([sender selectedSegmentIndex] == 2) {
        ... ...

        roomStaff1_Button.hidden = NO;
        roomStaff2_Button.hidden = NO;
        roomStaff3_Button.hidden = NO;
        roomStaff4_Button.hidden = NO;
        roomStaff5_Button.hidden = NO;
        roomStaffAll_Button.hidden = NO;
        callStaff.hidden = NO;

    }
}
... ...

- (IBAction) buttonPress: (id)sender {
    NSString *title = [sender titleForState:UIControlStateNormal];
    NSString *newText = [[NSString alloc] initWithFormat: @"%@ called", title];
    callStaff.text = newText;
    [newText release];
}

... ...

- (void)dealloc {
    ... ...

    [roomStaff1_Button release];
    [roomStaff2_Button release];
    [roomStaff3_Button release];
    [roomStaff4_Button release];
    [roomStaff5_Button release];
    [roomStaffAll_Button release];
    [callStaff release];

    [super dealloc];
}

위에서 분할 컨트롤과, 스위치, 슬라이더에 대한 액션을 구현했다면 나머지 버튼을 구현하는 것은 크게 어렵지 않다. 위 소스 코드를 참조하여 코딩을 하도록 한다. buttonPress 액션은 각 버튼에 대한 값들을 받아와서 새로운 문자열을 만들고, 선언된 라벨에 출력하는 액션이다. 분할컨트롤에 항목을 추가하는 것과, 객체들을 release 하는것도 빠뜨리지 않고 하도록 한다. 모든 프로그래밍을 마친 후에는 인터페이스 빌더로 이동하여 인터페이스 디자인을 한다.



그림6. 세번째 분할컨트롤 화면 구현

이전의 인터페이스들이 그대로 보여지기 때문에 화면에 매우 복잡해지기 시작한다. 하나하나 잘 체크해가며 객체들을 배치하도록 한다. 객체를 배치한 후에는 아웃렛을 연결하고, 액션들을 연결하도록 한다. 어렵지 않게 마지막 화면을 마무리 할 수 있을 것이다.



그림7. 완성된 애플리케이션 시뮬레이션

위와 같이 분할컨트롤로 애플리케이션을 제작하면 더 많은 정보들을 좀더 효율적으로 보여줄 수 있다.



출처 : http://blog.naver.com/PostView.nhn?blogId=seanhigher&logNo=60105817427
Posted by 오늘마감

댓글을 달아 주세요

아이폰기본사용2010. 6. 23. 21:18
벨이 울리고 전화를 받을 수 없는 상황일때 무소음,무진동으로 만들어버리자.

때에 따라서는 전화를 받을 수 없거나 받고 싶지 않을때가 있습니다.
공공장소나 영화관에서 힘차에 울려되는 벨소리를 거부하기에는 버거운게 사실이지요.

그렇다고 전화기를 꺼버리는 것은 상대방에 대한 무책임한 행동이 될 수 도 있고요...
 

전화벨이 울릴 때 아이폰 측면에 있는 볼륨조정버튼을 아무거나 한번만 눌러 주시면 바로 무소음, 무진동으로 순식간에 조용해 집니다. 그리고 신호가 끊어지면 다시 원래 상태로 돌아갑니다.

 



출처 : http://blog.naver.com/PostView.nhn?blogId=neilwin&logNo=60104624533
Posted by 오늘마감

댓글을 달아 주세요

«이전  1  다음»