18 November 2012

유니티를 사용하여 2.5D 게임을 만드는 방법 튜토리얼: 파트 1

이 포스트는 12+년 경력의 소프트웨어 엔지니어이고, 인디 iOS 개발자이며,  Touch Code Magazine의 창립자이며, iOS 튜토리얼 팀 멤버인  Marin Todorov가 썼습니다.

Learn how to create a simple 2.5D game with Unity!

Learn how to create a simple 2.5D game with Unity!

2.5D 게임은 기본적으로 3D인데 2D 방향으로만 진행하는 게임이다.
수퍼마리오 브러더스 위, 리틀 빅 플래닛 또는 페이퍼 몬스터들 같은 게임들이다.
2.5D 나 3D 게임을 만드는 좋은 방법은 인기 있고 쉽고 가격도 괜찮은  유니티 를 사용하는 것이다.
이 튜토리얼들은 유니티를 사용하여 SharkBomber라는 2.5D 게임을 만드는 방법을 보여준다.
처음 유니티를 배운다면 이 튜토리얼은 알맞다. 간단한 게임부터 따라 배우면 된다.
이 게임은 작고 잘 무장된 비행기를 제어하여 나쁜 상어에게 폭탄을 때려 이쁜 크라운피쉬를 보호하는 것이다.
유니티는 Objective-C를 사용하지 않으므로 Objective-C에 대한 경험은 필요없지만, C#, Java, Actionscript 같은 OOP 언어 경험은 도움 된다.
이 튜토리얼은 맥 유저용이다. 윈도우즈 유저는 설정이 다르다. iOS 시뮬레이터를 사용하지 않고 iOS 디바이스에서만 테스트 할 것이니, iOS 디비이스를 준비하라.
유니티로 뛰어 들어 보자.
계속해서 읽기!

태그: , , , ,

13 November 2012

Xcode를 이용한 자동 테스팅 시작하기 파트 1/2

Learn how to add automated testing into your iOS 6 apps!
Ray로 부터 알림:  이 챕터는 iOS 6 Feast 의 마지막 iOS 6 튜토리얼이고 10번째이다! 이 튜토리얼은 새로운 책인 iOS 6 By Tutorials 에서 볼 수 있다. Charlie Fulton 이 이 챕터를 작성했다. 내 친구들 중의 한명이고 튜토리얼 팀의 새로운 멤버이다.  즐기자!
이 블로그 포스트는 iOS 튜토리얼 팀 멤버 Charlie Fulton가 작성했다. 그는 풀타임 iOS 개발자이면서 사냥, 낚시, 가족과 함께 어울리는 것을 즐긴다.

모든 개발자들은 자신의 소프트웨어를 테스트하고 스마트 사람들의 대부분은 이러한 목적으로 test suite를 만든다. test suite는 일반적으로 코드의 작은 단위, 특정 메서드나 클래스를 대상으로 단위 테스트로 알려진 테스트 케이스의 집합을 말한다.

단위 테스트는 테스트 주도 개발 방식을 채택하고 있어 코드가 아주 적은 버그를 가지고 있는지 확인 할 수 있다. 그리고 발견된 각 버그의 단위 테스트를 작성하여 버그가 절대발생되지 않을거라는 확신을 할 수 있다! 단위 테스트와 적극적으로 디버깅하면 애플리케이션 개발 환경에서 예상외의 동작의 가능성을 좁힐 수 있다.

알다시피 우리는 일을 끝내기 위해 종종 서두르다. 또는 우리는 게을러진다. 그래서 코드를 변경할 때마다 자동으로 실행하도록 단위 테스트를 자동화하는게 훨씬 좋다. 여러분이 팀의 일원으로 작업할 때 특히 중요하다.

자동으로 빌드, 테스트, 애플레키이션을 베타 테스터에게 배포할 수 있다면, 관심이 가지 않는가? 그러다면, 읽어주기 바란다!

보너스 절과 다음 절에서 자동 빌드 시스템을 셋팅하는 법을 배우고 iOS 앱에 대한 테스팅 시스템을 셋팅할 것이다. 예제 프로젝트를 통해 단위 테스트와 GitHub(github.com) 저장소에 리모트하는 법, Jenkins을 이용한 지속적인 통합 서버 구축을 진행한다. Jenkins은 점진적으로 여러분의 GitHub 저장소를 체크하고 빌드, 테스트, TestFlight에 앱을 전송할 것이다!

자동 테스팅에 대한 내용이 새롭다면 위에서 소개한 GihHub, Jenkins, TestFlight이 무엇인지 궁금할 것이다. 이 튜토리얼에서 각각의 내용에 대해 상세히 설명하지만 아래에 이 툴들에 대해 간략히 소개하겠다:

  • GitHub – 무료의 공공 Git 저장소, 공동작업자 관리, 이슈 트레킹, 위키, 다운로드, 코드 리뷰, 그래프 등 많은 기능을 지원한다!
  • Jenkins – 지속적인 통합 서버이며 Git 저장소의 내용이 변경되는 내용을 관찰하여 스케줄링한다. 그리고 빌드와 테스트를 자동으로 시작하고 결과를 알림으로 알려준다.
  • TestFlight – iOS 앱을 테스터들에게 Over the Air(OTA)로 전송하는 서비스, 크래쉬 로그 분석을 제공한다.

이 교육 오디세이에 대한 수단인 Geek스러운 예제 프로젝트를 소개할 수 있는 시간이 여러분을 잠시동안 벗어나게 해줄 것이다. 그러나 향후 페이지에 자세한 내용이 준비되어 있다!

계속해서 읽기!

태그: , , , ,

24 October 2012

코로나 SDK로 간단한 iOS, 안드로이드 게임 만들기

Learn how to make a simple iPhone and Android game with the Corona SDK!

Learn how to make a simple iPhone and Android game with the Corona SDK!

이 포스팅을 iOS 튜토리얼 팀 맴버인 Greg Pugh가 작성하였다. Colin Turtle children’s eBook app series의 저자이다.

이 포스트는 번역팀 맴버이면서 놀고 먹기를 좋아하는 행복한 개발자인 염성욱(krazyeom)이 번역하였다. Twitter, 블로그

어린 나이의 어린이들이 모바일 앱을 만들다는 것을 뉴스나 웹에서 보았을 것이다. 그들은 앱을 코로나 SDK를 사용해서 만들기도 한다.

비록 프로그래밍 처음이라고 해도 코로나 SDK는 정말 시작하기 쉽기 때문이다.

그러나 초보자를 위한 것만이 아니다. 고급 개발자를 위한 것이기도 하다! 여기 두 가지 큰 이유가 있다.

  • 코로나는 크로스 플랫폼을 지원한다. 코로나 게임은 크로스 플랫롬을 지원한다. 그래서 한번 작업 하면 iOS, 안드로이드 등에서 작동된다.
  • 코로나는 빠른 개발을 돕는다. 코로나는 빠른 개발을 위해서 고급 레벨의 언어를 가지고 있다. 그래서 저레벨의 프레임 워크인 OpenGL이나 Cocos2d 보다 게임을 빨리 만들 수 있다.

과거에 이 웹싸이트에서 코로나 튜토리얼을 작성한 것이 있다. 그러나 그것은 고급 레벨이고 서드 파티 툴을 필요로 한다.

그래서 완전 초보자를 위해서 코로나를 사용해서 정말 간단한 게임을 만드는 것을 보여주기 위해 튜토리얼을 만들기를 원했다. 그래서 이 튜토리얼이 탄생하게 되었다. :]

이 튜토리얼에서 코로나를 사용하는 방법과 간단하지만 재미있는 풍선터트리기 게임을 만들것이다. 가장 중요한 점은 같은 코드를 사용하여 다양한 모바일 장치에서 작동된다는 것이다. 계속해서 읽기!

27 September 2012

iOS 6에서 오토 레이아웃 시작하기. 파트 2

iOS 6 SDK에서 오토레이아웃을 배우자!

Ray로 부터 알림: 축하한다. 여러분들이 해냈다. iOS 6 Feast 단어를 널리 알리는 것을 도와줘서, 첫번째 iOS 6 튜토리얼을 미리 공개하게 되었다!

이 튜토리얼은 새로운 책인 iOS 6 튜토리얼의 하나의 챕터의 축약된 버젼이다. Matthijs Hollemans가 작성하였다. 그는 iOS Apprentice Series를 작성한 사람이다. 재미있게 즐겨라!

이 포스트는 iOS 튜토리얼 팀 맴버이면서 iOS 개발자와 디자이너의 경험이 있는 Matthijs Hollemans가 작성하였다.

이 튜토리얼의 파트 1에서 이전 방식의 “스트러츠-스프링” 모델으로 유저 인터페이스로 만들면 모든 레이아웃 문제를 쉽게 해결 할 수 없는 것을 보았다. iOS 6의 강력한 기술인 오토 레이아웃은 해결책을 제시한다.

이 튜토리얼 시리즈의 마지막은 두번째 파트에서 계속해서 제약조건의 모든 것과 어떻게 그것을 적용 할지에 대해 배울 것이다. 계속해서 읽기!

태그: , , , , , ,

iOS 6에서 오토 레이아웃 시작하기. 파트 1-2

메모 iOS Human Interface Guidelines의 축약인 “HIG”는 좋은 유저 인터페이스 디자인을 위해 애플이 추천하고 있는 것을 포함한다. iOS 개발자들이 필수 적으로 읽어야 한다. HIG 어떤 UI 요소가 어떤 상황에서 사용하기 적합하고 사용하기 가장 좋은 방법을 설명한다. 여기에서. 이 문서를 찾을 수 있다.

두 개의 콘트롤 사이의 표준 공간은 제한되지 않는다. 제약조건은 뷰 처럼 수정할 수 있는 객체이다. 따라서 변경할 수 있는 속성이 있다.

