• Tidak ada hasil yang ditemukan

2주차

N/A
N/A
Protected

Academic year: 2023

Membagikan "2주차"

Copied!
41
0
0

Teks penuh

(1)

Introduction to iPhone OS

사운드 콘텐츠 응용 _2 주차

Dept. of Multimedia Science, Sookmyung Women’s University. Prof. JongWoo Lee

(2)

Index

iPhone SDK

- Xcode 시작하기

- Interface Builder 시작하기

- 사용자와 상호작용하기

• Objective-C

Dept. of Multimedia Science, Sookmyung Women’s University. Prof. JongWoo Lee

(3)

iPhone SDK

(4)

iPhone OS

iPhone OS 구조

- Core OS

Free BSD 기반의 UNIX 운영체제를 기반

- Core Services

Core Foundation :파일 엑세스, 네트워크 소켓, 런루프에 대한 접근 제공

Core Data: 데이터 베이스 엔진, SQLite형식으로 데이터를 저장

Address Book: 사용자의 주소록에 접근할 있는 API

- Media

Quarts : Core Graphics, OPenGL ES, Quartz Core 포함

Core Audio: Audio Toolbox, Audio Unit, AVFoundation, OpenAL

Media Player

- Cocoa Touch

user application 개발에 있어 기반이 되는 기술

UIKit framework 화면 표시를담당하는 View 객체, 버튼, 슬라 이더 같은 control들로 구성

(5)

iPhone 개발환경

- iPhone SDK

- Xcode

애플이 제공하는 통합 개발환경

(IDE, Integrated Development Environment)

- Interface Builder

사용자 인터페이스를 디자인하는 툴

- iPhone Simulator

개발에 필요한 도구

(6)

iPhone SDK(1/2)

• iPhone SDK

설치

-

아이폰 개발자 웹 페이지 주소:

http://developer.apple.com/iphone/

(계정생성필수)

-

iOS 4.0으로 업그레이드되면서

전버전을 모두 포함한 Xcode 3.2.3 버전과 iPhone SDK 4 함께 다운받 을 수 있음

-

DMG 파일은 OS에서실제 디스

크 이미지(MS 윈도우에서 ISO파일)

(7)

iPhone SDK(2/2)

• iPhone SDK

설치

-

Xcode and iPhone SDK for Snow Leopard 클릭

-

진행단계에 따라 설치

-

SDK는 기본값으로 /Developer 위치에

설치됨

-

설치된 Xcode는

/Developer/Application 위치

클릭!

(8)

Hello World 를 띄워보자 !

Xcode 시작하기

Hello World 를 띄워보자 !

Xcode 시작하기

(9)

Xcode 실행하기

Xcode

실행

-

/Developer/Application위치

-

아래의 Dock에서 finder클릭

-

Macintosh HD/Developer/Applications/Xcode 클릭

-

실행 , 바탕화면 아래의 Dock Xcode아이콘이추가됨

(10)

Xcode - 프로젝트 생성 (1/2)

새로운 프로젝트 생성

- File

메뉴의

[New Project...]

선택

가장 간단한 템플릿인 View-based Application

선택

(11)

새로운 프로젝트 생성

-

프로젝트 이름으로

Hello World

를 입력하고 원하는 폴더에 저장

Xcode - 프로젝트 생성 (2/2)

(12)

Xcode

에서의

Hello World

프로젝트 기본 윈도우

Xcode - 기본 윈도우

Groups & files 창 프로젝트 관련 설 정과 프로젝트를 구성하는 자원이 이곳으로 분류

클릭하면 숨겨 하위항목들이 나타남

Detail View 창 Groups & files창에서 선택한 세부정보를 보여 줌

편집창

어플리케이션의 소스코드를 작성하고 수정하는 곳

(13)

Xcode - Groups & Files 창

Classes

Other Sources

Resources

작성한 코드가 들어가는

Objective-C

클래스가 아닌 소스코드를 담는

프로젝트명_Prefix.pch : 헤더들을 미리 컴파일, 프로젝트를 컴파일하는 데 드는 시간을 줄이기 위함

main.m : main()함수가 있는 곳, 자동으로 생성되며 수정할 필요 없음

아이콘 이미지, 소리, 동영상 파일 등

Framework

MainWindow.xib : 기본 인터페이스 빌더 파일

