출처 - http://shapeace.tistory.com/27

 

 

iPhone Programming for Dummy

1. iPhone SDK 설치


1.1. 시작하기

iPhone SDK 는 Apple 사에서 무료로 배포하고 있는 개발 도구로서, 누구든지 애플 개발 사이트에 등록하면 다운로드 받을 수 있다. 여기에는 Gcc 를 기반으로 한 Xcode 개발 환경과, Mac 에서 모든 것을 테스트 할 수 있는 에뮬레이터, 그리고 실제 장비에서 실행시키면서 수행 성능을 튜닝할 수 있는 성능 측정 프로그램 등 실제 개발 업무에 필요한 모든 것들이 포함되어 있다.

설치하기전, 먼저 다음과 같은 사항이 준비되었는지 확인하자.

  • Intel CPU 기반의 Mac Computer
기본적으로 iPhone SDK 는 Intel 기반의 Mac 에서만 사용할 수 있다. PPC 기반의 Mac 에서 SDK 를 설치한다면,
iPhone 과 관련된 사항은 설치되지 않는다. 그런데, PPC 기반의 Mac 에서도 전혀 불가능 한 것은 아니다.
이것에 대해서는 1.3. PPC 에서 설치하기 부분에서 다시 다루도록 하겠다.

  • 10.5.3 이상의 Mac OS X
이 버전 이하의 Mac OS 에서는 Xcode 가 설치되지 않게 되어 있다. 처음에는 그렇지 않았는데,
SDK Beta 6 부터에서 이런 제약이 생겼다.

  • C 프로그래밍 언어에 대한 기본 이해
정확하게는 Objective-C 언어에 대한 이해가 있어야 한다. Mac 에서 사용하는 Xcode 개발 환경은 기본적으로 Objective-C 언어에 기반하고 있으며, 그 역사는 NeXT Step 시스템으로 까지 거슬러 올라간다. 문제는 Objective-C 언어에 대해 아는 사람이 그리 많지 않다는 것이지만, 다행이도 Objective-C 언어는 C++ 만큼 어려운 언어는 아니다. 이 문서에서는 Objective-C 언어 자체에 대해 깊이 다루는 것은 피하도록 할 것이다. 단, C 언어 자체에 대한 이해조차 없다면 iPhone SDK 를 사용한 개발은 잠시 접어두고 C 언어 공부를 하고 오는 것을 권한다. 이 문서에서도 독자가 C 언어에 익숙하다는 것을 전제로 한다.


1.2. SDK 설치하기

Developer Connection 에 등록된 사람이라면 http://developer.apple.com/iphone/index.action 에서 SDK 를 다운로드 받을 수 있다.

약 1.2 GB 의 dmg 파일이 다운로드된다. 다 받았다면, 당연히 다운받은 dmg 파일을 마운트한다.
마운트하면 다음과 같은 내용이 보이는 디스크 이미지가 나타날 것이다.

두 번째 보이는 iPhone SDK 패키지 파일을 더블 클릭하여 설치를 시작하면 된다. Packages 폴더의 내용은 특별히 볼 필요 없다. 설치 과정에서 이 폴더에 있는 내용들이 로컬 디스크에 설치될 것이다. 단, PPC 환경에서 SDK 를 설치하는 사용자는 나중에 이 폴더를 열어볼 일이 생긴다.

설치 과정은 간단하다. 디스크 볼륨을 선택해주고, 별다른 설정 변경 없이 기본값으로 선택해서 진행하면 모든 것이 OK 이다.
설치 프로그램을 몇 단계 진행한 후 시스템 관리자 암호 창이 뜨고, 여기에 암호를 입력하면 다음 그림과 같은 화면이 나타나면서 설치가 진행된다. 십분 이상을 기다리면 설치가 완료된다.



설치 시간이 생각보다 길다고 불평하는 사람이 있을 지도 모르겠다. 하지만 이것은 단지 iPhone 응용 프로그램만을 만들기 위한 환경이 아니라, Java를 포함해서 Mac OS 용 프로그램을 만들 수 있는 모든 개발 환경이 포함되어 있는 것이다.

소프트웨어 설치가 끝나면, /Developer/Application 아래에 몇 가지 개발 프로그램들이 설치되어 있는 것을 확인할 수 있다.

Intel CPU 기반의 Mac 을 사용하는 사람이라면, 이제 기본적인 준비는 끝마친 셈이다.


1.3. PPC 에서 설치하기

이상의 과정을 모두 거치더라도 불쌍하게도 PowerPC 기반의 Mac을 사용하는 경우에는 iPhone 응용 프로그램 개발을 할 수 없다. 단지 Mac 데스크탑용 프로그램을 개발할 수 있는 Xcode 환경이 설치되어 있을 뿐이다. Apple 에서도 공식적으로는 PPC 기반의 Mac 에서 iPhone 응용 프로그램을 개발할 수 없다고 선언하고 있다.