두 개의 버튼 사이의 Vertical Space 제약조건 선택한다. 비록 약간 신경이 쓰이게 까다롭지만 캔버스에서 T자 바를 클릭하면 이 작업을 할 수 있다. 가장 쉬운 방법은 Documents Outline에서 제약조건을 클릭하는 것이다. 일단 그것을 선택하면 Attribute 인스펙터로 전환된다.

V-space attributes

기본적으로 표준속성은 체크되어있다. 두 의 오브젝트 사이의 공간 제약사항은 8 포인트이다. 슈퍼뷰의 가장자리 주변 마진은 20 포인트이다. 얼마나 큰 제약조건인지 확인을 위해 Constant 필드에 40을 입력을 한다. 두개의 버튼은 좀 더 멀어졌다. 그러나 둘은 여전히 연결되어 있다.

V-space larger

앱을 실행하고 가로방향으로 회전해서 다음 효과를 확인한다.

V-space larger landscape

두 개의 버튼의 수직 정렬은 확실하게 유지되고 있다. 그러나 수평 정렬은 그렇지 않다.

nib을 보면 위쪽 버튼과 캔버스의 왼쪽 가장자리 사이의 Horizontal Space 가 보인다. (적어도 필자가 한 것과 같이 대략적으로 버튼을 배치한 경우)

H-space anchoring top button

아래 레이블은 화면에서 수평적으로 중앙에 있다. 그러나 위쪽 버튼은 그렇지 않다. 항상 왼쪽 가장자리로부터 똑같은 거리를 유지한다.

멋지게 보이지 않는다. 그래서 대신에 다음 의도를 표현 할 것이다.

“아래쪽 버튼은 항상 수평적으로 가운데 있을 것이다. 그리고 위쪽 버튼은 아래쪽 버튼의 왼쪽 가장자리에 그것의 왼쪽 가장자리가 정렬 될 것이다.”

첫 번째 조건으로 제약조건을 이미 가졌다. 그러나 두 번째는 아니다. 인터페이스 빌더는 정렬을 위한 가이드를 보여준다. 그래서 그것의 왼쪽 가장자리가 아래쪽 버튼의 왼쪽 가장자리에 자석효과로 붙을 때까지 드래그 할 수 있다.

Snap left edges

불행하게도 이 또한 두 버튼의 사이의 Vertical Space를 (적어도 가끔씩 드래그와 배치된 방법에 따라서) 삭제한다. 인터페이스 빌더는 그것이 거기에 있었고 뷰의 아래에 Vertical Space 포함해서 대체 하는 것을 간단하게 잊는다.

Two buttons left aligned, wrong V-space

이것은 원하는 것과 다르다. 모든 방법으로 윈도우의 가장자리가 확장 된 것이 아니고 대신 두 버튼 사에 Vertical Space가 있어야 한다. 이러한 일이 일어났을 때 느껴지는 느낌은 다음 만화와 같다.

이전에 언급 한 바와 같이 제약조건을 그대로 유지하길 원하면 뷰 주위에 드래그 하는 것은 좋은 생각이 아니다. 두 버튼의 정렬하기 위한 좋은 방법이 있다.

우선 위쪽 버튼을 원래의 정렬되지 않은 이전 상태로 돌려 놓는다. Cmd 키를 누르고 두 버튼을 선택하기 위해 클릭한다. Editor 메뉴에서 AlignLeft Edges을 선택한다. 이것은 인터페이스 빌더에게 기존의 제약조건은 그대로 두고, 두 개의 버튼을 왼쪽 정렬을 원하는 것을 알려준다.

Left aligned buttons.png

보는것 처럼 새로운 “Leading Alignment” 제약조건이 아래 버튼에 위쪽 버튼의 왼쪽 정렬을 유지하기 위해 추가될 동안에 이전 제약조건(아래 버튼의 Center X Alignment와 두 개 버튼 사이의 Vertical Space)은 여전히 존재한다.

팁: 정렬 옵션을 선택하기 위해 항상 Editor 메뉴로 갈 필요가 없다. 인터페이스 빌더는 오른쪽 아래 코너에 단축 메뉴를 가지고 있다.

단축 메뉴

가장 왼쪽 버튼은 정렬 메뉴를 연다.

정렬 메뉴

이 옵션을 많이 사용하기 때문에 단축 메뉴를 사용하면 시간이 많이 절약 될 것이다.

앱을 실행하고 가로방향으로 회전해서 잘 작동하는지 확인한다.

Left aligned buttons landscape

어디로 가야 하나?

이제 오토 레이아웃의 첫 맛을 보았다. 어떻게 마음에 드는가? 익숙하기까지 시간이 살짝 걸릴 수 있지만 삶을 편안하게 만들어 주고 앱도 더 유연하게 된다.

더 배우길 원하면 계속해서 이 튜토리얼의 파트 2를 읽어라. 오토 레이아웃이 제공하는 가능성과 발생할 수 있는 문제의 더 나은 이해를 얻기 위해 인터페이스 빌더에서 버튼으로 계속해서 작업 할 것이다.

그리고 무엇보다도 실제 앱에서 찾을 수 있는 현실적인 레이아웃을 만들기 위해 오토 레이아웃을 사용 할 것이다.

어떠한 질문이나 의견이 있으면 포럼의 토론에 참여하라.


이 포스트는 iOS 튜토리얼 팀 맴버이면서 iOS 개발자와 디자이너의 경험이 있는 Matthijs Hollemans가 작성하였다.


이 포스트는 번역팀 맴버이면서 개발자인 염성욱이 번역하였다. Twitter, 블로그

iOS 6에서 오토 레이아웃 시작하기. 파트 1-1

iOS 6에서 오토 레이아웃을 배우자!

Ray로 부터 알림: 축하한다. 여러분들이 이루어냈다. iOS 6 Feast 단어를 널리 알리는 것을 도와줘서, 첫번째 iOS 6 튜토리얼을 미리 공개하게 되었다!

이 튜토리얼은 새로운 책인 iOS 6 튜토리얼의 하나의 챕터의 축약된 버젼이다. Matthijs Hollemans가 작성하였다. 그는 iOS Apprentice Series를 작성한 사람이다. 재미있게 즐겨라!

이 포스트는 iOS 튜토리얼 팀 맴버이면서 iOS 개발자와 디자이너의 경험이 있는 Matthijs Hollemans가 작성하였다.

가로/새로 방향 모두에서 보기좋게 앱을 만들려고 하다가 좌절한 적이 있는가? iPhone과 iPad 둘 다 지원하는 화면 레이아웃을 만드는 것은 미치기 직전으로 만든다. 절망은 더 이상 없다. 여러분에게 좋은 소식을 가져왔다.

항상 같은 크기를 보증하는 화면을 위한 유저 인터페이스를 디자인 하는 것은 어렵지 않지만, 화면 프레임이 바뀌면 UI 구성요소의 위치, 크기 또한 이러한 새로운 장비의 크기에 맞게 변경되어야 한다.

지금까지 화면 디자인이 합리적으로 복잡했다면, 레이아웃 적용을 지원하기 위해 많은 코드를 작성해야 만 했다. 더 이상 이런 경우가 없다는 것이 다행 일 것이다. iOS 6는 iPhone과 iPad에 오토 레이아웃이라는 놀라운 새로운 기능을 제공한다.

오토 레이아웃은 앱에서 다른 화면 크기를 쉽게 지원하는 것을 만들어 줄 뿐만 아니라, 보너스로 간단하게 지역화를 만들게 지원한다. 지원하고 싶어하는 모든 언어를 위해서 새로운 nib이나 스토리보드를 만들지 않아도 된다. 그리고 히브리어와 아랍어와 같은 오른쪽에서 왼쪽으로 쓰는 언어도 포함해서 지원한다.

이 튜토리얼은 인터페이스 빌더를 사용하여 오토 레이아웃을 시작하는 방법을 보여준다. iOS 6 튜토리얼에서는 이 튜토리얼 보다 더욱더 추가되었고 지식으로 만드는 방법과 코드를 통해서 오토 레이아웃의 전체 능력을 발휘하는 방법을 보여주는 완전히 새로운 장을 갖추고 있다.

간식과 좋아하는 카페인 음료를 들고 오토 레이아웃 마스터가 될 준비를 해라!

스프링과 스트러츠의 문제점

“스프링과 스트러츠” 모델로 알려진 오토싸이즈 마스크를 잘 알고 있을 것이다. 오토싸이즈 마스크는 슈퍼뷰의 크기가 변경될 때 뷰에 어떤 일을 결정한다. 유연한 또는 고정 여백(스트러츠)를 가지고 있는가? 그리고 너비와 높이(스프링)에 어떤 일이 있는가?

예를들어 슈퍼뷰가 넓어지면, 유연한 너비를 가진 뷰는 비례적으로 넓어질 것이다. 그리고 고정된 오른쪽 여백을 가진 뷰의 오른쪽 가장자리는 항상 슈퍼뷰의 오른쪽 가장자리에 고정될 것이다.

오토싸이즈 시스템은 간단한 경우에 잘 동작 된다. 그러나 레아아웃이 더 복잡해질 때 제대로 동작하지 않는다. 스프링과 스트러츠가 단순하게 자르지 않는 예를 살펴보자.

Xcode를 실행하고 Single View Application 템플릿을 기반으로 새로운 프로젝트를 생성한다. 앱 이름을 “StrutsProblem” 으로 작성한다. iPhone을 선택하고 스프링보드를 비활성화 한다.

프로젝트 옵션

인터페이스 빌더에서 ViewController.xib를 클릭하여 연다. 어떤 작업을 하기 전에, 우선적으로 nib의 Auto Layout을 비활성화 한다. 이 작업은 File 인스펙터에서 한다.

오토레이아웃 비활성화