프로젝트명ViewController.xib : 인터페이스 빌더에서사용하는 정보를 담고 있음 Info.plist : 어플리케이션의 정보를 담는 Property list

코드는물론 이미지나 소리 파일들과 같은자원들이 담긴 특별한 종류의라이브러리 이 폴더에 추가된 프레임워크는 어플리케이션에 링크되고,

코드에서 객체, 함수, 자원을사용할 있음

Xcode

에서의

Groups & Files

(14)

글씨나 버튼을 코딩을 통해 만들 있지만

iPhone

에서는 사용자 인터페이스 디자

인을 위한 특별한 툴이 있다

.

• Hello world

를 띄우기 위해 이제

Interface Builder

이동해 보자

!

Hello_WorldViewController.xib를 더블클릭!

(15)

Hello World 를 띄워보자 !

Interface Builder 시작하기

Hello World 를 띄워보자 !

Interface Builder 시작하기

(16)

• Hello_WorldViewController.xib

를 더블클릭 후 첫 화면

Interface Builder 기본 윈도우

main Inspector 창

다양한 사용자 인 터페이스 요소들을 세팅을 조회하고 수정

Library 창

사용자 인터페이스 창에 드래그될 사용 자 인터페이스(라이 브러리) 컴포넌트들 의 목록

View 창

사용자레이아웃 꾸미는공간

(17)

• Hello_WorldViewController.xib

- nib

파일의 메인 창

-

모든 nib파일은 File’s Owner First Responder라는 개의 아이콘

으로 시작, 자동으로 생기며 지우지 못함

- File’s Owner

어느 nib파일에서든 번째 아이콘

디스크에서 로드된 nib 파일 객체를나타냄

- First Responder

사용자가 현재 상호작용하는 객체

예를 들어, 사용자가 현재텍스트 필드에 데이터를 입력하는

이라면 해당 텍스트 필드가 현재의 first responder

이는 사용자가 인터페이스와 상호작용할때마다 바뀌기 때문

에 현재 어떤 컨트롤이나 뷰가 first responder인지 알아내는 코

드를 작성할 필요없이 first responder통신할 있는수단을

제공

- View

아이콘

-

UIView클래스의 인스턴스

-

4개의 창이 열린메인에서 제목표시줄에 View라고 적힌 창이

이 아이콘을 가리킴

Interface Builder 기본 윈도우

(18)

사용자 인터페이스를 구성하는 객체를 만들기 위해 적절한

!

예를 들어

,

어플리케이션에 버튼을 추가하고 싶다면

- UIButton

타입의 객체 인스턴스가 필요

코드 입력시

,

UIButton *myButton = [[UIButton alloc] initWithFrame:aRect];

✓ Interface Builder

사용 시

인터페이스 객페 팔레트에서

메인 윈도우로 버튼을 끌어와

똑같은 작업을 있음

왜 Interface Builder 를 사용해야 하는가 ?

버튼객체를 드래그

(19)

View 레이블 추가하기

- Library

윈도우

코코아 터치 객체들의 모임

항목을 라이브러리에서

nib

파일 창으로 끌어놓으면 클래스 인스 턴스가 어플리케이션에 추가됨

-

라이브러리 팔레트에서

Label

이라는 이름의 객체를 찾아

View

창으로 드래그

Label :

아이폰 화면에 나타나지만 사용자가 직접수정할 없는

짧은 텍스트

- Label

더블클릭하여

Hello, World!

를 입력

Interface Builder - 레이블 추가

(20)

• Interface Builder 에서 저장하기

- command+s

눌러 저장

Xcode 돌아가

- Build/ Build and Run

을 선택

-

또는

아이콘을 클릭

• iPhone Simulator 가 구동되며 어플리케이션을 실행

Hello World 어플리케이션 실행하기

(21)

아이폰 개발의 또다른 재미 !

사용자와 상호작용 하기

아이폰 개발의 또다른 재미 !

사용자와 상호작용 하기

(22)

상호작용과 MVC 모델

아이폰 개발의 또다른 재미 !

- Hello World

어플리케이션은 코코아 터치를 이용한 아이폰 개발의 간단하고 좋은

예제이지만 결정적인 기능이 빠짐

-

그것은

!

사용자와

상호작용

하기

모델 - - 컨트롤러 (MVC; Model-View-Controller) 패러다임

-

코코아 터치를 설계한 개발자들은

MVC

