Nano Blog - 오병우

구글 검색 결과

Bluetooth Serial Port Profile


소스 설명 잘되어 있는 듯

http://goldenking.tistory.com/10


http://blog.naver.com/oh4zzang/40111958220


http://hardroid.net/profiles/blogs/bluetooth


소스 코드 첨부

http://gangsanilee.tistory.com/1252



임베디드 보드 & 소스코드

http://blog.naver.com/PostView.nhn?blogId=free2824&logNo=60108857440&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView

Core Audio

http://www.slideshare.net/mobile/invalidname/core-audioios6portland


Audio Unit Hosting

https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingGuideForiOS.pdf

안드로이드와는 달리 iOS는 MFi 인증을 얻어야만 블루투스 통신이 가능하다고 함

블루투스 4.0이라고 불리는 BLE를 사용하면 해결이 될듯 함

속도는 줄이고 대신 전원을 오래쓰도록 한 것임


검색해 보니 블루투스 4.0을 지원하는 동글들이 판매 중임

- 퓨전 inote BT-T06, anyclear BM42, 유니콘 XU-400B, [노벨뷰]NVV511, 아이노트 BU-4096 등


프로그래밍

http://weblog.invasivecode.com/post/39707371281/core-bluetooth-for-ios-6-core-bluetooth-was


공식

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html


iOS 시뮬레이터에서 테스트하는 방법

https://developer.apple.com/library/ios/technotes/tn2295/_index.html



BLE 호환성을 검사해 주는 앱인듯...

https://itunes.apple.com/us/app/lightblue-bluetooth-low-energy/id557428110?mt=8



찾다보니 Bluegiga의 BLE112 칩이 자주 검색 되는 듯... 이 칩은 MFi 인증을 받은 것인가...


안드로이드처럼 SPP(Serial Port Profile)를 지원할 계획은 아주 없는 건지...ㅠ.ㅠ

Android에서 WiFi로 고프로의 영상을 받을 수 있는 듯...


VLC로 접근할 수 있으니 어디서든 볼 수 있을 것으로 생각됨.


https://github.com/moohtwo/Android-GoPro-Streaming

https://github.com/moohtwo/Android-GoPro-Streaming/blob/master/Gopro/src/com/mooh/gopro/GoproActivity.java


------------------------

이건 H/W 인터페이스로 USB를 통해 시리얼 통신으로 카메라 제어하는 듯...

http://www.appliedlogiceng.com/index_files/Page1039.htm


명령어들은 ATC 이런것 들이어서 모뎀과 비슷한 듯...


------------------------

Unofficial firmware tools

https://github.com/evilwombat/gopro-fw-tools


------------------------

built-in USB command mode도 있나 보네요...

https://github.com/evilwombat/gopro-usb-tools

지난번 포스팅 에서는 미디 노트를 단순히 AUSampler를 통해 출력하는 예제를 만들어 보았다. 지난번 예제에 코드를 추가하여 완성할 것이니 지난번 예제를 먼저 볼 것!