“Use Autolayout” 체크박스에 체크를 해제한다. 지금 nib은 예전 스트러츠-스프링 모델을 사용한다.

메모:Xcode 4.5 이상에서 생성된 nib이나 스토리보드 파일에서는 오토 레이아웃이 기본적으로 활성화 된다. 오토 레이아웃은 iOS 6 기능이기 때문이다. 만약 Xcode 4.5를 사용해서 iOS 5 앱을 만들기를 원한다면, nib이나 스토리보드 파일을 “Use Autolayout” 체크박스에 체크를 해제해서 비활성화 해야 한다.

3개의 뷰를 메인 뷰에 끌어다 놓고 다음과 같이 정렬하라.

세로 디자인

구별하기 위해서 각각의 뷰에 색상을 부여하여 어떤 뷰가 어떤 뷰인지 확인 할 수 있다.

각 뷰는 윈도우의 경계에 20 포인트를 준다. 뷰 사이의 패딩에도 20포인트를 준다. 아래의 뷰는 280 포인트 넓이를 주고, 위의 2개의 뷰는 각각 130 포인트 넓이를 준다. 모든 뷰는 200 포인트 높이를 준다.

앱을 실행하고 시뮬레이터를 회전 시킨다. 또는 디바이스를 가로로 회전 시킨다. 앱의 화면이 다음과 같이 나타날 것이다. 생각과는 많이 다르다.

잘못된 가로화면

메모: HardwareRotate Left 그리고 Rotate Right 메뉴 옵션을 사용하여 시뮬레이터를 회전 시킬 수 있다. 또는 Cmd 키를 누른상태에서 좌 또는 우 화살표 키를 누르면 된다.

대신에 가로화면은 다음과 같이 보이길 원했다.

올바른 가로화면

3개의 뷰의 오토싸이징 마스크에 명백하게 원하는 무언가를 조금 남겨야 한다. 왼쪽-위 뷰의 오토싸이징 설정을 다음과 같이 변경한다.

왼쪽-위 뷰의 오토싸이징

이것은 위와 왼쪽의 가장자리를 고정시킨다. 그러나 아래와 오른쪽 가장자리는 고정시키지 않는다. 그리고 슈퍼뷰의 크기가 변경이 될 때 가로/세로 크기 모두를 변경한다.

비슷하게 오른쪽-위 뷰의 오토싸이징 설정을 변경한다.

오른쪽-위 뷰의 오토싸이징

그리고 아래 뷰는 다음과 같이 변경한다.

아래 뷰의 오토싸이징

앱을 다시 실행하고 가로로 화면을 회전한다. 이제는 다음과 같이 보일 것이다.

잘못된 가로화면 (2)

뷰 사이의 패딩이 잘못되었다. 다른 방법으로 봐도 뷰의 크기가 100% 옳지 않다. 문제는 오토싸이징 마스크가 슈퍼뷰 크기가 변경이 되었을때 뷰에게 변경된 크기를 알려준다는 것이다. 그러나 뷰에게 얼만큼 뷰의 크기가 변경되어야 하는지 알려줄 방법이 없다.

오토싸이즈 마스크로 해결 할 수 있다. 예를 들면 유연하게 넓이와 높이 설정(스프링)을 변경한다. 그러나 3개의 뷰 사이에 20 포인트를 가지도록 완벽하도록 정확하게 보이게 할 수 없다.

 왜?!?!?

스프링과 스트러츠 방법으로 레이아웃 문제를 해결하기 위해서는 불행하게도 몇 줄의 코드를 작성해야 한다.

UIKit가 뷰 콘트롤러에게 유저 인터페이스가 회전하기 전, 회전하는 동안, 회전한 후에 몇 가지 메세지를 보낸다. 이런 메세지를 가로채서 UI 레이아웃을 변경 할 수 있다. 일반적으로 재배치를 원하는 뷰의 프레임을 변경을 하기 위해서는 willAnimateRotationToInterfaceOrientation:duration:을 오버라이드 한다.

그러나 이 작업을 하기 전에 먼저 배치하기 위한 뷰에게 전달할 아웃렛 프로퍼티를 만들어야 한다.

(Xcode 툴바의 Editor 툴셋의 가운데 버튼) Assistant Editor 모드로 전환한다. 3개의 뷰를 각각 ViewController.h:로 콘크롤-드래그 한다.

콘트롤-드래그 아웃렛 프로퍼티

각각 뷰와 3개의 프로퍼티를 연결한다.

@property (weak, nonatomic) IBOutlet UIView *topLeftView;
@property (weak, nonatomic) IBOutlet UIView *topRightView;
@property (weak, nonatomic) IBOutlet UIView *bottomView;