라는 개념에 따라 코코아 터치를 설계

- GUI

기반이 어플리케이션을 구현하는 코드를 각각 특성에 맞게 분할하여 작성

-

모델

Model

어플리케이션의 데이터와 비지니스 로직

-

View

사용자에게 데이터를 보여주고 그것을 조작하기 위한

UI

요소를 나타냄

-

컨트롤러

Controller

모델과 뷰를 서로 연결하고 사용자의 입력을 어떻게 처리할지 결정하는 어플리케이션 로직

(23)

그럼 이제 ,

Hello World 프로젝트에 버튼을 생성하여

버튼에 따라 레이블이 바뀌는 액션을 추가해보자 !

(24)

상호작용하는 Hello World

• Hello_WorldViewController.h 파일에 다음을 추가 ( 굵은 글씨 )

-

아웃렛

: IBOutlet

이라 불리는 특별한 변수 수형을 사용하여

nib

파일 안의 객체를 참

(nib

파일 내부의 객체를 가리키는 포인터

)

-

액션 메소드

: IBAction

이라는 키워드로 선언

액션 메소드라는 것을 인터페이스 빌더에 알려주고 컨트롤이 메소드를 호출하게 도와줌

#import <UIKit/UIKit.h>

//시작

//UIViewController클래스를 상속받는 Hello_WorldViewController

@interface Hello_WorldViewController : UIViewController { UILabel * statusText;

}

// Interface Builder nib 파일 안에 있는 객체와 연결되는 인스턴스 변수(멤버 변수) 임을 알려줌

@property (nonatomic, retain) IBOutlet UILabel *statusText;!!

// 액션 메소드 선언

// Interface Builder 클래스가 아래의 액션 메소드를 가지고 있다고 알려줌 - (IBAction)LbuttonPressed:(id)sender;

- (IBAction)RbuttonPressed:(id)sender;

//

@end

Hello_WorldViewController.h

(25)

• Hello_WorldViewController.m 파일에 다음을 추가 ( 굵은 글씨 )

#import "Hello_WorldViewController.h"

@implementation Hello_WorldViewController

@synthesize statusText;

//왼쪽 버튼이 눌렸을 호출되는 액션 메소드 - (IBAction)LbuttonPressed:(id)sender {

// 버튼 레이블의 문자열을 읽어온다.

NSString *title = [sender titleForState:UIControlStateNormal];

NSString *newText = [[NSString alloc] initWithFormat:@"%@ 사운드 콘텐츠 응용 입니다.", title];

statusText.text = newText;

// alloc으로 받은 문자열이므로 release 반환해야 한다.

[newText release];

}

//오른쪽 버튼이 눌렸을 호출되는 액션 메소드 - (IBAction)RbuttonPressed:(id)sender {

NSString *title = [sender titleForState:UIControlStateNormal];

NSString *newText = [[NSString alloc] initWithFormat:@"%@ 이종우 교수님 입니다.", title];

statusText.text = newText;

[newText release];

}

- (void)dealloc {

! [statusText release];

[super dealloc];

}

@end

상호작용하는 Hello World Hello_WorldViewController.m

(26)

• Hello_WorldAppDelegate.h 파일

(수정할 필요없음-기본으로 생성 )

#import <UIKit/UIKit.h>

@class Hello_WorldViewController;

//<UIApplicationDelegate>라는 프로토콜을 따르는 클래스

@interface Hello_WorldAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window;

Hello_WorldViewController *viewController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet Hello_WorldViewController *viewController;

@end

더 자세한

레퍼런스브라우저로 이동

Delegate : 다른 객체를 대신해서 책임지고 어떠한 일을 해주는 클래스 UIApplication은 UIKit 프레임워크에서 제공하는 클래스

UIApplication이 하는 작업들은 감춰져 있기 때문에 대부분의 경우에는 UIApplication이 하는 일에 대해 신경쓰지 않아도 됨

상호작용하는 Hello World Hello_WorldAppDelegate.h

UIApplicationDelegate

글자 위로

option

키를 누르면서 커서를 올리면

커서가 십자 모양으로 바뀌는데

그때 더블클릭을 하면

도큐멘테이션이 등장!

(27)

• Hello_WorldAppDelegate.m 파일

(수정할 필요 없음-기본으로 생성 )

#import "Hello_WorldAppDelegate.h"

#import "Hello_WorldViewController.h"