(지난 예제: http://bwoh.tistory.com/36)


이번에는 지난 예제에 .aupreset 파일을 추가하여 악기를 로딩하고 그 악기 소리를 내보는 예제를 만들어 본다.

LoadPresetDemo에 있는 Vibraphone.aupreset 파일을 추가하였다.

시퀀서(Sequencer)를 만들기 위해서는 여러 악기를 사용하는 것이 필수이므로 악기를 로딩하는 부분을 설명한다.


다음은 ViewDidLoad 함수이다. 지난번 예제에 코드를 추가한다. 

다음은 악기를 로딩하는 함수이다. 지난번 예제에 이 부분을 추가한다. 이 글의 밑에 있는 참고 문헌 부분에 있는 악기 로딩 설명을 참조할 것!



<References>


Apple에서 제공하는 데모 (매우 간단하니 소스 코드 필독!!!)

LoadPresetDemo

http://developer.apple.com/library/ios/#samplecode/LoadPresetDemo/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011214-Intro-DontLinkElementID_2


Audio Unit Hosting Guide (iOS)

PDF 파일

https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingGuideForiOS.pdf

Web Page

https://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009492-CH1-SW1


Audio Unit Sampler (AUSampler) 악기 로딩 설명

http://developer.apple.com/library/mac/#technotes/tn2283/_index.html


Audio Unit Programming Guide (OS X)

http://developer.apple.com/library/mac/#documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/Introduction/Introduction.html

iOS에서 MIDI를 처리하기 위한 CoreMidi API를 Wrapping해 놓은 클래스로 소스 코드가 공개되어 있다.


Midi Device를 붙여서 사용할 때 유용할 것으로 생각됨


설명:

http://goodliffe.blogspot.kr/2010/10/using-coremidi-in-ios-example.html


소스코드:

https://github.com/petegoodliffe/PGMidi



그냥 게임이나 음악 앱에서 미디 악기의 소리만 낼 때는 다음 글을 참조할 것.


[ios] Play Midi Note : 미디 (midi) 노트 (note, 악보) 출력

http://bwoh.tistory.com/36


[ios] Play Midi Note with Instrument : 미디 (MIDI) 노트 (note, 악보) 악기 음색 출력

http://bwoh.tistory.com/37

File-Export 로 apk 파일 생성


https://play.google.com/apps/publish


iOS보다 간단해서 이것만은 좋다.

Project Navigator의 Supporting Files에서 *-Info.plist 파일 클릭

마우스 오른쪽 버튼 눌러서 Add Row


다음과 같이 만들어 줌


소스 코드에 다음 추가



단 백그라운드 상태에서 전화가 오면 다시 재생되지 않음


전화 온 후에 다시 오디오를 재개하려면 다음 글 참조 

http://cafe.naver.com/mcbugi/237796

(delegate와 NotificationCenter 사용)



화면에는 컬러로 나오는데 프린트하니 줄번호만 파란색으로 나오고 나머지는 검은색이어서 찾아 보았더니 방법이 있었다.

1. 도구 - 확장 관리자

2. 검색창에 Color Printing 검색

3. 설치

 

따로 다운로드 받을 수도 있는 듯..

http://visualstudiogallery.msdn.microsoft.com/00ec88c2-1553-47d2-8170-3c5baa0c6e44/

 

Known Issues에도 나와 있듯이, 설치한 뒤에 줄번호 프린트 체크박스가 안보인다. 


또 찾아보니 해결 방법이 써있어서 그대로 따라 했다.


도구 - 옵션 - 텍스트 편집기 - 모든 언어 - 줄번호 (체크박스 선택)


성공!!!

 

이클립스 실행

오른쪽 위에서 DDMS 버튼 누르고

디바이스 선택한 후에 카메라 모양 아이콘 누르면 됨.


그 뒤에는 Refresh, Save 반복


안드로이드 앱 apk 파일은 50MB이내여야 한다.


50MB이내 더라도 에뮬레이터의 열악한 환경에서는 에러가 발생할 수 있다.


이미지가 많아지면서 apk 파일의 용량이 증가하고 다음과 같은 에러가 발생하여 에뮬레이터에서 실행이 불가능하게 되었다.


Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE


구글링해보니 몇 가지 방법이 있었다.


1. AndroidManifest.xml 파일 수정

<manifest> 태그에 android:installLocation="preferExternal"를 추가한다.


단, 이걸 하려면 에뮬레이터에서 SD Card의 용량을 지정해 두어야 할 것으로 예상된다. SD Card 용량을 너무 크게 잡으면 하드 디스크가 낭비되니 주의!!


2. 메뉴 Run-Run Configurations에서 해당 앱 선택하고 Target 탭 눌러서 맨 밑에 있는 Additional Emulator Command Line Options에 다음을 추가한다.


-partition-size 1024 


내 경우에는 해결되지 않았다.


3. log 파일 삭제 방법


cmd 실행하여 android-sdk-windows\platform-tools폴더 들어가서  adb shell 실행

cd data/log

rm *


에뮬레이터에 있는 로그 파일들을 삭제하는 방법인데, 내 경우엔 log 폴더 자체가 없어서 실행할 수 없었다.


1번을 사용하여 간신히 앱은 에뮬레이터에 올라갔는데...비트맵을 로딩하니 VM의 heap을 초과했다고 강제 종료된다...ㅠ.ㅠ


겔럭시 S2에서는 동작했으니 exception 처리 정도로 마무리해야 할 듯...


https://play.google.com/apps/publish/에 접속한다.


e-mail과 패스워드를 입력하고 Sign in을 눌러 로그인한다.


앱의 가운데 부분에 다운로드 수와 현재 디바이스에 깔려 있는 수가 나온다.



Scheme을 변경해야 한다.


디바이스와 시뮬레이터 고르는 곳에서 Edit Scheme 선택.



Build Configuration을 Release로 변경한다.



앱등록시 이렇게 변경하여 Build 하고...


디렉토리 ~~~/Release-iphoneos/ 밑에 있는 패키지를 압축하여 업로드한다.


iPhone 앱을 등록할 때 가장 문제가 많은 부분이 CodeSign 부분일 것이다.

일단, itunesconnect.apple.com에서 Manager Your Applications를 통해 기본적인 것은 세팅해 놓아서  Ready for Upload까지 진행한 것을 가정하겠다.


아참! Universal로 했으면 iPhone 및 iPad 스크린샷을 모두 올려야 한다. 그리고, 사이즈도 레티나 사이즈로 변경되어서, 이전에 올려 놓았던 iPhone 스크린샷은 크기가 맞지 않는다고 저장이 되지 않는다...ㅠ.ㅠ 다시 캡쳐 받는 수밖에...

iOS Simulator에서는 캡쳐가 되지 않으므로, command + shift + 4 누른 후에 space bar를 눌러 전체를 캡쳐한 후에 어플리케이션에 기본으로 들어있는 GIMP를 사용해서 정해진 사이즈대로 잘라낸다.

(Google에 찾아보면 .sh 파일과 NSLog를 사용하여 캡쳐하는 방법도 있기는 하다.)


아무튼 원래 주제로 돌아와서... 앱을 동록하는 과정을 살펴 보자.

기본적인 이론은.... Distribution !!!!!! 이다. (Developer가 아닌....)


1. Build할 때는 Distribution Configuration 사용



추가: 이렇게 한다고 되는 것이 아니라 Scheme을 변경해 줘야 한다. Distribution이 없으면 Release 사용

다음의 링크를 보고 따라하면 된다.

http://bwoh.tistory.com/21



2. Code Signing Identity를 "iPhone Distribution:xxxxx"으로 세팅


문제는 2번을 세팅하기 위해서 아래와 같이 iPhone Distribution으로 시작하는 Provisioning Profile이 있어야 한다는 거다. 이게 없으면 세팅할 수 없다.


Xcode의 Organizer를 띄웠을 때 다음과 같이 프로비저닝 프로파일이 있어야 한다.


프로비저닝 프로파일을 확인하려면 https://developer.apple.com/ios/manage/provisioningprofiles/viewDistributionProfiles.action 에 접속한다.



위의 그림과 같이 프로비저닝 중에서 Distribution에 Active한 프로파일이 있어야 한다.

없으면, 오른쪽 위의 "New Profile"버튼을 눌러서 만들어야 한다.


버튼을 누르면 다음과 같이 나온다.


이 때, 중간에 있는 Distribution Certificate에 인증서가 정상적으로 나타나면 다행인데... 여기에 새로 만들라고 한다면...


https://developer.apple.com/ios/manage/certificates/team/distribute.action

Certificates의 Distribution Tab 여기에 가서 만들어 줘야 한다.


Certificate는 어플리케이션 - 유틸리티 - 키체인 접근에서 만든다. 아니면 있는 것을 Submit한다.

키체인 접근  메뉴 - 인증 지원 - 인증 기관에서 인증서 요청



일반적인 과정을 쫓아가서....



키체인 접근에서도 Certificate가 Developer용과 Distribution용 두개가 있어야 한다. (개발자이면서 배포도 동시에 할 경우...)


아무튼, 준비가 되었으면  Certificate는 developer.apple.com에서 다운로드 받아서 키체인 접근에 추가하고....

Provisioning Profile은 developer.apple.com에서 다운로드 받아서 Xcode의 Organizer에 있는 왼쪽 맨 위에 있는 Library의 Provisioning Profile에 추가한다.


애플사의 공식 도움말은 다음과 같다.

https://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow


이렇게 세팅을 했다면 빌드를 했을 때 성공한다. 


어디에 만들어 놓은지 알 수가 없으니 Products에서 타겟에 Control+ 마우스 버튼 눌러서 Show in Finder를 클릭한다.


타겟을 압축한다.


압축 파일을 만들었으면 이제 그 파일을 업로드할 차례이다.


Application Loader라는 툴을 사용한다.


itunesconnect.apple.com에서 Manage Your Applications에 들어가면 맨 밑에 Download Application Loader가 있다. 다운로드 받았더니만 버전이 안 맞는다...ㅠ.ㅠ


그 옆에 보면 Video Tutorials에 Adding an App과 Delivering Your Binary가 있다.

Delivering Your Binary 비디오를 보다보면 Xcode를 깔 때 자동으로 설치된 Application Loader의 경로가 나온다.

https://itunesconnect.apple.com/downloads/Deliver_Binary.mov?itcKey=1341916966_fc3b9515fdd13a3f03a9d98eb93c1e8a


실행 시켜서 로그인하면 다음과 같은 화면이 나온다.



중간에 있는 Deliver Your App을 누른다...

이미 올려 버려서 나타나질 않는데... 쉽게 따라갈 수 있다


아무튼 이때 중요한 것은 아까 타겟을 압축해 둔 파일을 선택한다는 것이다.

폴더를 찾아 들어갈 때 유사한 이름들이 있으니 잘 확인해서 들어갈 것!!


뭔가 오래 걸리면 제대로 되는 것이다~

Code Sign 에러가 발생하면 금방 끝난다.


Code Sign 에러가 발생하면 iTunes Connect에서 업로드하려고 했던 버전과 타겟의 버전이 맞게 되어 있는지 확인해 볼것...

이것 저것 구글링하면서 문제가 없는지 찾아보는 수 밖에....


Good Luck!!!


갑자기 Code Sign Error나서 당황했다.


http://liebus.tistory.com/entry/%EC%95%A0%ED%94%8C-Certificate%EB%93%B1%EB%A1%9D-Devices-App-ID-Provisioning-%EB%93%B1%EB%A1%9D-%EA%B3%BC%EC%A0%95


기본적으로는 위의 링크대로 하면 되는데..안되어서 결국은 다음의 방법으로 해결했다.

위의 링크처럼 Key Chain, Certificate, Provisioning다 만들어 놓은 뒤에...


https://developer.apple.com/ios/manage/provisioningprofiles/index.action


여기에서  Active로 되어있는 것을 다운로드 받고 오거나이저의 위에 있는 (디바이스에 있는 것 말고...) Provisioning Profile에 등록하니 되었다.



낙엽 흩날리며 떨어지는 효과를 찾다가 비슷한 효과를 찾았다. 


http://www.youtube.com/watch?v=DSuHoKZo2mE


http://goodreactions.com/blog/2011/09/09/a-glitterticker-effect-in-cocos2d/



위의 그림과 같이 물결 처리를 위해 cocos2d는 사용해야 겠고, 기존의 UIKit도 같이 사용해야 해서 일주일동안 밤새면서 삽질했다. (정지 화면 캡쳐를 하니 물결이 잘 안보이는 군요...ㅠ.ㅠ 위쪽 약간 왼쪽에 유심히 보시길... 위 화면은 개발 중인 화면임)


결과론적으로는 OpenGL과 cocos2d를 사용해 볼 수 있는 좋은 기회가 되었다.


본 글을 통해 얻을 수 있는 지식

cocos2d와 UIScrollView를 같이 사용하여 두 가지의 장점을 한꺼번에 사용할 수 있는 시너지 효과를 얻을 수 있다. 스크롤뷰가 위에 올려져 있으면 밑에 깔려 있는 cocos2d의 Scene에 터치가 작동하지 않는 문제를 해결한다.


1. OpenGL ES 기반으로 그래픽 처리에 뛰어난 cocos2d 설치 방법

2. cocos2d 맛보기 프로그래밍 (항상 동작하는 애니메이션 및 터치에 따른 애니메이션 처리)

3. 일반적인 아이폰 프로그램 처럼 시작하고 부분적으로 cocos2d 화면을 사용하는 방법

4. cocos2d와 UIScrollView를 동시에 사용하는 방법

5. UIScrollView에서 터치한 이벤트를 cocos2d로 전달하는 방법

6. cocos2d에서 터치의 좌표를 제대로 변환하는 방법


cocos2d 설치

먼저 cocos2d를 다운로드 받아서 설치한다. iPod touch 2.5세대까지는 OpenGL 2.0을 지원하지 않으므로 cocos2d 1.0을 사용해야 한다.

http://www.cocos2d-iphone.org/download

위의 홈페이지에서 다음을 다운로드 받는다 (아니면 아래 링크 클릭). 현재 (2012년 6월 23일) 안정화된 버전이라고 되어 있다.

cocos2d-iphone-1.0.1.tar.gz 


다운로드 받은 후에는 다음의 링크에 따라서 설치한다.

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:index


응용프로그램-유틸리티에서 터미널을 실행하여 다음을 실행한다. 이때 디렉토리명이 혹시 다를 경우는 뒤에 붙은 버전까지 모두 입력해야 한다.

cd cocos2d-iphone-1.0.1
./install-templates.sh -u


cocos2d 프로젝트 생성

cocos2d를 설치하였다면 cocos2d 템플릿으로 프로젝트를 생성한다. UIKit을 주로 사용하고 부분적으로만 cocos2d를 사용할지라도 cocos2d 템플릿으로 프로젝트를 생성한다.



그림에서는 cocos2d를 먼저 설치 했었기 때문에 cocos2d v2.x도 있으나 위의 1.0.1을 사용해야 한다.

프로젝트명은 TestTouch으로 입력한다.

프로젝트를 생성한 후에는 일단 실행~ (Command + R)



이렇게 나오면 cocos2d까지는 성공 !!!


cocos2d 프로그래밍 가이드를 따라서 만들어 봅시다~

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_2._your_first_game


이미지 파일을 다운로드 하여 프로젝트 Resources에 추가하는 것을 잊지 말 것!!!

http://www.cocos2d-iphone.org/wiki/lib/exe/detail.php/prog_guide:seeker.png?id=prog_guide%3Alesson_2._your_first_game


HelloWorldLayer.m 파일을 다음과 같이 수정한다.



화면을 터치하면 아이콘이 그 곳으로 이동한다.




UIKit으로 시작되도록 수정

이제는 처음 시작한 뒤에 바로 cocos2d 화면이 보이는 것이 아니라, 일반적인 아이폰 앱처럼 실행되도록 수정한다.

Supporting Files에 보면 main.m 파일이 있다. 이 파일을 다음과 같이 수정한다.



이제는 시작시 화면이 될 XIB 파일을 생성한다.






 MainWindow.XIB 파일을 선택하고 File's Owner를 UIApplication으로 변경한다.


Object를 추가한다.


Object를 선택하고 클래스를 AppDelegate로 써준다.


File's Owner를 선택하고 Outlets에 있는 delegate를 마우스로 끌어다가 방금 만들었던 App Delegate에 연결 시켜준다. 아니면 File's Owner에서 Control + 클릭한 후에 끌어다가 App Delegate에서 놓아 주면 연결된다.


그리고 나서 실행(Command + R)해서 검은 화면이 나타나면 일단 여기까지는 성공!!!


TestTouch를 선택하고 Main Interface를 방금 추가한 MainWindow로 지정한다.


그러면, AppDelegate가 작동하므로 아까랑 같이 seeker는 계속 움직이고 있고 클릭하면 cocos2d 아이콘이 따라오는 화면이 나온다.


AppDelegate.m 파일의 - (void) applicationDidFinishLaunching:(UIApplication*)application 내의 모든 내용을 주석 처리한다.


그리고, 실행하면 다시 검은 화면이 나온다.



MainWindow.XIB 파일을 선택하고 Window를 추가한다.


AppDelegate.h 파일의 window에 IBOutlet을 추가해 준다.


MainWindow.XIB 파일에서 App Delegate를 선택하고 window 오른쪽에 있는 동그라미를 끌어다가 왼쪽 App Delegate 밑에 있는 Window에 놓는다. 또는, App Delegate에서 Control + 클릭한 후에 끌어다가 바로 밑에 있는 Window에 놓는다.


Navigation Controller를 추가한다.





첫 화면으로 네비게이션 컨트롤러 사용


UIViewController 클래스로부터 상속받은 MyViewControllerClass를 생성한다.






디렉토리를 한 단계 아래로 지정한다.



MyViewControllerClass.XIB 파일에서 View에 Round Rect Button을 추가한다. Orientation을 Landscape로 변경하고 버튼의 Title은 그림과 같이 입력한다.


MainWindow.XIB 파일에서 Window를 선택하고 오른쪽의 Outlets 중에서 rootViewController의 오른쪽에 있는 동그라미를 끌어다가 왼쪽에 있는 Navigation Controller에 놓는다. 또는 Window에서 Control + 클릭한 후에 끌어다가 밑에 있는 Navigation Controller에 놓아서 rootViewController를 연결시킨다.


View Controller를 선택하고 오른쪽에서 Class를 MyViewControllerClass로 지정한다.


MyViewControllerClass.m 파일의 다음 메소드를 수정한다.


그리고 실행하면 다음과 같이 화면이 나타난다.




버튼을 누르면 cocos2d 화면 출력

RootViewController.m 파일을 다음과 같이 추가 및 수정한다.


 MyViewControllerClass.h 파일을 다음과 같이 수정한다.


MyViewControllerClass.m 파일을 다음과 같이 수정한다.



버튼을 눌렀을 때 RootViewController로 연결되도록 연결한다. 먼저 위의 버튼 중에서 양복 모양 버튼을 눌러서 Assistant Editor가 나오도록 한다. 그 뒤에 MyViewControllerClass.xib 파일을 선택한 후에 버튼을 선택한다. Control을 누른 상태에서 버튼을 클리하고 마우스를 끌어다가 오른쪽에 있는 buttonTapped 메소드에 놓아서 Connect Action이 되도록 연결한다.



그리고 나서, 실행하여 나오는 첫 화면에서 버튼을 누르면 seeker와 아이콘이 나오는 cocos2d 화면이 나온다.

당연히 왼쪽 위의 버튼을 누르면 첫 화면으로 돌아간다.

처음에 만들어 놓은 cocos2d 화면을 _rootViewController 변수에 저장하고 있으므로 버튼을 눌러 다시 들어와도 화면이 유지된다.


UIScrollView와 cocos2d의 openGL view 동시 사용

UIScrollView는 확대/축소 및 스크롤을 지원하므로 사용하기 매우 편리하다. 그러므로, 배경은 cocos2d의 화면을 사용하고 사용자에게 주된 정보는 UIScrollView를 통해 지원하는 방식이 가능하다.


UIScrollView에서 touch

UIScrollView를 사용하니 매우 편리했는데, 밑에 깔려 있는 cocos2d에 터치를 제공하려고 하니, 되질 않았다. UIScrollView에서는 제스쳐를 인식하려고 노력하기 때문에 touch가 안된다고 한다.


해결 방법은 UIScrollView를 상속받아서 touch를 처리하는 View를 만들면 된다. RootViewController.m 파일에서 @implementation RootViewController 앞에 다음을 추가해 준다.


View 생성 및 연결 방법

RootViewController.h 파일에 imageView 프로퍼티를 추가한다.


RootViewController.m 파일에 imageView 프로퍼티의 메소드를 만들기 위해 synthesize 해준다.


viewDidLoad에서 다음과 같이 연결한다. seeker.png를 확대/축소 및 스크롤하도록 만들었다. 그리고, 소스코드 뒷 부분의 viewForZoomingInScrollView에서는 imageView를 사용하여 줌 및 스크롤이 되도록 한다.



userInteractionEnabled는 여기 저기에 넣어 두었다.

다 되었으면 실행하여 커다란 seeker가 있는지 확인하자. 핀치 액션을 통한 확대/축소, 스크롤 등이 잘 되는지 확인하자.



좌표 이상 해결

seeker를 대상으로 한 동작은 모두 제대로 수행되지만 아이콘의 움직임을 위해 터치 했을 때는 좌표가 정확하지 않다. 이를 수정하는 방법은 다음과 같다.

HelloWorldLayer.m 파일을 다음과 같이 수정한다.


이제 실행해 보면 아이콘의 움직이는 좌표도 정확해 졌음을 확인할 수 있다.


스크롤 뷰를 움직이는 동안 멈추는 현상 해결

스크롤 뷰에 터치하고 움직이는 동안 애니메이션이 멈추는 경우가 있다. 이를 해결하는 방법은 다음과 같다.


프로젝트에서 freezing을 검색하면 CCDirectorIOS.m 파일의 startAnimation 메소드 내의 comment가 검색된다.

이를 다음과 같이 주석 해제하면 된다.

이제 실행해 보면 스크롤 뷰를 터치하여 움직이는 동안에도 cocos2d 애니메이션은 별도로 잘 움직임을 확인할 수 있다.



http://cafe.naver.com/mcbugi/172046 의 글에서는 AppDelegate applicationDidFinishLaunching 함수도 고쳐 주라고 되어 있. 위의 방법만 써도 해결되므로 필요 없을 것으로 생각한다. 


본 예제에서는 애초에 해당 부분을 setupCocos2d 함수에 가져오질 않았었다.




결론

cocos2d와 UIScrollView를 같이 사용하여 두가지의 장점을 한꺼번에 사용할 수 있는 시너지 효과를 얻을 수 있다. 다만, 이때 스크롤뷰가 위에 올려져 있으면 밑에 깔려 있는 cocos2d의 Scene에 터치가 작동하지 않는다. 본 글은 cocos2d와 UIScrollView를 같이 사용하는 방법과 이러한 현상을 해결하기 위한 방법을 설명하였다.


1. 기본적인 앱은 Cocoa Touch를 사용하고 부분적으로 cocos2d를 UIKit과 같이 사용하려고 할 때 적용 가능하다.

2. UIScrollView 밑에 cocos2d를 놓고 사용할 때 터치가 되지 않는 현상을 서브클래싱을 통해 해결하였다.



<참고 문헌>

http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:lesson_2._your_first_game

http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit

http://blog.backpackholic.tv/6



cocos2d를 사용한 물결 효과에 관심이 있으시면 이전에 포스팅한 글에 가보시면 유튜브 영상과 소스코드, 작가의 설명 모두 링크가 되어 있으니 참고하시길...

http://bwoh.tistory.com/14