다음 코드를 ViewController.m에 추가한다.

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                        duration:(NSTimeInterval)duration
{
   [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
 
   if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft
   ||  toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
   {
       CGRect rect = self.topLeftView.frame;
       rect.size.width = 210;
       rect.size.height = 120;
       self.topLeftView.frame = rect;
 
       rect = self.topRightView.frame;
       rect.origin.x = 250;
       rect.size.width = 210;
       rect.size.height = 120;
       self.topRightView.frame = rect;
 
       rect = self.bottomView.frame;
       rect.origin.y = 160;
       rect.size.width = 440;
       rect.size.height = 120;
       self.bottomView.frame = rect;
   }
   else
   {
       CGRect rect = self.topLeftView.frame;
       rect.size.width = 130;
       rect.size.height = 200;
       self.topLeftView.frame = rect;
 
       rect = self.topRightView.frame;
       rect.origin.x = 170;
       rect.size.width = 130;
       rect.size.height = 200;
       self.topRightView.frame = rect;
 
       rect = self.bottomView.frame;
       rect.origin.y = 240;
       rect.size.width = 280;
       rect.size.height = 200;
       self.bottomView.frame = rect;
   }
}

뷰 콘트롤러가 새로운 방향으로 회전하고 있을 때 이 콜백이 발생한다. 뷰 컨트롤러 방향이 회전할 때 뷰의 크기를 적절하게 변경한다. 이 상황에서는 아이폰의 알려진 화면 크기에 기초로 제공된 하드코딩으로 변경한다. 에니메이션 블록에서 이 콜백이 발생한다. 그래서 크기 변경 에니메이션이 실행된다.

앱을 아직 실행하지 마라. 먼저 다음과 같이 3개 뷰의 오토리싸이징 마스크를 복원해야 한다. 아니면 오토리싸이징 메카니즘은 뷰의 willAnimateRotation에 설정해 놓은 위치와 크기 때문에 크래쉬된다.

오토싸이징 끄기

그것을 해야한다. 앱을 실행하고 가로 방향으로 회전한다. 이제는 뷰가 올바르게 정렬 될 것이다. 다시 세로 방향으로 회전 시키고 모든 것이 잘 어울리는지 확인한다.

잘 동작한다. 그러나 사실 꽤나 간단한 레이아웃을 위해서 많은 양의 코드를 작성했다. 각각의 뷰가 크기 변경을 동적으로 하거나 서브뷰의 갯수가 정해지지 않는 것과 같은 정말 복잡한 레이아웃을 위해 걸리는 노력을 상상해 보아라.

분명히 다른 방법이 있을꺼야

메모: 다른 방법으로 접근하는 방법은 가로와 세로 방향의 nib을 구분해서 만드는 것이다. 디바이스가 회전 될 때 다른 nib의 뷰를 로드하고 기존 것과 교체한다. 그러나 이 방법도 여전히 많은 노력을 필요로 한다. 그리고 1개 대신에 2개의 nib을 관리하므로써 더 많은 문제점을 발생 시킬 수 있다.

오토 레이아웃을 구조하라!

이제 오토 레이아웃과 동일한 효과를 달성하는 방법을 볼 수 있다. 먼저 ViewController.m에서 willAnimateRotationToInterfaceOrientation:duration:을 지운다. 왜냐하면 코드를 작성하지 않고 이러한 작업을 할 것이다.

ViewController.xib을 선택하고 nib 파일의 오토 레이아웃을 활성화 하기 위해 File 인스펙터 패널에서 “Use Autolayout”의 체크박스를 체크한다.

오토 레이아웃 활성화

메모: 오토 레이아웃은 전체 nib 또는 스토리보드 파일을 위해서 항상 활성화 되어 있다. 체크박스가 체크되어 있으면 nib 또는 스토리보드안의 모든 뷰는 오토 레이아웃을 사용한다.

앱을 실행하고 가로 방향으로 회전 시켜라. 이전에 했던 작업과 같이 엉망으로 된 레이아웃이 보여진다.

잘못된 가로화면

오토 레이아웃을 시작하자. Cmd키를 누르고 위의 2개의 뷰(녹색과 노란색)를 클릭한다. 그러면 두 개는 선택된다. Xcode의 Editor 메뉴에서 PinWidths Equally를 선택한다.

Pin widths equally

똑같이 두 개의 뷰를 다시 선택하고 EditorPinHorizontal Spacing을 선택한다. (첫번째 Pin 작업을 수행한 후에 두 개의 뷰가 선택된 상태로 표시됨에도 불구하고, 특별한 레이아웃 관계 디스플레이 모드에 있는 것을 주의해라. 그래서 두 개의 뷰를 다시 선택 해야만 한다.)

왼쪽의Document Outline에서 “Constraints” 이름의 새로운 섹션을 발견했을 것이다. 이 섹션은 nib에 오토 레이아웃이 활성화되면 추가된다. 이 제약조건과 다음 섹션에서 그것들이 어떻게 동작하는지 배울 것이다.

지금은 “Horizontal Space (170)” 위치로 이동하고 리스트로부터 그것을 삭제 한다.

Horizontal Space Constraint

앱을 실행하고 가로 방향으로 회전 시킨다. 이전보다 보기 좋아 보인다. 위쪽 뷰는 적절한 너비와 패딩을 가진다. 그러나 아직 꽤 부족하다.

가로 방향은 거의 마쳤다

Cmd 키를 누르고 3개의 뷰 모두를 선택한다. Editor 메뉴에서 PinHeights Equally를 선택한다.

이제 왼쪽-위 코너의 뷰를 선택하고 아래쪽 뷰를 선택(방금 전처럼 Cmd를 사용하여)하고 EditorPinVertical Spacing를 선택한다.

마지막으로 “Vertical Space (240)” 제약조건을 리스트로부터 삭제한다.

동시에 3개의 뷰를 선택하면 인터페이스 빌더는 다음과 같이 무언가를 보여 줄 것이다.

제약조건

파란색 “T-bar” 모양은 뷰 사이의 제약조건을 나타낸다. 약간 무섭게 보일 수도 있으나 모든 의미를 터득하면 실제로는 매우 간단하다.

앱을 실행하고.. 짜잔~! 한 줄의 코드를 작성하지 않고도 모든 것이 제대로 보인다.

올바른 가로방향

정확하게 무슨 짓을 한 것일까? 얼마나 큰 뷰인지, 그것들이 어디에 위치해 있는지를 하드코딩을 요구하기 보다, 오토 레이아웃은 레이아웃의 뷰가 각각 어떻게 관련되어 있는지 표현 할 수 있다.

제약조건으로 알려진 다음 관계를 레이아웃에 삽입한다.

  • 왼쪽-위과 오른쪽-위 뷰는 항상 같은 넓이(Pin의 “Widths Equally” 명령어)를 가진다. .
  • 왼쪽-위과 오른쪽-위 뷰의 사이에 수평(Pin의 “Horizontal Spacing” 명령어)으로 20 포인트 패딩이 있다.
  • 모든 뷰는 항상 같은 높이(Pin의 “Heights Equally” 명령어)를 가진다.
  • 위쪽 뷰와 아래쪽 하나의 뷰 사이에는 수직(Pin의 “Vertical Spacing” 명령어)으로 20 포인트 패딩이 있다.

그리고 화면 크기가 변경되었을 때 그 방법은 뷰를 배치 해야하는 곳과 행동하는 방법인 오토 레이아웃으로 표현하기에 충분하다.

잘했어요

메모: 또한 “Use Autolayout” 체크박스를 토글 할 때 스프링-스트러츠 레이아웃으로부터 가져온 몇 가지 제약조건이 있다. 뷰와 화면의 가장자리 사이의 각각의 여백에 대해 “이 뷰는 항상 위/아래/왼쪽/오른쪽 가장자리로 부터 20포인트 거리에 위치한다.”와 같은 기본적으로 말하는 제약조건이 있다.

Document Outline에서 모든 제약조건을 볼 수 있다. Document Outline에 제약조건을 클릭을 하면, 인터페이스 빌더는 제약조건 주변에 흰색 아웃라인을 그리고 눈에 뛰기 위해 그것에 그림자를 추가해서 뷰를 강조 한다.

선택된 제약조건

제약조건은 실제 객체(NSLayoutConstraint 클래스)이다. 그리고 또한 속성을 가진다. 예를들면 위쪽 두개의 뷰 사이의 패딩을 추가하는 제약조건(“Horizontal Space (20)”라고 이름을 가진)을 선택하고 Attributes 인스팩터로 전환한다. Constant 필드를 편집하여 여백의 크기를 변경 할 수 있다.

Constraint 속성

100으로 설정하고 앱을 다시 실행한다. 이제 여백이 더 넓어졌다.

”가로화면에서

앱의 뷰를 설명 할 때 오토 레이아웃은 스프링과 스트러츠 보다 더 많은 표현이다. 이 튜토리얼의 끝에서 제약조건과 인터페이스 빌더에서 다른 종류의 레이아웃을 만들기 위해 그것들을 적용하는 방법에 대해 배울 것이다.

오토 레이아웃의 작동 방법

위의 테스트 드라이브에서 본 바와 같이, 오토 레이아웃의 기본 도구는 제약조건이다. 제약조건은 두개의 뷰 사이의 기하학적 관계를 설명한다. 예를 들어 다음과 같은 제약조건이 있을 수 있다.

”레이블의 오른쪽 가장자리는 버튼 B의 왼쪽 가장자리와 둘 사이의 빈 공간 20포인트로 연결되어 있다. ”

오토 레이아웃은 모든 제약조건을 가지고 모든 뷰의 이상적인 위치와 크기를 계산하기 위해 몇 가지 수학적 계산한다. 더 이상 뷰의 프레임을 설정 할 필요가 없다. 뷰에 설정한 제약조건을 전부 기초로 하여 오토 레이아웃은 그것을 대신 수행한다.

오토 레이아웃 이전에는 인터페이스 빌더로 특정 좌표에 배치를 하거나, 사각형을 initWithFrame:에 전달하거나, 뷰의 프레임, 범위(bound) 또는 중앙 속성을 설정하여 뷰의 프레임을 하드코딩 했었다.

간단하게 만들 앱을 위해서 구체적으로 다음 그림과 같이 프레임을 설정 한다.

Struts 좌표

각각의 뷰에 오토싸이징 마스크를 설정한다

Struts 오토싸이징 마스크

저 방법으로는 더 이상 화면 디자인을 생각하는 방법을 사용 할 수 없다. 오토 레이아웃으로 해야 할 모든 것은 다음과 같다.

스트러츠 대신에 오토 레이아웃

뷰의 크기와 위치는 더 이상 중요하지 않다. 오직 제약조건의 문제이다. 물론 새로운 버튼 또는 레이블을 캔버스에 드래그 할 때 특정 크기를 가진다. 그리고 특정 위치에 드롭을 할 것이다. 그러나 그것은 오직 제약조건을 넣기위해 인터페이스 빌더에 사용을 전달하는 디자인 도구이다.

의미하는 것 처럼 디자인 하기

제약조건을 사용하는 가장 큰 이점은 더 이상 적절한 위치에 뷰를 나타나게 하기 위해 좌표를 설정하지 않아도 된다. 대신에 오토 레이아웃에 어떻게 뷰가 다른 뷰와 연관되는지를 설명하면 된다. 그리고 오토 레이아웃은 모든 어려운 일을 대신 해 줄 것이다. 의도에 의한 디자인이라고 불린다.

의도에 의한 디자인을 할 때, 수행하고 싶은 것이 무엇인지 그러나 필요하지는 않지만 그것을 수행하는 방법을 표현한다. “버튼의 왼쪽-위 코너의 좌표는 (20, 230)” 이라고 하는 대신에, 이제는 다음과 같이 할 수 있다.

“버튼은 그것의 슈퍼뷰에 수직의 가운데에 있다. 그리고 그것은 슈퍼뷰의 왼쪽 가장자리로부터 고정된 거리에 위치한다.”

이 설명을 사용하여 오토 레이아웃은 자동적으로 버튼이 나타나는 위치를 계산한다. 슈퍼뷰가 크거나 작은 것은 문제가 아니다.

의도된 디자인 다른 예와 오토 레이아웃은 다음 지침을 모두 처리 할 수 있다.

“이 두 개의 텍스트 필드는 항상 같이 크기여야 한다.”
“이 두 개의 버튼은 항상 같이 움직여야 한다.”
“이 네 개의 레이블은 항상 오른쪽 정렬이여야 한다.”

이것은 유저 인터페이스 디자인을 더 설명적으로 만든다. 제약조건과 시스템이 자동적으로 프레임 계산하는 것을 단순하게 정의한다.

첫 번째 셋션에서 단지 몇 개의 뷰를 가지는 레이아웃이 가로/세로 두 방향을 제대로 레이아웃을 보여주기 위해서 꽤 많은 작업이 필요하다는 것을 보았다. 오토 레이아웃을 사용하면 저러한 모든 노력을 건너 뛸 수 있다. 제약조건을 제대로 설정한다면 레이아웃은 가로/세로 두 방향에서 어떠한 변경 없이 작동해야 한다.

오토 레이아웃을 사용하는 다른 중요한 이점은 지역화이다. 예를 들면 독일어로 된 텍스트는 매우 길기로 악명 높다. 레이블에 딱 맞게 하려면 머리가 아프다. 화면에 나타나는 것을 필요로 하는 콘텐츠를 기초로 해서 레이블의 크기를 자동으로 조절 가능하기 때문에 오토 레이아웃은 모든 이러한 작업을 대신한다. 그리고 나머지는 제약조건과 관련된다.

독일어, 프랑스어, 또는 다른 언어 지원을 추가하는 것은 제약조건, 텍스트 번역의 설정의 문제이다. 그게 전부이다.

프랑스어

오토 레이아웃의 익히는 가장 좋은 방법은 그것을 다루는 것이다. 그래서 이 튜토리얼의 남은 부분에서 할 일이다.

메모: 오토 레이아웃은 화면회전을 위해서만 유용한게 아니다. 이것은 크기가 다른 화면을 적용하기 위해서 확대 및 축소를 쉽게 할 수 있다. 큰 화면의 아이폰과 작아진 아이패드의 계속되는 루머가 사실로 되었을 때 이 방법은 유용하다. ☺

Courting 제약조건

현재 프로젝트를 닫고 Single View Application 템플릿을 사용하여 새로운 프로젝트를 생성한다. 이름은 “Constraints” 라고 한다. 스토리보드를 사용하지 않는 아이폰 프로젝트가 될 것이다. 그러나 ARC는 사용한다.

Xcode 4.5로 새로운 프로젝트를 생성하면 오토 레이아웃을 사용한다고 가정한다. 그래서 그것을 활성화 하기 위해 어떠한 작업도 할 필요가 없다.

인터페이스 빌더를 열고 ViewController.xib를 클릭한다. 새로운 Round Rect Button을 캔버스위에 드래그 한다. 드래그하는 동안 파란색 점선의 선이 나타난다. 이런 선은 가이드라고 알려져 있다.

가이드

화면의 여백의 주위에 가이드가 있을 뿐만 아니라 가운데도 있다.

다른 가이드

이전에 인터페이스 빌더를 사용했다면, 이런 가이드를 봤을 것이다. 그것은 오브젝트를 쉽게 정렬할 수 있도록 도움이 되는 힌트이다. 그러나 오토 레이아웃이 활성화되면 가이드는 다른 목적을 가진다. 아직 그것들을 정렬을 위해 사용 하지만 새로운 제약 조건이 어디에 갈 것인지 알려준다.

파란색 가이드에 대해 왼쪽-위 코너에 버튼을 드롭한다. 이제 nib은 다음과 같을 것이다.

가이드와 버튼

두 개의 파란색 선이 버튼에 붙어 있다. 이런 T자 모양의 객체는 이 버튼에 설정된 제약 조건이다.

모든 제약조건은 인터페이스 빌더 창의 왼쪽의 Document Outline 창에 리스트 되어 있다.

Document Outline의 버튼 제약조건

현재는 두 개의 제약조건이 있다. 버튼과 메인 뷰의 왼쪽 가장자리의 사이에 Horizontal Space과 버튼과 메인 뷰의 윗쪽 가장자리 사이의 Vertical Space이다. 이러한 제약조건에 의한 표현되는 관계는 다음과 같다.

“버튼은 항상 그것의 슈퍼뷰의 왼쪽-위 모서리에 위치 한다.”

이제 버튼을 선택하고 다시 파란색 가이드를 고려하여 오른쪽-위 코너에 그것을 위치 시킨다.

위-오른쪽 코너 버튼

Horizontal Space 제약조건은 변경되었다. 더 이상 버튼의 왼쪽에 붙어 있지 않고 오른쪽에 있다.

가이드에 대한 버튼(또는 어떠한 다른 뷰)을 배치 할 때, 애플의 iOS 휴먼 인터페이스 가이드 라인 문서인 “HIG”에 정의된 표준크기의 제약조건을 얻을 수 있다. 가장자리의 주변 여백의 표준크기는 20 포인트 여백이다.

비록 가이드가 없는 곳에 버튼을 배치 할 때, 그 자리에 제약 조건을 유지 하기 위해 Horizontal 또는 Vertical Space 을 여전히 얻을 수 있다. 사용해 봐라. 다음과 같이 무언가를 얻을 때까지 왼쪽으로 조금씩 버튼을 드래그 해라.

Button larger H space

Horizontal Space 제약조건이 여전이 있지만 지금은 그것이 커졌다. Document Outline에서 더 이상 표준 공간을 가지지 않은 것을 볼 수 있다.

Larger H space document outline

버튼의 위치에 따라 얻을 수 있는 제약 조건이 달라진다.

또한 “center” 제약 조건이 있다. 버튼을 캔버스의 가운데 밑에 드래그 한다. 그러면 가이드와 함께 자석 효과로 찰싹 붙는다.

가운데 밑에 위치한 버튼

Horizontal Space 제약조건은 버튼이 항상 그것의 슈퍼뷰의 중앙 정렬을 유지하는 가로축에서 Center X 정렬 제약조건으로 대체 됨을 의미한다. 아직 뷰의 하단으로부터 버튼을 유지 하기 위해 Vertical Space 제약조건이 있다. 다시말하면 표준 여백을 사용한다.

앱을 실행하고 가로방향으로 회전시킨다. 가로방향 모드에서도 버튼은 화면의 가운데 밑에 위치한다.

가로방향에서 가운데 밑에 위치한 버튼

의도를 표현하는 방법은 다음과 같다. “이 버튼은 항상 아래쪽 중앙에 위치해야 한다”. 인터페이스 빌더에 버튼의 정확한 위치를 전달 했던 곳이 없다. 오직 뷰에 위치할 곳만 전달 했었다.

오토 레이아웃으로는 캔버스 위에 뷰를 위치 시킬 정확한 좌표 또는 크기에 대해 더 이상 신경 쓸 필요가 없다. 대신에 오토 레이아웃은 설정한 또는 인터페이스 빌더가 대신 설정한 제약조건에서 이 두 가지를 이끌어 낸다.

버튼의 Size 인스팩터에서 지금은 꽤 다른 이러한 파라다임 변화를 볼 수 있다.

Different size inspectors

오토 레이아웃을 비활성화하면 X값, Y값, 넓이 또는 높이 필드를 입력해서 선택된 뷰의 위치나 크기를 변경한다. 오토 레이아웃을 활성화하면 새로운 값을 필드에 입력 할 수 있지만 항상 원하는 효과를 얻을 수 없다. 뷰가 이동한다면 인터페이스 빌더는 새로운 값으로 새로운 제약조건을 계산한다.

예를들어 넓이 값이 100으로 변경되면 캔버스는 다음과 같이 변화 한다.

고정된 넓이의 버튼

“Center X Alignment” 제약조건이 사라지고 그 위치에는 화면의 왼쪽 가장자리에 버튼으로 붙은 “Horizontal Space”가 있다. 뿐만 아니라 그 자신의 버튼에 100 포인트의 넓이(버튼 밑의 파랑새 바)를 강제적으로 가지게 하는 새로운 제약 조건이 있다.

또한 이 새로운 “Width” 제약조건을 왼쪽의 Document Outline에서 볼 수 있다.

Document outline에서 Width 제약조건

버튼과 그것의 슈퍼뷰 사이의 다른 제약조건과 다르게 Width 제약조건은 버튼 자신에 적용된다. 버튼과 버튼 사이의 제약조건으로 생각 할 수 있다.

다시 버튼을 드래그하면 Center X Alignment 제약조건과 함께 자석효과로 달라붙는다.

팁: 싸이즈 인스펙터의 위치와 크기가 변경이 제약조건을 망칠 수 있기 때문에, 이것을 하지 않도록 권한다. 대신, 레이아웃을 변경을 원하면 제약 조건을 변경한다.

왜 전에 버튼이 Width 제약조건을 가지지 않았는지 궁금할 수 있다. 오토 레이아웃은 제약조건이 없으면서 버튼의 넓이를 어떻게 알았을까?

버튼은 스스로 어느정도 넓이를 가져야 하는지 안다. 버튼 제목의 텍스트에 코너의 주변의 패딩을 더하는 것을 바탕으로 계산을 한다. 버튼에 배경 이미지를 설정하면, 또한 계정에 그것을 적용한다.

고유 콘텐츠 크기로 알려져 있다. 모든 콘트롤이 이것을 가지지 않지만 많은 것이 가지고 있다. (다른 예는 UILabel이다) 뷰가 자신의 원하는 크기를 계산 할 수 있다면, 그것의 특정 Width 또는 Height 제약조건 설정할 필요가 없다. 나중에 이와 같은 것을 더 볼 수 있다.

나는 뚱뚱하지 않아

최적의 크기로 버튼이 반환될려면 그것을 선택하고 Editor메뉴에서 Size to Fit Content을 선택한다. 이것은 명시적 Width 제약조건을 제거하고 버튼의 고유 콘텐츠 크기를 복원한다.

손뼉도 마추쳐야 소리가 난다

오직 뷰와 그것의 슈퍼뷰 사이에서는 가이드는 나타나지 않는다. 그러나 또한 같은 레벨의 뷰 계층의 뷰 사이에서도 나타나지 않는다. 이것을 설명하기 위해서 캔버스에 새로운 둥근 사각 버튼을 드래그 한다.

버튼을 서로 충분히 떨어지게 놓으면 새로운 버튼은 자신의 제약조건을 가진다. 그러나 각 버튼을 너무 가까이 놓으면 제약조건은 상호작용하기 시작한다.

새로운 버튼을 기존에 있던 버튼 옆에 놓는다. 그러면 자석효과로 옆에 붙는다.

Snap two buttons

꽤 많은 점선 가이드라인이 여기에 있다. 그러나 인터페이스 빌더는 모든 제약조건으로 바꿀 수 없다. 기본적으로 두 버튼은 다른 방법(위쪽, 가운데 그리고 베이스라인)으로 정렬 할 수 있게 인식한다.

버튼을 드롭하고 나서 제약조건은 다음과 같다.

Two buttons

새로운 버튼은 화면의 아래에 Vertical Space를 가진다. 또한 다른 버튼과 함께 연결하는 Horizontal Space 가진다. 이 공간은 고작 8포인트 밖에 안되게 작기 때문에 T자 바를 찾기 힘들다. 그러나 거기에 있다.

Document Outline에서 Horizontal Space 제약조건을 클릭한다

Highlighted H-space between buttons

제약조건을 선택할 때 속해 있는 것은 노란색 불빛이 나게 된다. 이 특별한 제약조건은 두 개의 버튼에서 일어난다. 여기에 한 것은 이렇게 말할 수 있다.

“두 번째 버튼은 항상 첫 번째의 오른쪽에 나타나며 첫 번째 버튼이 어디에 있는지 또는 얼만큼 큰지는 문제가 안된다.”

왼쪽 버튼을 선택하고 그것의 레이블은 “A longer label”과 같이 길게 작성한다. 그것을 마치면 버튼의 크기는 새로운 텍스트에 맞춰 재조절 된다. 그리고 다른 버튼은 비켜준다. 결국 첫 번째 버튼의 오른쪽 가장자리에 붙는다. 이것이 정확하게 일어나길 바란 일이다.

긴 레이블을 가진 버튼

인터페이스 빌더가 다시 Horizontal Space의 첫 번째 버튼의 Center X Alignment를 대체 한 것을 확인할 수 있다. 매번 콘트롤의 크기나 위치를 변경 할 때, 인터페이스 빌더는 최적의 제약조건의 설정을 다시 계산한다. 대부분 올바르게 동작하지만 때때로 잘못되게 동작한다. 명백하게 버튼의 텍스트를 단지 변경하고 싶지만 여기서는 중심을 유지한다.

버튼을 다시 중심으로 드래그 한다. 이제 제약조건은 다음과 같이 된다.

연결이 끊긴 두 버튼

저것은 아마도 원하는 일이 아니다. 두 개의 버튼은 더 이상 서로에 연결되어 있지 않는다. 대신 가장 오른쪽 버튼은 이제 화면의 오른쪽 가장자리에 Horizontal Space를 가진다. 두 개의 버튼 사이의 Horizontal Space 제약조건은 더 이상 없다.

물론, 다시 자석효과로 붙여서 두 개의 버튼을 재연결 할 수 있다. 그러나 이 문제는 뷰의 주변을 드래그 하지 않음으로 피할 수 있다.

첫 번째로 Cmd-Z를 눌러 undo를 한다. 그래서 첫 번째 버튼은 더 이상 중앙 정렬이 아니다. 버튼을 선택하고 Editor메뉴에서 Container의 AlignHorizontal Center을 선택한다. 이번에는 첫 번째 버튼을 중앙으로 옮길 뿐만 아니라 다른 버튼도 함께 이동한다. 그것이 더 좋다.

이 작업의 방법에 더 좋은 느낌을 얻기 위해 여기 더 다른 작업을 한다. 작업 버튼을 선택하고 다른 하나는 위로 이동 시킨다. 그러면 수직으로 자석효과로 달라 붙는다. (그러나 두 개 버튼의 왼쪽 가장자리로 정렬을 하지 마라.)

Button on top

두 버튼을 서로 자석효과로 붙여 놓았기 때문에, 이제 두 개의 버튼 사이에는 Vertical Space가 있다. 다시 HIG에서 추천하는 8 포인트의 표준 공간을 가진다.

한글번역파트는 글자수 초과문제로 각파트를 2개의 파트로 나눈다. 계속해서 이 튜토리얼의 파트 1-2를 읽어라.

태그: , , , , , ,

8 September 2012

iOS 6 튜토리얼 곧 출시!

iOS 6 튜토리얼 책 조만간 출시 예정!

예전에 힌트를 살짝 흘렸었다. 그러나 오늘 공식적으로 발표를 하겠다. (조만간 출시할) iOS 6 튜토리얼 책을 발표하게 되어 기쁘다.

iOS 6 튜토리얼은 iOS 6의 새로운 API들인 Auto Layout, Collection Views, Passbook, Social Framework 등등을 다루는 중급개발자부터 고급개발자를 위한 완전히 새로운 책이다.

두 가지 이유로 이 책에 대해 기쁘다.

  • 이 책은 우리가 작성했던 책 중에 가장 두꺼운 책이다. 예상하기로는 1,400페이지 이상이다. 2-3권의 분량의 책이 1권의 가격입니다!
  • 또한 우리가 작성했던 것 중에 가장 좋은 책입니다. 각 튜토리얼은 여러분이 알고 있듯이 높은 퀄리티로, 쉽게 이해하는 동안에 각 주제에 깊게 파고 들어갑니다.

결국 이 책은 빠르고 쉬운 방법(재미와 튜토리얼 체험을 통해)으로 iOS 6의 새로운 API들을 익힐수 있는 확실한 방법이다.

이 책이 무엇인지, 언제 출시 되는지, iOS 5 튜토리얼에게 어떤 것을 의미하는지, 그리고 특별한 iOS 6에 대한 깜짝 선물을 알기 위해 계속해서 읽어라 :] 계속해서 읽기!

