스마일루닷컴 : smileru.com (스마일로그)

무슨글이든 포장과 과장 없이 무조건 솔직하게 씁니다.

독학으로 iOS앱만들기 #8. 문턱을 넘은 느낌

댓글 2

iOS앱만들기

2019. 1. 3.




"계획대로 되고있어!"






※ 이 글은 기본적으로 저를 위해 2달(세달;)에 한번 정도 남기는 기록이며,

혹시라도 저와 같은 '생초보' 분들에게 공감과 위로, 도움이 된다면

그것으로 더할나위 없을 것 같습니다. ^^







   지난 두 달간 한 일

* 여전히 앱 만들법한 시간에 게임을 많이하긴 했다. '레드데드리뎀션2' 다 깸;;;

* 연말이라 이래저래 놀기도 했지만, 프로그래밍에도 전례없이 집중했다.

* 순수하게 프로그래밍에 집중한 시간은 두 달간 몇 시간일까? 15시간? 생각해보면 나에게 부족한건 그저 시간, 집중력일런지도.



   3개의 산을 넘다 (1) PageViewController

* 지난번 글에서 쓴 것처럼, '완전히 새로운 BPM앱'을 만들기로 하고 제작을 시작했다.

* 실력과 무관하게 상상력의 나래는 펼쳐지기 마련이니 자꾸 앱에 기능을 추가하고 싶어진다.

* 그러다보니 3개의 산을 만났다. 첫번째는 PageViewController.

PageViewController는 화면을 쓸어넘기면 또 다른 화면이 나오는 ViewController이다. 아이콘들이 늘어선 스마트폰의 메인화면과 같다.

* 앱 안에 PageViewController를 구성해서 여러 화면을 만들고 싶었다.

* 간단히 Storyboard에서 만들어 넣고 연결하면 될 줄 알았는데 안되더라. -_-; 알고보니 적잖은 소스작업이 필요했다.

* 알 턱이 없는 나는 구현 예제를 찾아다녔다. 공개된 예제들로 시도해봤는데 생각보다 빨리 성공했다. 성공!



   (2) Delegate

* 그렇게 대충 앱들이 건설되어질 '땅'은 만들었다.

* 이후 앱을 만들다보니 ViewController간 데이터를 주고받아야 하는 상황이 발생했다.

* 지금까지 공부한 초보용 예제들은 두개 이상의 ViewController를 가지고 있지 않았기 때문에 그럴 필요가 없었다. 당황스러웠다.

* 찾다보니 ViewController간 데이터를 주고 받는 방법에는 여러가지가 있더라. 

* 그 방법 중 하나는 Delegate를 이용하는 방식이고 다른 하나는 Segue이용하는 방식인데 Delegate가 뭔가 멋져보였다.

* 관련 예제들을 찾아 시도했고, 잘 작동하는 것을 확인하여 내 앱에 맞게 다양한 방식으로 수정하였다. 성공! 은근 시간이 걸렸다.



   (3) CAShapeLayer

* 그렇게 '땅'을 연결하는 '도로'도 완성했다. 이제 뭔가 지어나가야 할 상황이었다.

* 다양한 계산이 가능하게 하는 것은 지난번에 내 최초의 앱으로 만든 바 있기 때문에, 그를 멋지게 '구현' 하는게 문제였다.

* 특정 원 모양을 깜빡이게 하고 싶었는데, 이미지 두개를 번갈아 보여주는 방법도 있었지만 그건 좀 구식같아 보였다.

* iOS는 화소가 높은 레티나 디스플레이에서 잘 작동하게 하는 그림 그리기 함수들을 지원하고 있었다. 대표적인게 CAShapeLayer.

* 뭔가를 그리는데에 수학적 지식이 필요하다는데(복소평면과 비슷한듯?) '원' 만 그리면 되서 그건 문제가 없었으나...

* 예제를 보고 적용해도 이상하게 잘 작동하지를 않더라. 

* 이렇게 저렇게 해보며 시간이 꽤 흐른 뒤, 소스의 위치(함수 내/외)가 중요하다는 사실을 알았다. 

* 그래서 일단 원은 그려졌는데, 그 원을 이제 깜빡이게 하는게 필요했다. Animation을 넣어야 했는데...

* 특정 시간 간격으로 깜빡이게 하려다보니 Timer()와 함께 사용할 필요가 있었다.

* 처음 소스를 써 내려갔을때는 잘 작동하지 않았지만 이래저래 한 끝에 결국 성공!!!ㅋㅋ



   천천히 시간을 투자하자

* 말로 대충썼지만 사실 꽤 많은 검색과 시도들이 있었다.

* 특히 CAShapeLayer를 사용하고 Animation을 적용하는 과정은 정말 짜증나는 과정이었지만 한두시간 집중해서 투자하니 성공하더라.

* 몇십분씩 해서는 확실히 머리를 굴리고 뭘 생각해내기가 힘든 듯 하다.

* 뭐 어차피 당장 급한 것은 아니니, 그렇다고 마냥 시간 끌 것도 아니니, 시간이 생길 때는 꼭 앱을 천천히 만들어가야 할 것 같다.

* 여하튼 초심자 입장에서 꽤 어려운 이런저런 어려운 문제들을 해결하면서 나름 자신이 생긴 것 같다.

* 만들고 싶지만 잘 모르는 기능들은 찾아서 구현할 수 있는 실력 정도는 되었다는 느낌이랄까? 아 물론 겨우 몇번 성공한거지만ㅋㅋㅋ

* 여튼 올 상반기 안에는 꼭 이 앱을 완성시켜봐야겠다. 시간이 어떨지는 모르겠지만...



   링크

[Xcode / Swift] ViewController간 데이터 교환하기 - MacInJune : ViewController간 데이터를 주고 받는 방법이다. 입력한 텍스트를 주고 받게 했지만, 나는 정해진 데이터를 다른 ViewController의 버튼Label에 뜨도록 변형해 적용했다.

Core Graphics Tutorial Part 1: Getting Started : 전부터 주목했던 raywenderlich.com의 한 튜토리얼이다. CAShapeLayer를 이용하진 않지만, 기본 그래픽 기능인 Core Graphics 기능으로 이런 것도 가능하다는 것을 확인해 볼 수 있다.

CAShapeLayer in Depth, Part II : 홈페이지 이름부터가 Calayer.com이다.ㄷㄷㄷ 말그대로 CAShapeLayer를 이용한 다양한 그래픽 기능들을 소개하는 블로그다. 글은 정말 몇 개 없는데, 딱 기초적인 부분들이 잘 나와있다. 대박!ㅋ