그러나 방법은 있다. 다음의 과정을 통해서 G4, G5 Mac 에서도 iPhone 프로그램 개발을 해볼 수 있다. 단, 미리 말하지만 몇가지 사용할 수 없는 기능들이 있다고 하는데, 아직 정확하게 파악하지는 못했다. 그러나 기본적인 거의 모든 기능들을 문제없이 사용할 수 있다.

먼저, 설치하기 위해 마운트했던 디스크 이미지로 돌아가보자.
여기에는 앞서 말했듯이 packages 라는 이름의 폴더가 있다. 여기로 들어가 보면 각종 설치 패키지들이 보일 것이다.

SDK 설치 과정에서 자동으로 설치되었던 각종 패키지들이 여기에 있다. 그런데, 설치하면서 보았을 지도 모르겠지만, PPC 사용자들은 iPhone 관련 항목들이 설치되지 않았다. 선택 항목이 비활성화 되어서 임의로 선택할 수도 없었을 것이다.

이 제 할 일은, 여기서 iPhone 으로 시작하는 이름을 가진 5개 패키지를 하나씩 일일이 수동으로 설치하는 것이다. 설치 과정에서 설치할 폴더의 위치를 변경할 수 있는 단계도 나오는데, 일단 5개 모두 기본으로 설치하도록 클릭해서 넘어가도록 한다.

이런 식의 화면을 보면서 일일이 설치해야 한다...

모두 설치했다면, Finder 로 하드디스크의 루트(/) 위치를 살펴보자. 여기에 'Platforms' 라는 폴더가 생겼을 것이다.그리고 그 아래에는 두 개의 폴더가 있는데, 이 두 개의 폴더를 전부 /Developer/Platforms 아래로 이동한다.
겹 치는 폴더와 파일이 많기 때문에, 중복 확인 창이 뜨면 '대치' 하도록 해야 하는데, 여기서 기존 위치의 폴더 속성 문제로 한번에 파일 이동이 되지 않을 것이다. 문제가 되는 부분들을 하나씩 찾아서 하면 큰 문제 없이 모든 파일을 옮길 수 있을 것이다.

이제 힘든 대부분의 과정을 거쳤다.
마지막 단계가 하나 있는데, 일단 아래 경로를 찾아가서 파일들을 확인한다.

/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specification

꽤나 길다. 최종 목적지에 다다르면 3개의 파일이 있을 것이다.
여기서 iPhone Simulator Architectures.xcspec 이라는 이름의 파일을 텍스트 편집기로 열자.
이 파일의 내용은 아래와 같다. 이것은 iPhone 시뮬레이터용으로 컴파일러가 코드를 생성할 때 어떤 타겟으로 만들 수 있는지에 대한 설정값이다.

 
/**
    iPhone Simulator Architectures.xcspec
   
    Copyright (c) 2008 Apple Inc.  All rights reserved.

    Architecture specifications in the iPhone Simulator platform.
*/
(
    // 32-Bit
    {   Type = Architecture;
        Identifier = Standard;
        Name = "Standard (iPhone Simulator: i386)";
        Description = "32-bit iPhone Simulator architectures";
        ListInEnum = YES;
        SortNumber = 1;
        RealArchitectures = ( i386 );
        ArchitectureSetting = "ARCHS_STANDARD_32_BIT";
    },

    // Old-style Debug
    {    Type = Architecture;
        Identifier = Native;
        Name = "Native Architecture of Build Machine";
        Description = "32-bit for build machine";
        ListInEnum = YES;
        SortNumber = 101;
        ArchitectureSetting = "NATIVE_ARCH";
    },

    // Intel
    {   Type = Architecture;
        Identifier = i386;
        Name = "Intel";
        Description = "32-bit Intel";
        PerArchBuildSettingName = "Intel";
        ByteOrder = little;
        ListInEnum = NO;
        SortNumber = 105;
    },
)