태그:

4 September 2012

How To Make A Simple Drawing App with UIKit

How To Make A Simple Drawing App with UIKit<br />

How To Make A Simple Drawing App with UIKit

This is a blog post by iOS Tutorial Team member Abdul Azeem, software architect and co-founder at Datainvent Systems, a software development and IT services company.

At some stage in all of our lives, we enjoyed drawing pictures, cartoons, and other stuff.

For me it was using a pen and paper when I was growing up, but these days the old pen and paper has been replaced by the computer and touch devices! Drawing can be especially fun on touch devices, as you can see by the abundance of drawing apps on the App Store.

Want to learn how to make a drawing app of your own? The good news is it’s pretty easy, thanks to some great drawing APIs available in iOS.

In this tutorial, you will create an app very much like Color Pad for iPhone. In the process you’ll learn how to:

  • draw lines and strokes using Quartz2D,
  • use multiple colors,
  • set brush stroke widths and opacity,
  • create an eraser,
  • create a custom RGB color selector,
  • save drawing to the camera roll, and
  • share your drawing on Twitter!

Grab your pencils and get started; no need to make this introduction too drawn out! :] 계속해서 읽기!

태그: , , , ,

2 August 2012

iOS 5에서 Twitter 개발 시작하기 튜토리얼

Enjoy some pan-seared Twitter in the iOS 5 Feast!