@implementation Hello_WorldAppDelegate

@synthesize window;

@synthesize viewController;

//어플리케이션이 모든 설정 작업을 마치는 즉시 사용자와 상호작용을 시작할 준비를 하는 메소드 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:

(NSDictionary *)launchOptions {

// Override point for customization after application launch.

// Add the view controller's view to the window and display.

[window addSubview:viewController.view];

[window makeKeyAndVisible];

return YES;

}

- (void)dealloc {

[viewController release];

[window release];

[super dealloc];

}

@end

Xcode

에서 수정한 파일을

모두 저장한 후

Interface Builder

로 이동

!

상호작용하는 Hello World Hello_WorldAppDelegate.m

(28)

• Hello_WorldViewController.xib 파일 클릭

- View

창에 레이블을 드래그하여 추가

- Label Attributes

창을 통해 속성값 수정 가능

-

만약

Attributes

창이 보이지 않는다면

, command+1

을 눌러 나타나게 함

상호작용하는 Hello World Hello_WorldViewController.xib

(29)

라이브러리 윈도우에서

Round Rect Button 을 드래그하여 View 에 가져오기

다음의 내용과 같이 수정하기

상호작용하는 Hello World Hello_WorldViewController.xib

이제 우리가 만든 구성 요소들이

상호간에 동작할 수 있도록 연동해 보자 !

(30)

• File’s Owner 아이콘을 이용하여 아웃렛 (IBOutlet) 과 레이블 사이를 연결

컨트롤 키를 누른 상태에서

File’s Owner

아이콘을 클릭

마우스 버튼을 누른 상태를 유지하며

View

창으로 끌어오면 파란 안내선이 나타나

는데 레이블까지 드래그

레이블 위에 커서가 위치된 상태로 마우스를 놓으면 회색메뉴가 펼쳐지고

statusText

를 선택

상호작용하는 Hello World Hello_WorldViewController.xib

(31)

액션 지정하기

- View

창에서

수강과목은

버튼이 클릭되있는 상태에서

command+2

버튼을 눌러

connections inspector

창을 연다

.

-

다양한 이벤트

우리는

Touch Up Inside

이벤트를 사용한다

.

- Touch Up Inside

오른쪽의 작은 동그라미를 클릭한채

File’s Owner

아이콘으로 드래그

-

작은 회색 메뉴가 나타나면

LbuttonPressed

를 선택

-

담당교수님은

버튼이 클릭되어 있는 상태에서

Touch Up Inside

동그라미를 클릭하여 드래그

, RbuttonPressed

를 선택

Touch Up Inside : 사용자의 손가락이 화면에서 떨어질 , 떨어지기 전에 손가락이 접촉한 부분이 버튼의 안쪽이면 Touch Up Inside이벤트를 발생

상호작용하는 Hello World Hello_WorldViewController.xib

(32)

• Interface Builder 를 저장한 후 Xcode 로 돌아와 실행

버튼클릭! 버튼클릭!

상호작용하는 Hello World 완료 !!

(33)

Objective-C

(34)

1980 년대 과학자이자 소프트웨어 엔지니어인 브래드 콕스가 개발

C 프로그래밍 환경에 스몰토크의 특징을 도입하는 방식으로 디자인

• iPhone Framework Library 의 대부분은 Objective-C 로 작성됐지만 C 언어도 수용할 수 있게 디자인되어 C/C++ 도 사용가능

자바 , C# 같은 많은 언어들이 Objective-C 언어를 차용

Objective-C 란 ?

확장자

.h

헤더파일, class interface 정의

.m

C, Objective-C코드로 implementation

.mm

Objective-C에서 C++클래스를 호출하는 경우에 사용

(35)

메시징

-

메소드는 전통적인 방식처럼 호출되는 것이 아니라 객체에 메시지를 보내는 형식

-

다른 언어에서 오브젝트명

.

메소드명

[

오브젝트 메소드

]

괄호에 둘러쌓이고 스페

이스로 구분하는 형식

-

파라미터를 가지는 경우

; [

오브젝트 메소드

:

파라미터

]

사용

) [object method];

[object methodWithInput:input];

리턴값이 있는 경우

output = [object methodWithOutput]

output = [object methodWithInputAndOutput:input];

-

클래스 메소드도 같은 문법으로 호출 가능

)