원본 파일은 만약을 위해 각자 편한 방식으로 백업해 두길 권한다.
그리고 이 파일의 내용을 다음과 같이 수정한 후 저장하자.

 /**
    iPhone Simulator Architectures.xcspec
   
    Copyright (c) 2008 Apple Inc.  All rights reserved.

    Architecture specifications in the iPhone Simulator platform.
*/
(
    // 32-Bit
    {   Type = Architecture;
        Identifier = Standard;
        Name = "Standard (iPhone Simulator: ppc)";
        Description = "32-bit iPhone Simulator architectures";
        ListInEnum = YES;
        SortNumber = 1;
        RealArchitectures = ( ppc );
        ArchitectureSetting = "ARCHS_STANDARD_32_BIT";
    },

    // Old-style Debug
    {    Type = Architecture;
        Identifier = Native;
        Name = "Native Architecture of Build Machine";
        Description = "32-bit for build machine";
        ListInEnum = YES;
        SortNumber = 101;
        ArchitectureSetting = "NATIVE_ARCH";
    },

    // G5 32-bit
    {   Type = Architecture;
        Identifier = ppc;
        Name = "PowerPC G5 32-bit";
        Description = "32-bit PowerPC for G5 processor";
        ByteOrder = big;
        ListInEnum = NO;
        SortNumber = 203;
    }
)

이 작업을 하지 않으면 코드를 작성하더라도 에뮬레이터를 사용할 수 없다. 이렇게 힘든 과정을 모두 통과하였다면 PPC 사용자들도 이제 iPhone SDK 를 사용할 자격을 비로소 얻게 된다.


자, 이제 모두 출발선에 섰다. 계속 달려갈 결심을 하는 일 만 남은 셈이다.
Intel 이건 PPC 건, 이제 구분하지 말고 Xcode 의 얼굴을 구경해보자. Xcode 가 어디있냐고? 보나마나 /Developer 아래 어딘가에 있겠지만 알게 뭔가. 그냥 Spotlight 에서 Xcode 라고 타이핑 한 후 Enter 키를 눌러보면 되지. 그리고 나서 Xcode 는 그냥 Dock 에 등록해 버리자.



환 영합니다. Dummy 여러분.

 



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

댓글을 달아 주세요

역시 ... 아직 회원분들이 많이 안계신 관계로 저부터 썰을 풀기로 했습니다 ㅋㅋㅋ


사례1. 아... 아이폰 어플개발을 할랴는데 맥북이 필요하다는데 맥북부터 질르자.
개발자 전모씨는 일단 성급한 마음에 맥북이랑 아이폰 책을 질러버렸다.
그 없는돈에도..ㅠㅠ

아..한 100 깨지니까 정신이 혼미하네..
큰맘먹고산 맥북을 열고 xcode 도 깔았는데...
아이폰 책은 따라하기 식이긴한데..
문법을 몰르니 ..쩝.. 접어야지

사례2. 맥북을 열긴열었는데.. 복사는 어케하는거야? 'End'키는 어디있는거야.
개발자 전모씨는 프로그램 개발에 앞서서 매킨토시 사용법부터 익히기로했다.
아이폰 어플개발은.. 저기..멀리 날아가나..

ㅎㅎ 음. 뭔가 사례를 들라고했는데 재미가없군요.
눈치채셨다시피..개발자 전모씨는 접니다 -.-;

일단 아이폰 어플개발하기전에 Objective-C 언어를 익혀야되는데요.
제가 경험한 바로는 Objective-C 기초를 익히는 단계에선 아직 맥북이
필요 없다는겁니다.

첨부터 괜히 질른거죠.
Window 환경에서 Objective-C를 먼저 익히고 그담에 맥으로 넘어갑시다.

윈도우 환경설정 시작합니당.~~

1. 필요한 파일을 다운받읍시당
GNUstep System  0.24.0
 -
http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-system-0.24.0-setup.exe
GNUstep Core 0.23.1
-
http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-core-0.23.1-setup.exe