Enjoy some pan-seared Twitter in the iOS 5 Feast!

Ray가 알림: iOS 5 Feast의 12번째 iOS 5 개발 튜토리얼이다! 이 튜토리얼은 우리의 새로운 책인 iOS 5 By Tutorials에 미리보기 챕터로 무료로 제공된다. 즐기길 바란다.

이 블로그 포스트는 iOS 튜로리얼 팀 맴버인 Felipe Laso가 작성하였다. 그는 독립 iOS 개발자이면서 주목받고있는 게임 개발자/디자이너이다.

오늘날 소셜 네트워크는 우리의 삶에 큰 부분을 차지하고 있다. twitter.com이나 facebook과 같은 그들의 싸이트를 통해서 소셜 네트워크를 접속하는 일 뿐만 아니라, 앱, 웹싸이트, 블로그, 비디오 게임 등등에서 소셜의 기능을 찾는다.

앱안에 몇가지 소셜 특징을 추가하는 것으로, 당신의 앱에서 고객을 식별하고 유지하는데 도움이 되는 입소문의 증가를 정말로 돕는다. 그리고 앱의 부가가치를 높이는데도 도움이 된다.

지금까지는 앱에 소셜 기능을 추가하는 것은 고통스러웠다. 각각의 소셜네트워크들은 각각 다른 API를 사용 할 뿐만 아니라, 유저들은 그들이 사용하고 있는 각각의 앱에 로그인에 지속적으로 로그인 해야 한다.

나는 게임이나 앱에 있는 트위터나 페이스북에 얼마나 많이 로그인 했었는지 기억을 하지 못한다. 그와 같은 일은 개발자와 사용자들에게 모든 앱마다 똑같은 일을 반복함으로써 상당히 귀찮음을 가져다 줄 수 있다.

고맙게도 우리를 위해서 애플은 iOS 5에 트위터를 내장하였다. 이제는 모든 사용자들은 트위터에 한번만 로그인하면 되고 각각의 앱은 디바이스에 저장된 계정을 사용하게 만들면 된다.

사용하는 방법이 얼마나 간단하지 계속해서 읽어봐라. 그리고 간단한 앱에 트위터 기능을 내장 해 볼 것이다.

어떻게 작동하는가?

iOS 5는 트위터와 상호작동 하는 몇가지 방법을 포함한다. 간단하고 구현하기 적당한 방법중 하나는 TWTweetComposeViewController이다.

이 튜토리얼에서 트윗 시트는 구현하기 매우 쉬운 것을 볼 수 있다. 단지 몇줄의 라인으로 앱안에 트윗 시트를 만들수 있다. 트위터의 백앤드, 사용자 로그인 다루기와 기타 등등을 전혀 신경 쓸 필요 없다.

여기에 TWTweetComposeViewController를 작성과 보여주기 위한 코드의 부분이 있다.

if ([TWTweetComposeViewController canSendTweet])
{
    TWTweetComposeViewController *tweetSheet =
        [[TWTweetComposeViewController alloc] init];
    [tweetSheet setInitialText:@"Initial Tweet Text!"];
    [self presentModalViewController:tweetSheet animated:YES];
}

해야할 일의 전부는 장치가 트윗을 보낼 수 있는지 확인하고, 트윗 시트 인스턴스를 만들고, 사진이나 링크를 첨부하고, 초기 텍스트를 넣고, 모달에 제공하는 것이다. 모든게 Xcode안에서 오프젝티브 씨를 사용해서 구현 할 수 있다.

사실 구현하기 엄청 쉽다. 만약에 고급 개발자라면 남은 튜토리얼을 건너뛰고 스스로 구현하라. 그러나 간단한 프로젝트에서 “간단한 트윗” 기능을 사용하는 방법을 보고싶다면 계속해서 읽어라.

둘러보기

이 입문 트위터 튜토리얼에서는 앱 내부에서 원하는 텍스트, 이미지, 링크를 트윗 할 수 있게 해주는 TWTweetComposeViewController(예를 들면 “트윗 시트”)를 사용해서 다룰 것이다. 다음과 비슷 할 것이다.

descr

트윗 시트를 이용하는 장점은 iOS에 내장되어 있다는 것이다. 다음과 같은 많은 장점이 있다.

  • OS가 제공하는 표준 인터페이스
  • 자동으로 사용자 시스템의 트위터 계정 사용
  • 트윗 글자수를 140자 이하인지 자동으로 체크
  • 이미지와 링크를 쉽게 첨부
  • 쉽게 프로그래밍 할 수 있음, OAuth, 트위터 서버 연결 구현이 필요 없음

볼 수 있듯이 이것을 사용하면 간단하게 구현 할 수 있는 것 처럼 많은 장점과 인센티브를 가질 수 있다. 그리고 여러분의 앱에 트위터 기능을 포함 하지 않을 이유가 없다.

시작하기