id myObject = [NSString string]; (

id 타입이란? myObject 어떤 오브젝트의 참조도 있다는)

같은 표현으로

,

NSString* myString = [NSString string];

(

모든

Objective-C

변소들은 포인터 타입이므로

*

붙일 필요가 없음

)

- myWidget

객체에

PowerOn

이라는 메시지를 보내는 방법

)

Objective-C returnValue = [myWidget powerOn];

C++ returnValue = myWidget

->

PowerOn();

C returnValue = widget_powerOn(myWidget);

Objective-C 의 특징

(36)

Objective-C 의 특징

접근자

- Objective-C

의 모든 인스턴스 변수들은

Private

-

,

접근자를 사용하여 엑세스해야

-

일반적인 문법

)

[photo setCaption:@”Day at the Beach”];

output = [photo caption];

//인스턴스변수를직접읽는다는뜻이아니라 caption이라는메소드를부르고있는

Objective-C에서는 일반적으로 getter 메소드에 get을 붙이지 않고 사용

- .(dot)

이용한 문법

.(dot)은 접근자(getter and setter)를 위해 Objective-C 2.0에 새로 추가된 문법 예)

photo.caption = @”Day at the Beach”;

output = photo.caption;

전처리기 선언 Import

- #include

대신

#import

문을 사용

(37)

Objective-C 의 특징

String

- c

String

그대로 사용 가능

-

그러나 대부분의

Objective-C framework

에서는

NSString

이라는 독자적인 클래스 사용

-

더블 쿼테이션 앞에

@

붙여줌으로써 생성 가능

) NSString *myString = @"My String\n";

NSString *anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];

 

// Create an Objective-C string from a C string

NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];

프로퍼티 property 선언

-

인스턴스 변수와 메소드 사이의 매개체 역할

- interface

안에 메소드와 같이 정의

)

@property (nonatomic, retain) IBOutlet UILabel *statusText;!

nonatomic - 쉽게 멀티스레드를 위한 코드를 삽입하지 않아 오버헤드를 줄임 retain - Objective-C 독특한 메모리 관리 기법 하나

-

implementation

파일에 @synthesize statusText; 같은 선언을 하면 컴파일러에 의해

소드가 자동 생성됨

(38)

Objective-C 의 특징

@interface MyClass : NSObject //인터페이스 정의 시작 {

int count;

id data;

NSString* name;

}

- (id)initWithString : (NSString*)aName;

+ (MyClass*)createMyClassWithString:(NSString*)aName;

@end //인터페이스 정의

클래스명 슈퍼

클래스명

멤버변수 정의

메소드 정의

클래스 선언 (.h)

클래스의 interface .h 정의 .m implementation

+메소드(클래스 메소드) - 메소드(인스턴스 메소드)

클래스 implementation(.m)

@implementation MyClass

-(id)initWithString:(NSString *)aName;

{

if(self = [super init]){

name = [aName copy];

}

return self;

}

+ (MyClass*)createMyClassWithString:(NSString*)aName;

{

return [[[self alloc] initWithString:aName] autorelease];

}

@end

(39)

Objective-C 의 특징

메소드 정의 방법

-

(void)insertObject:(id)anObject atIndex:(NSUInteger)index

리턴타입

메소드타입

식별자 파라미터타입

파라미터 메소드

식별자

-

호출하는

[myArray insertObject:anObject atIndex:0];

- 괄호 안에 괄호를 넣는 방법([ [] ])

쓸모없는 임시 변수를선언하지 않게 메소드의 리턴값을 파라미터로직접 넘길 있음

[[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];

-

.(도트) 사용하는 방법

accessor methods(단순히 클래스 멤버에 엑세스 하기 위해 만들어진 메소드, getter or setter) 호출할 사용 [myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0];

위의 방법은 다음과 같이 사용

myAppObject.theArray = aNewArray;

(40)

알아두면 좋은 맥 단축키

단축키

- command + space bar

한영변환

- command + s

저장

- command + a

전체선택

, command + c

복사

, command + v

붙여넣기

(41)

과제

iPhone OS 개발환경 구축 Hello World 프로젝트 수정

Referensi

Garis besar

Dokumen terkait

All of these factors will be elaborated in a form suggesting that the making and formulation of policies relates to the process of identifying and analyzing

Therefore, in 2021 Tinarangen BUMDes business activities will no longer be carried out.Based on information from several members of the public, that since the