dev c++
- 파일첨부 확인(http://www.appsnext.com/work_data/devcpp-4.9.9.2_nomingw_setup.exe)

2. 파일을 설치합니다
GNUstep System  ->GNUstep Core  ->dev c++  순서로 설치하심다.

1. GNUstep System  설치1 -걍 agree


2. GNUstep System  설치2-걍 next 후 설치 화면 지지지직~~



3. GNUstep System  설치3-완료



4. GNUstep Core 설치1-역시 계속 next



5. GNUstep Core 설치2-또...지지지직~~



6. GNUstep Core 설치3- 완료



7.Dev-C++ 설치 첫번째..
얼레..이상한게 뜨네요... 그래도 걍 Go~~



8.Dev-C++ 설치 두번째.. -뭐가있는 지 살펴볼려다가 역시 귀차니즘.. 다음~



9.Dev-C++ 설치 세번째.. -완료

자....다음장에서 계속 이어짐다~~ ^^;


http://www.junapps.com/bbs/board.php?bo_table=03_5&wr_id=3


*<본 강좌는 AppsNext에서 제공되는 강좌입니다. 블로그에 퍼가시거나 카페에 퍼가셔도 좋으나, 반드시 하단에 출처에 AppsNext 를 명시해주시고. 링크도 걸어주셔요>



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

댓글을 달아 주세요

아이폰어플개발정보2010. 10. 16. 23:18
[아이폰 앱 개발] Exploring iPhone Graphics Part 1

Exploring iPhone Graphics Part 1

April 9th, 2008 Posted in Software DevelopmentiPhone


The series of articles is going to discuss creating graphics on the iPhone using the SDK. Part 1 will start out with the basics by drawing some simple 2D graphics. In later articles I plan to get into animation, using the accelerometers and maybe even a little OpenGL.

The sample application for this article is very simple. It is just a Cocoa Touch application with a single view. The view’s drawRectmethod contains all of the code. Again, this first article is very introductory.

All drawing is done directly onto a graphics context. For this example we are drawing on the current UI graphics context. You can also create your own graphics context and draw into it but this article won’t be getting into that process.

The first step is to get the graphics context and clear it. Technically since we are only really rendering this scene once and nothing is changing I don’t need to clear it but I will anyway.


1
2
3
4
5

- (void)drawRect:(CGRect)rect
{
    // Get the graphics context and clear it
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextClearRect(ctx, rect);

The UIGraphicsGetCurrentContext function returns the current graphics context for thisUIView object. The CGContextRef value returned from this call is only valid until the drawRect method returns. You should not try to save the value in a variable and use it later.

CGContextClearRect does just what it says. It clears a rectangle. It actually makes the entire rectangle black. I haven’t found a way to clear to a different color.

The first object we are going to draw is a solid square colored red.


1
2
3

    // Draw a red solid square
    CGContextSetRGBFillColor(ctx, 255, 0, 0, 1);
    CGContextFillRect(ctx, CGRectMake(10, 10, 50, 50));

The CGContextSetRGBFillColor function is used to set the current fill color for the context. You give it values for red, green, blue and alpha. There are other ways to set the fill color but this is the easiest I’ve found. We’ll talk about the alpha value later.

You pass CGContextFillRect a rectangle created with CGRectMake and it will draw your rectangle using the current fill color. Nothing to it. Very simple stuff.

This code creates a solid circle colored green.


1
2
3

    // Draw a green solid circle
    CGContextSetRGBFillColor(ctx, 0, 255, 0, 1);
    CGContextFillEllipseInRect(ctx, CGRectMake(100, 100, 25, 25));

Again we use CGContextSetRBGFillColor to set the current fill color.CGContextFillEllipseInRect is passed a rectangle and will draw an ellipse within the bounds of the rectangle. We are giving it a square so our ellipse will end up being a circle.

The following code will draw the outline of a circle in blue:


1
2
3

    // Draw a blue hollow circle
    CGContextSetRGBStrokeColor(ctx, 0, 0, 255, 1);
    CGContextStrokeEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));

This time we use CGContextSetRGBStrokeColor instead of CGContextSetRGBFillColor. The current stroke color is the color used to draw stroke type graphics.CGContextStrokeEllipseInRect is just like CGContextFillEllipseInRect except it draws a hollow circle instead of a filled circle.

This code draws the outline of square in yellow.


1
2
3

    // Draw a yellow hollow rectangle
    CGContextSetRGBStrokeColor(ctx, 255, 255, 0, 1);
    CGContextStrokeRect(ctx, CGRectMake(195, 195, 60, 60));

This code constructs a triangle from a set of three lines.


1
2
3
4
5
6

    // Draw a purple triangle with using lines
    CGContextSetRGBStrokeColor(ctx, 255, 0, 255, 1);
    CGPoint points[6] = { CGPointMake(100, 200), CGPointMake(150, 250),
                          CGPointMake(150, 250), CGPointMake(50, 250),
                          CGPointMake(50, 250), CGPointMake(100, 200) };
    CGContextStrokeLineSegments(ctx, points, 6);

The CGContextStrokeLineSegments function is passed an array of points and will draw lines between each pair of points.

The following code will draw the text string “TrailsintheSand.com”:


1
2
3
4
5
6
7
8
9
10
11
12
13

    // Draw the text TrailsintheSand.com in light blue
    char* text = "TrailsintheSand.com";
    CGContextSelectFont(ctx, "Helvetica", 24.0, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode(ctx, kCGTextFill);
    CGContextSetRGBFillColor(ctx, 0, 255, 255, 1);
 
    CGAffineTransform xform = CGAffineTransformMake(
            1.0,  0.0,
            0.0, -1.0,
            0.0,  0.0);
    CGContextSetTextMatrix(ctx, xform);
 
    CGContextShowTextAtPoint(ctx, 10, 300, text, strlen(text));

When drawing text we need a font. In this case we are selecting a 24 point Helvetica font into the current context with the CGContextSelectFont function.

CGContextSetTextDrawingMode is used to set how the text will be drawn. In this case it is set to kCGTextFill which means the text will be filled with the current fill color. You can draw the text outlined using kCGTextStroke or both filled and outlined with kCGTextFillStroke.

Since we are using kCGTextFill we need to set a fill color.

CGContextShowTextAtPoint draws the text at the specified x,y coordinate within the view. Notice that it takes a C style null terminated string.

You’ll notice that I skipped the call to CGAffineTransformMake function call. If you run this code without it your text will be drawn up-side down but in the correct position on the screen. The CGAffineTransformMake function creates a transformation matrix and theCGContextSetTextMatrix will cause this matrix to be applied to all text drawn on the context. The matrix above will cause to text to be flipped so it is right-side up. It seems strange to me that the default would be upside down. Apparently fonts are stored with a different coordinate system. You can also use transformation matricies to do things like rotate and scale your text.

Now we are going to draw a filled gray transparent rectangle over some of the other graphics that we’ve already drawn.


1
2
3

    // Draw a transparent filled circle over other objects
    CGContextSetRGBFillColor(ctx, 200, 200, 200, 0.5);
    CGContextFillEllipseInRect(ctx, CGRectMake(100, 200, 150, 150));

The last parameter passed to CGContextSetRGBFillColor is the alpha value and controls the transparency of what is drawn. This value ranges from 0 to 1 with 0 being completely transparent and 1 being completely opaque.

The last graphics example is drawing an image.


1
2
3
4
5
6
7
8
9
10

    // Load image from applicaiton bundle
    NSString* imageFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iphone_sdk.png"];
    CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);
    CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);
    CGDataProviderRelease(provider);
 
    // Draw image
    CGContextDrawImage(ctx, CGRectMake(200, 0, 100, 100), image);
    CGImageRelease(image);
}

The image we are going to draw has been added as a resouce to the project (just like a source file) and will be compiled into the application bundle. We get a reference to the bundle by calling the mainBundle: method of NSBundle. Then we get the resourcePath by calling the resourcePath: method on the mainBundle. This returns an NSString object that we call stringByAppendingPathComponent: on passing it the file name to get the full path to the file name.

Now that we have the file name we create a CGDataProviderRef object using theCGDataProviderCreateWithFilename function.

Now we can get the actual CGImageRef object that we’ll use to draw the image. TheCGImageCreateWithPNGDataProvider function takes our provider and turns it into an image.

We are done with the provider so we call CGDataProviderRelease to release its memory and resources.

Finally we can call the CGContextDrawImage function to actually draw the image on the graphics context. We pass it a rectangle that the image will be drawn into. The image will be automatically resized to fit the rectangle with no regard to the image aspect ratio.

Lastly we use CGImageRelease to free up the image.

The only problem with this code is that the image will be drawn up-side down. I assume this is the same reason fonts default to being drawn up-side down. I’ll talk about how to correct this in the next article.

Screenshot:
The next article in this series will go into more detail on drawing images.


http://trailsinthesand.com/exploring-iphone-graphics-part-1

Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 10. 12. 05:41
Exploring iPhone Graphics Part 1

Exploring iPhone Graphics Part 1

April 9th, 2008 Posted in Software DevelopmentiPhone


The series of articles is going to discuss creating graphics on the iPhone using the SDK. Part 1 will start out with the basics by drawing some simple 2D graphics. In later articles I plan to get into animation, using the accelerometers and maybe even a little OpenGL.

The sample application for this article is very simple. It is just a Cocoa Touch application with a single view. The view’s drawRectmethod contains all of the code. Again, this first article is very introductory.

All drawing is done directly onto a graphics context. For this example we are drawing on the current UI graphics context. You can also create your own graphics context and draw into it but this article won’t be getting into that process.

The first step is to get the graphics context and clear it. Technically since we are only really rendering this scene once and nothing is changing I don’t need to clear it but I will anyway.


1 2 3 4 5 