트위터가 가능하게 멋진 앱을 타이핑하고 만들 시간이다. 예제에서 텍스트, 이미지, 링크를 포함한 트윗을 허용하는 간단한 앱을 만들 것이다.

iOSApplicationsSingle View Application 템플릿을 사용하여서 새로운 프로젝트를 만든다. product name으로 SimpleTweet를 넣는다. device family로는 iPhone을 설정하고, Use Storyboard와 Automatic Reference Counting을 체크하는 것을 확인 하라. (다른 체크 박스는 놔둔다.)

descr

next버튼을 클릭하고 프로젝트를 저정할 곳을 선택한다.

이제 프로젝트가 만들어졌고, 뭘 해야할지 좀 더 논의 해보자. 앱은 유저들에게 트윗을 위한 텍스트 입력을 허락할 뿐만 아니라 트윗에 추가적인 이미지나 링크를 포함한 버튼들을 보여준다.

세로모드만 지원을 할 것이기 때문에 project setting에서 설정을 해야 한다. Project Navigator의 SimpleTweet 프로젝트를 선택하고 그 안에서 SimpleTweet target이 선택되었는지 확인하라. Summary tab으로 가서 Portrait를 제외하고 선택 해제한다.

descr

MainStoryboard.storyboard를 열고, 다음과 같이 5개의 UIButton을 뷰 컨트롤러에 추가한다.

descr

이미지와 링크를 트윗에 추가 할 수 있도록 토글을 할 수 있는 4개의 큰 버튼을 만들었다.

raywenderlich.com에서 4개의 다른 튜토리얼의 이미지를 가진 버튼을 만든다. 튜토리얼의 리소스에서 이미지들을 드레그해서 프로젝트에 넣는다. 그리고 아래와 같이 이미지를 사용하게 버튼을 만든다.

descr

간단하게 인터페이스를 만든다.

  • 적당한 이미지를 버트의 배경이미지로 설정하고 buttons type을 Custom으로 설정한다.
  • 버튼에 해당하는 것을 보여주기 위해 4개의 레이블을 추가하고, text color을 White로 설정한다.
  • background color는 dark gray로 변경한다.
  • Tweet 버튼의 text 색상은 black으로 한다.

추가적으로 스테이터스 바의 색상을 translucent black로 보이기 위해서 SimpleTweet-Info.plist 파일에 다음과 같은 라인을 추가한다.

descr

컴파일 하고 실행하면 다음과 같이 보이는 것을 확인하라. 이제 구현할 시간이다.

커넥션 연결하기

스토리보드와 뷰 컨트롤러간에 몇가지 커넥션을 연결하는게 필요하다. MainStoryboard.storyboard 파일을 열고 Assistant Editor가 보이는 것을 확인하고, ViewController.h를 열어라.

각각의 4개의 레이블에서 @interface로 컨트롤-드래그를 한다. 그리고 Outlet의 이름을 button1Label, button2Label, button3Label 그리고 button4Label로 연결한다.

비슷하게 각각의 4개의 버튼에서 @interface로 컨트롤-드래그를 한다. 그리고 Action 이름을 button1Tapped, button2Tapped, button3Tapped 그리고 button4Tapped로 연결한다.

마지막으로 “Tweet” 버튼을 @interface로 컨트롤-드래그를 한다. 그리고 action 이름을 tweetTapped로 연결한다.

끝났으면 헤더파일은 다음과 비슷할 것이다.

#import <UIKit/UIKit.h>
 
@interface ViewController : UIViewController
 
@property (weak, nonatomic) IBOutlet UILabel *button1Label;
@property (weak, nonatomic) IBOutlet UILabel *button2Label;
@property (weak, nonatomic) IBOutlet UILabel *button3Label;
@property (weak, nonatomic) IBOutlet UILabel *button4Label;
 
- (IBAction)button1Tapped:(id)sender;
- (IBAction)button2Tapped:(id)sender;
- (IBAction)button3Tapped:(id)sender;
- (IBAction)button4Tapped:(id)sender;
- (IBAction)tweetTapped:(id)sender;
 
@end

와우! 트윗을 보낼수 있도록 이 메소드들을 구현하자.

TWTweetComposeViewController를 사용하기 위해서는 Twitter framework를 프로젝트에 추가하는게 필요하다. 프로젝트 네비게이터에서 프로젝트를 선택하고 SimpleTweet target을 선택하라. Build Phases 탭으로 가서 Libraries 섹션에서 Link Binary 안에 + 버튼을 클릭한다. 네비게이터 화면이 나타나고 Twitter.framework 파일을 클릭해서 추가한다.

descr

다음으로 ViewController.m 파일을 열고, 파일의 상단에 다음 import를 추가한다.

#import <Twitter/Twitter.h>

파일을 위해서 Twitter API를 참조하기 위한 모든 것이다. 사용자가 Tweet버튼을 탭했을때 트위트 입력상자를 보여주기 위해 코드를 추가하자. tweetTapped 메소드로 가서 다음 코드를 추가하라.

- (IBAction)tweetTapped:(id)sender {
{
    if ([TWTweetComposeViewController canSendTweet])
    {
        TWTweetComposeViewController *tweetSheet =
            [[TWTweetComposeViewController alloc] init];
        [tweetSheet setInitialText:
            @"Tweeting from iOS 5 By Tutorials! :)"];
            [self presentModalViewController:tweetSheet animated:YES];
    }
    else
    {
        UIAlertView *alertView = [[UIAlertView alloc]
            initWithTitle:@"Sorry"
            message:@"You can't send a tweet right now, make sure
                your device has an internet connection and you have
                at least one Twitter account setup"
            delegate:self
            cancelButtonTitle:@"OK"
            otherButtonTitles:nil];
        [alertView show];
    }
}

믿거나 말거나, 위 코드가 트윗을 보내기 위해서 필요한 모든 것이다. 이 보다 더 쉬운게 있을 수가 없다. 추가한 tweetTapped 메소드 코드를 살펴보자.

우선 해야 할 일은 트윗을 보낼수 있는지 확인 하는 것이다. TWTeetComposeViewController의 canSendTweet 클래스 메소드를 호출해서 가능한지 확인한다. 만약에 디바이스가 네트워크에 접속 할수 없거나 Twitter 계정이 설정되어 있지 않으면 이 메소드는 NO를 리턴한다.

앱이 트윗을 보낼수 있으면 해야할 일은 TWTweetComposeViewController 인스턴스를 만들고, setInitialText: 메소드를 사용해서 기본 텍스트를 트윗 시트에 불러오고 전체화면으로 보여준다. 만약에 트윗을 보낼수 없으면 사용자에게 피드백과 함께 간단한 경고창을 보여 준다. 프로젝트를 빌드와 실행을 하고 Tweet 버튼을 터치하면 아래와 같이 보여진다.

descr

대단하지 않는가? 만약에 경고 창이 보여진다면 트위터 계정을 셋팅 창을 통해서 설정하는 것을 확인하라.

위에서 말한것 보다 한가지 이점이 더 있다. TWTweetComposeViewController는 트윗 시트에서 입력이 취소될 경우 코드 블럭에 전달할 수 있게 하는 컴플리트 헨들러 프로퍼티를 가지고 있다.

기본적인 컴플리트 헨들러에 의해 모달 트윗 시트가 취소되지만, 커스터마이징을 통해서 필요한 것을 할 수 있다. 단지 이것만 명심하면 된다. 만약에 자신의 컴플리트 헨들러를 구현한다면 트윗 시트의 취소도 스스로 구현해야 한다.

이미지와 링크 추가하기

하나의 튜토리얼을 선택할 수 있는 로직을 구현하자. 그리고 그것은 이미지와 링크를 트윗에 추가할 수 있다.
ViewController.m 안의 임플멘테이션 전의 카테고리에 다음을 추가한다.

@interface ViewController ()
@property (strong, nonatomic) NSString *imageString;
@property (strong, nonatomic) NSString *urlString;
- (void)clearLabels;
@end

여기서 할 모든 일은 튜토리얼 웹싸이트에 이미지 이름과 링크를 저장 할 수 있는 2개의 프라이빗 스트링 프로퍼티를 만드는 것이다. 뿐만 아니라 레이블의 배경색을 white로 설정할 수 있게 하는 프라이빗 메소드도 만든다.

이 변수들을 위한 synthesize 구문을 추가 한다.

@synthesize imageString = _imageString;
@synthesize urlString = _urlString;

그리고 viewDidUnload: 메소드 안에서 프로퍼티들을 nil 로 설정한다.

self.imageString = nil;
self.urlString = nil;

다음으로 각각의 레이블의 텍스트 색상을 white로 설정하기 위한 clearLabes 메소드를 구현한다.

- (void)clearLabels
{
    self.button1Label.textColor = [UIColor whiteColor];
    self.button2Label.textColor = [UIColor whiteColor];
    self.button3Label.textColor = [UIColor whiteColor];
    self.button4Label.textColor = [UIColor whiteColor];
}

이것들이 앱을 위한 모든 프라이빗 메소드이다.

이것을 구현하는 방법은 다음과 같다. 사용자가 프라이빗 프로퍼티에 이미지의 이름과 링크가 저장된 튜토리얼을 선택할때 레이블 색깔은 현재 선택되었다는 것을 알리기 위해 빨간색으로 설정한다.

만약에 사용자가 다른 튜토리얼을 선택하면 레이블 색깔은 다시 하얀색으로 설정한다. 새로운 이미지와 url을 저장하고 레이블은 빨간색으로 설정한다. 버튼이 탭되었을때 메소드를 위해서 다음 코드를 추가한다.

- (IBAction)button1Tapped:(id)sender {
 
    [self clearLabels];
 
    self.imageString = @"CheatSheetButton.png";
    self.urlString = @"http://www.raywenderlich.com/4872/
        objective-c-cheat-sheet-and-quick-reference";
 
    self.button1Label.textColor = [UIColor redColor];
}
 
- (IBAction)button2Tapped :(id)sender {
 
    [self clearLabels];
 
    self.imageString = @"HorizontalTablesButton.png";
    self.urlString = @"http://www.raywenderlich.com/4723/
        how-to-make-an-interface-with-horizontal-tables-like-the-
        pulse-news-app-part-2";
 
    self.button2Label.textColor = [UIColor redColor];
}
 
- (IBAction)button3Tapped:(id)sender {
 
    [self clearLabels];
 
    self.imageString = @"PathfindingButton.png";
    self.urlString = @"http://www.raywenderlich.com/4946/
        introduction-to-a-pathfinding";
 
    self.button3Label.textColor = [UIColor redColor];
}
 
- (IBAction)button4Tapped:(id)sender {
 
    [self clearLabels];
 
    self.imageString = @"UIKitButton.png";
    self.urlString = @"http://www.raywenderlich.com/4817/
        how-to-integrate-cocos2d-and-uikit";
 
    self.button4Label.textColor = [UIColor redColor];
}

각각의 메소드에서 단지 레이블을 초기화 한다. 적당한 이미지에 해당하는 이미지 스트링을 설정하고, 튜토리얼과 관련된 URL을 설정한다. 그리고 레이블의 글자 색상을 빨간색으로 변경한다. 4개의 메소드들에 중복되는 코드를 작성하지 않기 위해 살짝 다르게 구현 할 수도 있지만 매우 간단한 예제이기 때문에 이번에는 그냥 놔둔다.

tweetTapped 메소드로 이동한다. 그리고 [self presentModalViewController:...]: 메소드가 불리기 전에 다음 코드를 추가한다.

if (self.imageString)
{
    [tweetSheet addImage:[UIImage imageNamed:self.imageString]];
}
 
if (self.urlString)
{
    [tweetSheet addURL:[NSURL URLWithString:self.urlString]];
}

이미지와 URL을 가졌는지 확인 하는 if 구문 두개만 추가 했다. 각각 addImage:와 addURL메소드를 사용하여 그것들을 트위트 시트에 추가했다.

다시 말하지만 이게 필요한 모든것이다. 프로젝트를 실행한다. 튜토리얼을 중 하나를 선택하고 Tweet 버튼을 터치한다. 다음과 같은 화면을 볼 수 있다.

alt="descr" title="descr" width="368" height="716" class="alignnone size-full wp-image-5554" />

만약에 트위트 시트에 2개의 첨부가된 종이 클립 모양이 있다면, 하나는 웹싸이트의 링크이고 다른 하나는 추가된 이미지이다. 사용자가 트윗을 볼 때, 그들은 트윗안에서 두개의 URL 볼 수 있을 것이다. 하나는 이미지를 위한 링크이고 하나는 웹싸이트 링크이다. 실행해보고 다음과 같은지 봐라.

드디어 끝났다.

어디로 가야 하나?

여기에 위 튜토리얼의 모든 코드를 가진 예제 프로젝트가 있다.

보는것 처럼 여러분의 앱에 트위터를 내장 시키는 것은 매우 쉽다. 트위터를 적용하지 말아야 할 이유가 전혀 없다.

어떤 튜토리얼이 선택 되었는지에 따라 트윗 시트의 초기 텍스트 값을 유동적으로 설정하게 하거나, 트윗에 더 많은 이미지나 링크를 포함 할수 있게 시도해 볼수 있을 것이다.

트위터를 여러분의 앱에 통합해서 사용자들이 앱을 사랑할 수 있게 독특한 방법을 생각해라.

트위터를 내장한 독특하고 재미있는 앱을 원한다면, iOS 5 By Tutorials 책을 확인해봐라. 다른 챕터에서는 Accounts framework를 사용하는 방법 뿐만 아니라 맨션, 메세지, 유저 피드 등과 같은 정보들을 얻기 위하여 어떻게 트위터에 접근하는지를 다룬다.

내가 그랬던 것 처럼 이 튜토리얼을 즐겼으면 한다. 궁금한점이 있으면 포럼의 코멘트를 통해서 언제들 물어봐도 좋다. :-)


이 블로그 포스트는 iOS 튜로리얼 팀 맴버인 Felipe Laso가 작성하였다. 그는 독립 iOS 개발자이면서 주목받고있는 게임 개발자/디자이너이다.

태그: , , , , ,

23 July 2012

간단한 아이폰 앱 만들기 튜토리얼, 파트 3/3

어쩌면 가장 무서운 벌레(버그)!

Perhaps the Scariest Bug of All!

Update 2/20/12: iOS 5 버젼으로 업데이트 됨.

이 문서는 초보 개발자를 위한 간단한 아이폰 앱 만들기의 3개 파트로 구성된 시리즈중 3번째 파트이다. 이 앱은 무서운 벌레에 점수를 줄 수 있다.

시리즈 중 2번째 파트, 테이블 뷰에 벌레 리스트를 담는 앱을 만들었다.

시리즈 중 3번째 파트, 벌레의 디테일 뷰를 만드는것을 다루었다.

이번 글에서는 새로운 벌레 추가 하는 방법, 이 프로젝트의 아이콘과 디폴트 이미지를 추가하는 방법, 긴-작업 수행을 다루는 방법을 알아 볼 것이다.

자 앱을 마무리 지어 보자. 계속해서 읽기!

태그: , ,

간단한 아이폰 앱 만들기 튜토리얼, 파트 1/3

아이폰 개발은 무당벌레와 같다. 단지 살짝 무서울뿐이지 재미있다!

아이폰 개발은 무당벌레와 같다. 단지 살짝 무서울뿐이지 재미있다!

업데이트 2/16/12: iOS 5 버젼으로 업데이트 됨.

인디 소프트웨어 개발자들에게 아이폰은 개발을 위한 훌륭한 플랫폼이다. 자신의 유일한 앱 아이디어를 이렇게 쉽게 코드화 하여 만들어 볼 기회가 없었다. 그리고 수백만의 잠재 고객들이 자신의 사용 할 수 있다.

최근에 사람들로 부터 iOS 개발을 어떻게 시작하는지 많은 질문을 받았다. 그래서 초보 개발자들에게 도움을 주는 간결한 튜토리얼 시리즈를 작성할려고 생각했다.

단지 하나의 주제를 세세하게 살펴보기 보단, 전체적으로 기능성을 가진 앱을 만들 것이다. 끝날때 쯤에는 아이폰 개발의 많은 부분을 시도 하고 더 많은 삽질을 위한 준비를 할 것이다.

그래서 어떤 앱을 만들 것인가? 글쎄, 여기 뒷 이야기가 있다.
어느날 밤, 나는 콜로라도 감자잎벌레(Potato Bug)를 처음 보았고 기겁했었다. 왜냐하면 그것은 정말 크고 못생겼기 때문이었다(역주: 곱등이 처럼 생겼다). 그래서 나는 온라인으로 모든 종류의 무서운 벌레 사진을 찾는 일에 집착을 했다. 그래서 재미를 퍼트리기 위해서, 무서운 벌레에 점수를 주는 앱을 만들 것이다.

이 앱을 만드는 동안에 아이폰 개발에서 가장 기본적인 몇몇 주제를 다룰 것이다.

  • 아이폰 개발의 시작에 필요한 것
  • 앱 데이터를 모델에 저장 하는 방법
  • 테이블 뷰 사용 법 – 열(셀) 추가, 삭제 방법 포함
  • 열(셀)에 대한 상세 뷰 만드는 방법
  • 화면 전환(세로, 가로 모드) 지원 방법
  • 네이베이션 컨트롤러 사용 방법
  • 이미지 피커 사용 방법
  • text field, button, image view와 같은 기본 컨트롤 사용 방법
  • 기본 이미지와 아이콘 추가하는 방법
  • 보너스: 긴-작업을 다루는 방법

많은 것 처럼 들리지만, 겁내지 마라. 우리는 벌레(버그)가 안 무섭다. (역주: 버그가 없는게 더 두럽지 않은가?)
세개의 파트로 구성된 시리즈 중 첫번째 파트에서는, 벌레의 리스트를 어떻게 모델에 적용할지, 벌레들을 테이블 뷰에 보여주는 방법 다룬다. (바로가기 파트 2, 파트 3)

이 튜토리얼은 초보 iOS 개발자를 위한 것이다. 그러나 Objective-C는 익숙하다고 가정한다. 만약 Objective-C가 처음이라면, 먼저 Apple의 Objective-C Programming Language Guide를 읽어 보는 것을 추천한다. 계속해서 읽기!

태그: , , ,

간단한 아이폰 앱 만들기 튜토리얼, 파트 2/3

무당벌레 외모는 무섭지가 않다!

무당벌레 외모는 무섭지가 않다!

Update 2/17/12: iOS 5 버젼으로 업데이트 됨.

이 문서는 초보 개발자를 위한 간단한 아이폰 앱 만들기의 세개 파트로 구성된 시리즈중 두번째 파트이다. 무서운 벌레에 점수를 줄 수 있는 앱이 되었다.

시리즈 중 첫번째 파트에서는, 테이블 뷰에 벌레들의 리스트를 담는 앱을 만들었다.

두번째 파트에서는 벌레의 큰 사진을 보여주고, 점수를 주고 그리고 사진을 바꿀수 있게 하는 상세 뷰를 만드는 것을 다룰 것이다.

시리즈의 세번째 파트이자 마지막 파트에서는, 새로운 벌레 추가하기, 프로젝트의 아이콘과 기분 이미지 추가하기 그리고 긴-작업 수행 다루기에 대해 다룰 것이다.

몇 가지 버그(벌레)를 만들자! 결국, 어떤 프로그래밍이든 모두 다 그럴 걸요? :) 계속해서 읽기!

태그: , , ,