- (void)drawRect:(CGRect)rect { // Get the graphics context and clear it CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextClearRect(ctx, rect);

The UIGraphicsGetCurrentContext function returns the current graphics context for thisUIView object. The CGContextRef value returned from this call is only valid until the drawRect method returns. You should not try to save the value in a variable and use it later.

CGContextClearRect does just what it says. It clears a rectangle. It actually makes the entire rectangle black. I haven’t found a way to clear to a different color.

The first object we are going to draw is a solid square colored red.


1 2 3 

 // Draw a red solid square CGContextSetRGBFillColor(ctx, 255, 0, 0, 1); CGContextFillRect(ctx, CGRectMake(10, 10, 50, 50));

The CGContextSetRGBFillColor function is used to set the current fill color for the context. You give it values for red, green, blue and alpha. There are other ways to set the fill color but this is the easiest I’ve found. We’ll talk about the alpha value later.

You pass CGContextFillRect a rectangle created with CGRectMake and it will draw your rectangle using the current fill color. Nothing to it. Very simple stuff.

This code creates a solid circle colored green.


1 2 3 

 // Draw a green solid circle CGContextSetRGBFillColor(ctx, 0, 255, 0, 1); CGContextFillEllipseInRect(ctx, CGRectMake(100, 100, 25, 25));

Again we use CGContextSetRBGFillColor to set the current fill color.CGContextFillEllipseInRect is passed a rectangle and will draw an ellipse within the bounds of the rectangle. We are giving it a square so our ellipse will end up being a circle.

The following code will draw the outline of a circle in blue:


1 2 3 

 // Draw a blue hollow circle CGContextSetRGBStrokeColor(ctx, 0, 0, 255, 1); CGContextStrokeEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));

This time we use CGContextSetRGBStrokeColor instead of CGContextSetRGBFillColor. The current stroke color is the color used to draw stroke type graphics.CGContextStrokeEllipseInRect is just like CGContextFillEllipseInRect except it draws a hollow circle instead of a filled circle.

This code draws the outline of square in yellow.


1 2 3 

 // Draw a yellow hollow rectangle CGContextSetRGBStrokeColor(ctx, 255, 255, 0, 1); CGContextStrokeRect(ctx, CGRectMake(195, 195, 60, 60));

This code constructs a triangle from a set of three lines.


1 2 3 4 5 6 

 // Draw a purple triangle with using lines CGContextSetRGBStrokeColor(ctx, 255, 0, 255, 1); CGPoint points[6] = { CGPointMake(100, 200), CGPointMake(150, 250), CGPointMake(150, 250), CGPointMake(50, 250), CGPointMake(50, 250), CGPointMake(100, 200) }; CGContextStrokeLineSegments(ctx, points, 6);

The CGContextStrokeLineSegments function is passed an array of points and will draw lines between each pair of points.

The following code will draw the text string “TrailsintheSand.com”:


1 2 3 4 5 6 7 8 9 10 11 12 13 

 // Draw the text TrailsintheSand.com in light blue char* text = "TrailsintheSand.com"; CGContextSelectFont(ctx, "Helvetica", 24.0, kCGEncodingMacRoman); CGContextSetTextDrawingMode(ctx, kCGTextFill); CGContextSetRGBFillColor(ctx, 0, 255, 255, 1);   CGAffineTransform xform = CGAffineTransformMake( 1.0, 0.0, 0.0, -1.0, 0.0, 0.0); CGContextSetTextMatrix(ctx, xform);   CGContextShowTextAtPoint(ctx, 10, 300, text, strlen(text));

When drawing text we need a font. In this case we are selecting a 24 point Helvetica font into the current context with the CGContextSelectFont function.

CGContextSetTextDrawingMode is used to set how the text will be drawn. In this case it is set to kCGTextFill which means the text will be filled with the current fill color. You can draw the text outlined using kCGTextStroke or both filled and outlined with kCGTextFillStroke.

Since we are using kCGTextFill we need to set a fill color.

CGContextShowTextAtPoint draws the text at the specified x,y coordinate within the view. Notice that it takes a C style null terminated string.

You’ll notice that I skipped the call to CGAffineTransformMake function call. If you run this code without it your text will be drawn up-side down but in the correct position on the screen. The CGAffineTransformMake function creates a transformation matrix and theCGContextSetTextMatrix will cause this matrix to be applied to all text drawn on the context. The matrix above will cause to text to be flipped so it is right-side up. It seems strange to me that the default would be upside down. Apparently fonts are stored with a different coordinate system. You can also use transformation matricies to do things like rotate and scale your text.

Now we are going to draw a filled gray transparent rectangle over some of the other graphics that we’ve already drawn.


1 2 3 

 // Draw a transparent filled circle over other objects CGContextSetRGBFillColor(ctx, 200, 200, 200, 0.5); CGContextFillEllipseInRect(ctx, CGRectMake(100, 200, 150, 150));

The last parameter passed to CGContextSetRGBFillColor is the alpha value and controls the transparency of what is drawn. This value ranges from 0 to 1 with 0 being completely transparent and 1 being completely opaque.

The last graphics example is drawing an image.


1 2 3 4 5 6 7 8 9 10 

 // Load image from applicaiton bundle NSString* imageFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"iphone_sdk.png"]; CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]); CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, true, kCGRenderingIntentDefault); CGDataProviderRelease(provider);   // Draw image CGContextDrawImage(ctx, CGRectMake(200, 0, 100, 100), image); CGImageRelease(image); }

The image we are going to draw has been added as a resouce to the project (just like a source file) and will be compiled into the application bundle. We get a reference to the bundle by calling the mainBundle: method of NSBundle. Then we get the resourcePath by calling the resourcePath: method on the mainBundle. This returns an NSString object that we call stringByAppendingPathComponent: on passing it the file name to get the full path to the file name.

Now that we have the file name we create a CGDataProviderRef object using theCGDataProviderCreateWithFilename function.

Now we can get the actual CGImageRef object that we’ll use to draw the image. TheCGImageCreateWithPNGDataProvider function takes our provider and turns it into an image.

We are done with the provider so we call CGDataProviderRelease to release its memory and resources.

Finally we can call the CGContextDrawImage function to actually draw the image on the graphics context. We pass it a rectangle that the image will be drawn into. The image will be automatically resized to fit the rectangle with no regard to the image aspect ratio.

Lastly we use CGImageRelease to free up the image.

The only problem with this code is that the image will be drawn up-side down. I assume this is the same reason fonts default to being drawn up-side down. I’ll talk about how to correct this in the next article.

Screenshot:
The next article in this series will go into more detail on drawing images.


http://trailsinthesand.com/exploring-iphone-graphics-part-1

Posted by 오늘마감

댓글을 달아 주세요

오브젝트C2010. 8. 11. 17:33
Hello iPhone - 1
책에 서술되어 있는 앞부분의 기초부분을 다 날려먹고

우선 눈으로 확인할 수 있는 예제가 필요했던 나는 바로 모든 프로그램의 기초인 헬로월드를 작성하기로 했다.

아주 기본적인 헬로월드는 플래시에서 텍스트필드(static)를 스테이지에 생성해서 그냥 'Hello World"라고 타이핑하는거와 별반 차이가 없다.

view의 역할을 해주는 .xib파일을 하나 생성하고 더블클릭하면 Interface Builder라는 녀석이 실행되면서 

여러개의 inspector들이 열린다. 그중 "View"라는 창에 "Library'라는 창에 있는 "Label" 컴포넌트를 끌어다 놓고 더블클릭해서

"Hello iPhone"이라고 타이핑하고 xCode로 와서 "build and go"를 클릭하면 iPhone Simulator라는 녀석이 실행되면서 

마치 iPhone에서 실행되는것처럼 모니터에 iPhone이 하나 나오고 어플이 실행되듯 Interface Builder의 View에서 만들어 놓은 화면이

보이게 된다. 

일단 이렇게만 하면 목표로했던 헬로월드는 완료!!

그런데 이렇게만 작성하면 mvc의 묘미를 느낄수가 없다. 그래서 다음 예제에 바로 도전했다.

2번째부터는 좀 복잡해진다. 중간중간 다른 일을 해야해서 집중도가 떨어졌지만 여차저차해서 빌드는 했다.

우선 새로운 프로젝트를 만드는데 첫번째 예제에서는 "View-Based Applicaion" 템플릿을 사용했는데, 

두번째에서는 "Window-Based Application" 템플릿을 이용한다.

생성된 프로젝트는 

MyHello //
 -Classes //
 -Otehr Sources
 -Resources //
 -Frameworks
 -products
Targets
Exeutables
Errors and Warnings
Find Results
Bookmarks
SCM
Project Symbols
Implementation Files
NIB Files //
이런식으로 구성된다.

Classes는 딱 보기에도 추가해야할 클래스들을 넣어야하는 패키지인거 같고,

Other Sources는 이미지 파일이나 기타 파일들을 넣는 패키지인거 같고,

Resourcese는 view역할을 하는 .xib파일과 info.plist파일이 저장돼있었고( 이외의 정보는 아직... ),

Frameworks는 템플릿을 정하면 필요한 framework들이 자동으로 추가되는 패키지라고 하고,

Products는 음.... 잘 모르겠다.

Targets, Executables, Errors and Warnings, Find Results, Bookmarks, SCM, Project Symbols, Implementation Files  << 모두 예제에서 언급되지 

않는 녀석들이다.

그냥 느낌상 뭐를 하는 녀석들이구나~하고 있을뿐....

암틈 예제에서 언급된 녀석들은 라벨 뒤에 '//'요게 붙은 녀석들이다.

프로젝트 생성후 window에서 활성화될 view를 추가해야한다. 그래서 View Controller 객체를 하나 만들어야 한다.

Cocoa Touch Classes 항목에 있는 UIViewController subclass를 선택해서 "MyViewController"라는 이름으로 생성해준다.

이때 옵션을 체크하면 .m 파일과 함께 .h파일도 함께 생성된다. 기본으로 설정되어 있다.

자~ 이제 컨트롤러는 하나 만들었으니 MyHelloAppDeligate.h 요 파일에 내가 추가한 컨트롤러 객체와 애플리케이션을 연결해준다.

@class MyViewController;

그리고 interface 멤버변수로 선언해준다.

MyViewController *myViewController;

--------------------------------------------------------------------------------------------------------------------------------
위의 2가지 과정은  as3 관점에서 본다면 
import a.b.c.MyViewController;
var myViewController: MyViewController;
뭐 이런 느낌이다.
--------------------------------------------------------------------------------------------------------------------------------

이제 MyHelloAppDeligate.h 파일에 선언되어 있으니 인스턴스를 생성해보자.

인스턴스의 생성은 MyHelloAppDeligate.m 요 파일에서 할 수 있다.

우선은 생성해놓은 MyViewController.h파일을 import 해준다.

#import "MyViewController.h";

그리고나서는 컨트롤러에 함수 접근자를 사용하겠다고 컴파일러에게 알려주는 구문을 적어준다.

@synthesize myViewController;

객체 생성은 애플리케이션이 초기화되면 이루어져야하므로

flex의 mxml에서 initApp/initialized 같은 느낌의 applicationDidFinishLaunching 함수에서 객체를 생성해준다.

함수내에서만 사용되는 aViewController를 생성해서 MyViewController객체를 받아서 멤버변수인 myViewController에 대입해주고

aViewController는 초기화해준다.

--------------------------------------------------------------------------------------------------------------------------------
왜 이런 방식으로 해야하는지는 내가 c/c++/objective-c에 무지하므로 잘 모르겠다.

초급자를 위한 책이라서 이렇게 한건가..... 음... 아직 잘 모르겠다.
--------------------------------------------------------------------------------------------------------------------------------

다음으로 myViewController의 view를 UIView타입인 controllerView로 받은 후 window의 addSubview의 파라미터로 넘긴다.

window에 view를 추가하면서 자기 역할을 다한 myViewController도 초기화해준다.

컨트롤러는 등록해서 생성까지 했으니 이제 view가 필요하다.

view는 .xib파일인데 NIB Files 패키지 내에 생성해준다.

.xib파일을 더블클릭하면 위에서 한번 언급된 Interface Builder가 실행된다.

이후부터는 이미지가 필요한데 맥에서 어떻게 캡쳐뜨는지 까먹었으므로 생략..........

포스팅하는 시간이 예제 한번 따라하는 시간보다 더 길어지다니... 난감하다. 일단 오늘은 여기서 종료...

이따 출근은 해야하니까 ㅡ,.ㅡ;;




출처 : http://blog.naver.com/PostView.nhn?blogId=3dasu&logNo=140089713852

'오브젝트C' 카테고리의 다른 글

Objective-C의 기초  (0) 2010.08.22
Object-C : Declared Properties 에 대한 깔끔한 정리  (0) 2010.08.12
Hello iPhone - 1  (0) 2010.08.11
The Objective-C 2.0 Programming Language  (0) 2010.06.24
Objective-C  (0) 2010.06.22
Objective-C의 기본 문법  (0) 2010.06.22
Posted by 오늘마감
TAG -, 1, Hello, iPhone

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 21. 22:49
[MammothHunting] - Cocos2D를 사용한 아이폰 게임 개발 튜토리얼 1

출처 : http://lambert.tistory.com/290

Cocos2D-iPhone 엔진은 원래 Python으로 작성된 2D 기반의 게임 라이브러리 인데 이 것을 아이폰 용으로 포팅한 것이 바로 Cocos2D-iPhone이다. 아이폰 게임 개발에 관심을 갖게 된다면 가장 먼저 접합게 되는 게임 엔진일 것이다. Cocos2D는 모바일 환경에서 그래픽 출력을 위한 OpenGL ES 및 사운드 출력을 위한 OpenAL 라이브러리를 손쉽게 게임 개발에 사용할 수 있도록 래핑한 것이다. 물론 다양한 기능을 지원한다. 이에 대한 내용은 사이트에서 확인 바란다.


단 0.8.X  버전에서 0.99.0(cocos2d for iPhone v0.99.0 Release Notes) 버전으로 업그레이드 되면서 CC라는 네임스페이스를 사용하기 시작했다는 점에 주의해야 한다. 0.99.0 이전의 인터넷 자료를 참고한다면 샘플 소스에서 차이가 날 것이다.

이와 관련된 내용과 기본적인 사용법(Hello World, Hello Actions, Hello Events 등등) 등을 공부하고 나면 바로 다음 단계가 궁굼해 진다. "그럼, 어떻게 게임을 만들지?", 물론 사이트에 샘플 게임 소스가 공개되어 있긴 하지만 이제 막 게임 개발에 입문한 개발자에게는 그리 녹녹치 않다.

부분적으로 API를


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

댓글을 달아 주세요