'ios'에 해당되는 글 81건

  1. 2012.06.01 iOS개발하기 #36. UISearchDisplayController(2) <UISearchBar, NSThread, JSON, NSRequest> (31)
  2. 2012.05.30 iOS개발하기 #35. UISearchDisplayController(1) <UISearchBar, UITableView> (5)
  3. 2012.05.29 #pragma mark - 소스코드 이쁘게 관리하기 (5)
  4. 2012.05.26 iOS개발하기 #34. NSNotificationCenter (노티피케이션센터) (27)
  5. 2012.05.24 iOS개발하기 #33. Protocol, Delegate (프로토콜, 델리게이트) (31)
  6. 2012.05.21 iOS개발하기 #32. 피커뷰(UIPickerView) (26)
  7. 2012.05.17 iOS개발하기 #31. UIActivityIndicator, NSThread (18)
  8. 2012.05.11 iOS개발하기 #29. 경고창 (UIAlertView) (20)
  9. 2012.05.09 iOS개발하기 #28. 웹뷰 (WebView) <2> - delegate 사용해 보기 (25)
  10. 2012.05.07 iOS개발하기 #27. 웹뷰 (WebView) <1> (42)
  11. 2012.04.26 iOS개발하기 #26. 이미지 피커 (UIImagePickerController) <사진찍기, 사진 불러오기> (35)
  12. 2012.04.23 iOS Simulator에 사진 넣기 (6)
  13. 2012.04.21 iOS개발하기 #25. 액션시트 (UIActionSheet) (17)
  14. 2012.04.20 Objective C <11>. 딕셔너리, 배열 ( NSDictionary, NSArray ) (34)
  15. 2012.04.19 iOS개발하기 #24. 애니메이션(UIViewAnimation)<2> Flip, Curl (21)
  16. 2012.04.16 iOS개발하기 #23. 애니메이션(UIViewAnimation)<1> 움직이기, 사라지기, 나타나기 (24)
  17. 2012.04.12 iOS개발하기 #22. 스크롤 뷰, Scroll View(3) 페이징<2>, 페이지컨트롤 (33)
  18. 2012.04.09 iOS개발하기 #21. 스크롤 뷰, Scroll View(2) 델리게이트 (10)
  19. 2012.04.06 iOS개발하기 #20. 스크롤 뷰, Scroll View(1) 페이징<1> (30)
  20. 2012.04.03 Xcode4 xib의 객체 소스파일과 쉽게 연결하기

오늘의 주제

1. UISearchBarDelegate
2. Daum Open API
3. NSThread
4. JSON parsing (JSONSerialization)



서른 여섯 번째 시간입니다.^^

지난 번에는 계속 포스팅을 위해 이것저것 준비를 해 두었지요?
지난 번 포스팅에 계속 이어지는 포스팅 입니다~
2012/05/30 - [iOS Dev/함께해보기] - iOS개발하기 #35. UISearchDisplayController(1)

오늘은 스레드와 리퀘스트 그리고 JSON 파싱에 대해 중점적으로 진행해 봅니다.

자~ 출발합니다~!


# UISearchBar

일단, 검색바에 검색어를 입력하였을 때, 그리고 검색 버튼은 눌렀을 때 검색을 시작하려고 합니다.
그래서 검색바 델리게이트 레퍼런스로 와서 그에 상응하는 메소드를 가져옵니다.
아래 두 메소드를 클릭해서 전체 메소드를 복사해서 SearchViewController.m 구현파일에 붙여넣어 주세요.


# Daum Open API

그리고 우리가 검색하려는 내용이 도서와 동영상이었습니다. 그래서 다음에 오픈 API를 이용해 보려고 합니다.
http://dna.daum.net/apis/search/book
으로 이동합니다.


일단 API사용을 위해서는 인증키를 받아야 하는데요, 키발급관리 메뉴에서 검색 API의 인증키를 받습니다.


그럼 바로 이렇게 인증키가 발급될거예요~ 창을 닫지 말고 두세요 ㅎ



# NSThread, JSON parsing (JSONSerialization)
 

그리고 이제 우리는 웹으로 데이터 요청을 할텐데요, 그 전에 웹 요청은 스레드로 요청을 하는 것이 좋으므로 스레트 객체 두 개를 선언해 줍니다.


그리고 초기화와 끝내기를 잊지 말아야 겠죠?ㅎ


자, 그리고 본격적으로 오늘의 코딩입니다.
자세한 설명은 코드에 주석으로 달려있는데요, 추가적으로 필요한 설명이 있으면 꼭 댓글주세요~^^*


여기 오류가 하나 있는데요 ㅠㅠ
나중에야 발견해서 캡쳐를 다시 못했네요.
searchBarSearchButtonClicked 메소드에 1, @"pageNum" 을 [NSNumber numberWithInt:1], @"pageNum" 으로 바꿔주세요.
아래 메소드에는 잘 해놓고 위에는 제대로 안되어있네요 ㅠ_ㅠ


코드를 작성하고 실행을 해 봅니다.


그리고 디버그창에 이런 외계어 같은 로그가 남는다면 정상입니다 ㅋ
만약에 result에 에러코드가 떨어진다면 Open API 페이지에 에러코드에 관한 설명이 있으니 참고하세요 ㅎ


자, 오늘은 JSON파싱까지 무사히 해 봤습니다~!

일단은 책 검색까지만 해 봤는데요, 다음번에는 이 정보들을 테이블뷰로 띄워보는 것 까지 해 보려 합니다.

기대해 주세용~_~

질문은 댓글로 주세요^^&


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UISearchDisplayController 


서른 다섯 번째 시간입니다.^^

지난 번에까지는 객체간의 데이터 전달에 대해 알아보았습니다.
잘 알아두셔야 할 부분들일 거예요 ㅎ

오늘 부터 시작할 포스팅은 꽤나 길게 이어질 것 같습니다.

여러분께서 원하던 기능들을 많이 많이 해볼거거든요..ㅎ

제목은 UISearchDisplayController 지만 이 안에는 엄청나게 많은 내용들을 담게 될 것입니다.

요 녀석에 많은 것을 활용 해 볼 수 있는 요소들이 있거든요 ㅎ

자 일단 결론부터 말씀을 드리자면 

검색결과 컨트롤러 다루기
테이블뷰 다루기
검색바 다루기
스레드 다루기
URL Request 전송
JSON 파싱
XML 파싱

여러분들께서 궁금해 할 만한 내용들을 대폭 담아 볼 예정입니다.

원래 다른거 할 것들이 조금 더 있었는데, 많은 분들이 얼른 해달라고 요청해 주셔서 더 빨리 진행하게 되었습니다.

그만큼 조금 복잡하고 어려운 포스팅이 될 것이라고 생각하지만, 여태껏 잘 따라오셨다면 몇 번 보고 이해하실 수 있을 정도라고 생각이 듭니다.

물론 전제로는 앞의 제 포스팅을 완벽히 이해하고 있다는 전제하에 시작합니다.

그럼 이번에도 힘겨운 여정을 떠날 준비가 되셨나요?ㅎ

출발해 볼까요~?


p.s 기대되신다면 추천 한 방 어떠세용 ㅎㅎ




# UISearchDisplayController

왜 검색 컨트롤러를 사용하느냐...

우리가 이제 몇 번의 포스팅으로 진행해 나갈 프로젝트를 간략히 설명드리겠습니다.

검색 컨트롤러를 이용하여 Daum 책 검색, Daum 동영상 검색을 통하여 결과를 가져와서 파싱한 다음 테이블뷰에 뿌려주고,

테이블 뷰를 선택하면 해당 결과 페이지로 이동하는 녀석을 만들어 볼 것입니다.

자 그러기 위해선 우선 검색 결과 컨트롤러를 사용하기 위하여 뷰 컨트롤러를 하나 생성해 줍니다.


그 화면에 Search Bar and Search Display 라는 이름의 객체를 하나 얹어 줍니다.


그리고 Search Display Controller 라는 녀석을 헤더에 아울렛을 하나 연결 해 주세요~


자, 그리고 새로운 화면을 띄워주기 위해서 우리가 메인으로 쓰고있던 ViewController에서 버튼을 하나 추가해 주고 액션을 연결해 주세요~


그리고 구현파일 ViewController.m으로 와서 헤더 임포트 해주시고~


모달뷰를 띄우는 메소드를 구현해 줍니다 ㅎ


자, 우리는 이 검색 컨트롤러에 대해 잘 모릅니다.
일단 뭐 죽이되는 밥이되든 그녀석의 레퍼런스를 찾아 들어가 봅니다.


항상 그렇듯 Overview에 이 클래스에 대한 개요가 나옵니다.
이녀석이 어떤 녀석인지 알아봅시다.


일단 뭐 테이블에 검색결과를 뿌려주는 녀석 같습니다. ㅋㅋㅋ
이녀석을 사용하려면
1. 검색 결과 테이블의 데이터 소스 구현
2. 검색 결과 테이블의 델리게이트 구현
3. 검색 출력 컨트롤러의 델리게이트 구현
4. 검색바의 델리게이트 구현
순대로 구현을 하라고 하네요~
일단 말 잘 들으면 좋습니다 ㅋㅋㅋ


일단 테이블뷰의 데이터 소스를 먼저 구현해 보려고 합니다.
필수로 구현되어야 할 메소드가 있나요?
네.. 있죠~ 그런데 이녀석들 구현하기가 너무 귀찮습니다~


그래서 테이블 뷰 서브 클래스를 하나 만들어 봅니다. 이거 임시적으로 만드는 거예요~


그래서 구현파일에 가보면 데이터 소스와 델리게이트 모두 친절하게 구현이 되어있습니다.
#pragma mark - Table View data source 부터~ 아래쪽에 있는 델리게이트 메소드까지 쭈욱 끌어서 복사합니다~


바로 여기까지용 ㅋ


그리고 필요없어졌으니 가차없이 지워버립니다. ㅋㅋㅋ
네비게이터에서 두 파일을 선택하고 delete -> Move To Trash 입니다~


자 그럼 위에서 1,2 번은 구현이 되었으니 3번을 구현해야 할 차례인데, 일단 보니 필수적으로 구현해야 할 메소드가 없네요?ㅎ 
그럼 일단 스킵합시다~


또 4번 째 검색 바 델리게이트 또한 필수 구현 메소드가 없네요~
그럼 요녀석도 잠시 스킵합니다 ㅎ


그리고 이제 다시 검색 뷰 컨트롤러로 돌아와서 화면에 툴바를 먼저 얹어 주시구요~ 바 버튼 네 개를 넣어줍니다.
그리고 웹뷰를 올려주세요~
각 버튼은 액션을 연결해 주시고, 웹뷰는 아울렛을 연결해 주세요~
바 버튼들 어떻게 처리하는지 모르신다면 
2012/05/07 - [iOS Dev/함께해보기] - iOS개발하기 #27. 웹뷰 (WebView) <1> 를 참고해 주세요~


그리고 친절하게 버튼 메소드들도 구현해 줍니다~ 웹뷰를 보셨다면 어떤 버튼들인지 감이 오시죠?ㅎ
밑에 경고들은 일단 무시하세요~ ㅎ 다음에 설명드릴게용~



자, 이렇게 하고 실행 해 보세요~

덩그라니 검색 화면만 나오고 뭐 검색결과도 안나오고..ㅋㅋ

일단 우리는 아직 밑장만 깔아놓은 거예요~

아휴~ 준비하는데도 참 힘드네요 ㅎㅎㅎ

이제 다음 포스팅 부터 본격적으로 이것 저것 해볼게용~

기대해 주세요~!


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom
개발하다가 소스코드가 길어지고 지저분해 지다보면 어떤 메소드가 어디에 있는지 찾아가기 굉장히 불편해지고 가독성이 떨어지게 됩니다.

그래서 소스코드를 약간 이쁘게 정리해 둘 필요가 있습니다.

습관을 들여놓으면 아주 좋아요 ㅎ

#pragma mark 

요녀석을 사용하면 좋은데요~

한 번 보여드릴게요~

코드 오른쪽 상단에 보면 바로갈 수 있는 네비게이터가 있는데요 한 번 클릭해 보시면 구현되어있는 변수들과 메소드들이 쭈욱 나열될 거예요.
그런데 영역별로 마크를 남겨주면 알아서 보기 좋게 정리해 줍니다~


이렇게 이쁘게 깔끔하게 말이죵~ㅎㅎ


정리 되어있지 않았을 때입니다.
소스코드 정말 얼마 되지도 않는 컨트롤러인데도 자신이 원하는 메소드 한 번에 찾아가기 거의 불가능 하다고 봐야겠죠^^;



요로코롬 유용한 녀석이 있으니, 꼭 습관처럼 작성하면 좋습니다 ㅎ


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. NSNotificationCenter


서른 네 번째 시간입니다.^^

지난 번에는 델리게이트 프로토콜을 이용하여 데이터를 주고 받는 것을 해 보았습니다.
어떤가요 흥미로우신가요?ㅎ
프로토콜을 사용하여 통신하는 방법도 있지만, iOS에서는 또하나의 흥미로운 기능을 제공합니다.
바로 노티피케이션 센터라는 녀석인데요, 우리가 푸쉬 알림 받는 그 노티피케이션이 아닙니다 ㅎㅎ
그럼 일단 한 번 시작해 보도록 하겠습니다.

그 전에 딕셔너리에 대한 이해가 조금 필요로 합니다.
2012/04/20 - [Objective-C] - Objective C <11>. 딕셔너리, 배열 ( NSDictionary, NSArray )

자 떠나볼까요?ㅎ
고고씽~~~~~~~~~~~~


# NSNotificationCenter?

노티피케이션센터라는 녀석은 어떤 녀석일까요?ㅎ

일단 그 전에, 우리가 다른 객체와 데이터를 주고 받을 수 있는 방법에 대해 잠깐 언급해 보도록 하겠습니다.

첫째로는 직접 주고 받기가 있습니다.
말 그대로 서로 다른 객체를 참조하여 메소드 또는 프로퍼티를 통하여 직접 주고 받는 방법입니다.
여기서 우리는 사용하지 않도록 하겠습니다. 
굉장히 지저분하며, 효율적이지 못하고 이것저것 꼬일 가능성이 크기 때문입니다.
저도 처음 델리게이트 프로토콜이나 노티피케이션에 대해 알지 못했을 때에는 종종 사용했는데, 지금 보면 정말 왜 이모냥으로 만들어 놨나 싶을 정도로 거지같습니다..ㅋㅋ
그러니까 아~ 그런게 있구나~ 정도만 알아두세요 ㅎ

둘째로는 지난 번에 알아보았던 프로토콜을 이용하여 통신하는 방법입니다.
나름 깔끔하고 효율적인 것 같아 보이죠^^

셋째로는 오늘 알아볼 노티피케이션 센터를 통하는 방법입니다.
개인적으로는 가장 깔끔하고 작업능률면에서 효율적이라고 생각합니다.
프로토콜을 이용했을 때에는 어쨋든 내가 그녀석의 델리게이트다, 데이터소스다 라고 선언을 해 주어야 하고, 이것 저것 그래도 손이 가는 편입니다.
그런데 노티피케이션 센터를 통하게 되면 그런 수고를 덜 수 있습니다.
하지만 수고가 덜어지는 만큼 위험도 도사리고 있을 수 있다는 점 명심하세요 ㅎ

자, 그럼 노티피케이션 센터라는 녀석은 무슨짓을 하는가 살펴봅니다~


자, 노티피케이션 센터가 하는 역할입니다.

객체간에 서로 누가 누군지는 전혀 알 수 없습니다만, 노티피케이션 이름만 알고 있다면 노티피케이션 센터에다가 나 이런 노티피케이션을 날렸으니 너가 알아서 처리해! 라고 명령하는 것입니다.

그럼 노티피케이션 센터는 그 해당 노티피케이션을 기다리고 있는 객체에게 해당 명령을 수행하도록 명령하게 되는 것입니다.

대충 감이 오시나요?ㅎ

그럼 한 번 실습을 해봐용 ㅎ



# 실습해보기

자, 일단 먼저 어떤 명령을 수행할 객체 클래스에 노티피케이션 센터에 자신이 할일을 등록하는 것 부터 시작합니다.

우리는 지난 번에 했던 델리게이트 프로토콜 대신에 노티피케이션으로 변경하는 작업을 해볼거예요~ㅎ

ViewController.m으로 옵니다.

처음 로드될 때 노티피케이션 센터에 자신이 할일을 등록해 줍니다.

그리고 주의할 점은 자신이 사라져 해제가 될 때 또는 그 일을 더이상 하지 않아야 할 때, 노티피케이션 센터에 더이상 자신은 일을 하지 않는다고 다시 알려주어야 합니다.

또한, 노티피케이션을 받아서 일을 처리하는 메소드는 꼭 인자를 NSNotification으로 받아와야 합니다. 그래서 지난 번에 사용하던 메소드를 수정할까 새로 만들까 하다가 새로 만들어 주었습니다.ㅎ
이 NSNotification 객체 안에는 몇몇 정보들이 들어가 있습니다.
노티피케이션 이름, 노티피케이션과 관련된 객체, 그리고 userInfo라는 딕셔너리가 포함되어 있습니다.

우리는 데이터를 주로 userInfo라는 딕셔너리를 통하여 전달을 하게 될 것입니다.
그래서 조~ 밑에 노티피케이션 송출 부분에서는 userInfo라는 곳에 딕셔너리를 넣어서 보내줄거예요~

노티피케이션 센터는 우리가 굳이 별도로 만들어 줄 필요는 없습니다. 기본적으로 제공되고 있는 기본 노티피케이션 센터가 있으니 걱정하지 않으셔도 됩니다.

코딩을 해 봅니다 ㅎ


몇 줄 없죠?ㅎ

그런데 사용할 때에는 더 몇줄 없습니다 ㅎㅎ


따지고 보면 수정되는 거는 세줄이네요 ㅎ
지난 번에 사용하였던 프로토콜 호출 부분은 주석처리를 해 두었습니다~!

그리고 실행!!


짜잔~~~~~~
아주 잘 동작하네용 ㅎㅎㅎ

어때요~
참 쉽죠잉?ㅋㅋㅋ

오늘 해본 내용은 꽤나 자주 사용해야 하고, 중요한 부분인데 금방 끝나버렸네요 ㅎㅎ

추가적으로 궁금한 것이 있으면 댓글주세요^^*

그럼 이만, 뿅~!


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. Protocol
2. Delegate 만들어 보기



서른 세 번째 시간입니다.^^

지난 번에는 유저의 응답을 받아 볼 수 있는 피커뷰에 대해 알아보았습니다~
이번에는 프로토콜이라는 것에 대하여 알아보도록 할게요~
잘만 사용하면 좋은 녀석입니다 ㅎ

스따뚜~~~~~~~~~~~~





# Protocol이란?

네트워크에서 프로토콜이라 함은 일종의 통신규약을 말하는데요, Objective-C에서는 약간 다른 의미로 사용됩니다.
음... 뭐 굳이 말하자면 클래스간의 통신 규약이라고도 말할 수 있겠네요 ㅎ
프로토콜은 일정한 메소드를 통하여 클래스 간에 통신을 할 수 있는 통로를 제공합니다.
어떠한 객체에서 다른 객체로 데이터나 메세지를 전달하고 싶을 때 사용할 수 있습니다.

말로는 잘 느낌이 안오시죠?ㅎ
그런데 이렇게 말씀드리면 느낌이 조금 오시려나요?ㅎ

이 프로토콜이란 친구를 사용하여 코코아 터치에 많이 사용되고 있는 위임패턴(Delegation Pattern)을 구현할 수 있습니다.

그럼 기본적으로 클래스에서 제공되는 델리게이트 메소드 말고 우리가 직접 델리게이트 프로토콜과 메소드를 만들어 보는 시간을 갖도록 하겠습니다.ㅎ

# Delegate 만들어보기

이번 실습에서는 ViewController의 한 라벨에다가 ViewControllerForWeb에서 우리가 불러왔던 웹페이지의 마지막 주소를 세팅하는 것을 해보겠습니다.

그러려면 일단 ViewController에 라벨을 하나 넣어줘야겠죠?ㅎ
라벨을 넣어주시고 아울렛을 연결해 줍니다.


그리고 이제는 프로토콜 생성을 위하여 ViewControllerForWeb.h로 옵니다.
거기에 프로토콜을 작성해 주고, 프로퍼티로 델리게이트를 만들어 줍니다.
@required와 @optional은
말 그대로 다른 객체와 프로토콜을 통해 연결했다면 꼭 구현해줘야 하는 메소드이다. 선택적으로 구현해 주어야 하는 메소드이다를 구분해 준 것입니다.
지난 번에 피커뷰에서 피커뷰 델리게이트 중에 필수적으로 구현이 되어야 하는 메소드가 있었지요? 그것을 생각하시면 편할거예요.


그리고 ViewControllerForWeb.m에서 헤더에서 만들어준 델리게이트를 synthesize로 받아줍니다.


그리고 우리가 마지막으로 ViewControllerForWeb을 닫을 때 프로토콜을 통하여 ViewController로 메소드를 호출합니다.


그리고 이제는 ViewController로 돌아와서 델리게이트로서의 역할을 하도록 세팅해 주고, 메소드 들을 선언해 줍니다.


그리고 구현파일 ViewController.m으로 돌아와서 실제적으로 메소드를 구현해 줍니다.
또, ViewControllerForWeb의 객체를 생성해 줬을 때, 자신을 델리게이트로 설정을 해 줍니다.



자, 이제 실행해 볼까요?ㅎ

이렇게 웹페이지를 띄웠다가~


닫고 이전 화면으로 돌아가면~ 맨 마지막에 요청하였던 페이지의 주소가 라벨에 세팅이 되어있음을 확인 할 수 있습니다 ㅎ


아까 구현해놓고 실행하지 않았던 빨간색으로 글자 바꾸는 메소드는 여러분께서 한 번 적절히 활용해서 꼭 실행해 보시기 바랍니다 ㅎ

정말 중요한 개념인데 금방 끝냈네요~

굉장히 중요한 내용 중에 하나이기 때문에 혹여나 이해가 안되시거나 부족하다 싶으면 꼭 말씀해 주세요.
보강설명 들어가겠습니다...ㅎ
사실 지금 좀 부족한 감이 있습니다만, 여러분의 피드백이 필요한 시점입니다 ㅎㅎ
피드백 없으면 이 내용은 포스팅이 또 안나오겠지요..ㅎ

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UIPickerView
2. UIPickerViewDelegate 
 



서른 두번째 시간입니다.^^

지난 번에는 뺑글이를 돌려보셨겠지요?ㅎ
오늘은 사용자의 입력받기를 해 볼까 합니다~
그 중에 하나로 피커뷰를 해 볼게요~

그 전에 이제껏 우리가 사용했지만 제대로 알지 못했던 NSArray에 대해 조금 알아보고 오시면 좋겠습니다.
Objective-C 카테고리에 포스팅이 되어있어요^^*
2012/04/20 - [Objective-C] - Objective C <11>. 딕셔너리, 배열 ( NSDictionary, NSArray )

자, 다 보셨으면 출발 해 볼까요?ㅎ
스따뚜~~~~~~~~~~~~
전에 추천 한 방 어떠세요?ㅎ 저에게 큰 힘이 됩니다~^^*




# 피커뷰란? 

피커뷰에는 크게 두 가지 종류가 있습니다.

데이트피커뷰, 피커뷰.

말 그대로 날짜 선택 뷰와 일반적인 선택 뷰.

이렇게 두 가지가 있습니다.

날짜선택 이라고 하니까 어떤 녀석인지 감이 확 오시나요?ㅎ

맞습니다 바로 그 녀석입니다~

오늘 해 볼 녀석은 일반적인 피커뷰 입니다.

이녀석만 되면 뭐 날짜 선택 정도야 레퍼런스 보면서 충분히 하실 수 있으리라 믿습니다^^*

# UIPickerView


이제껏 사용하였던 프로젝트 그대로 계속 사용합니다~ㅎ
ViewController.xib에서 ViewController.h로 아울렛과 액션을 그림과 같이 연결 해 줍니다.
(이 정도는 이제 설명 안해드려도 할 수 있으시겠죠? +_+)


자, 그리고 우리는 PickerView를 사용할 것인데...
항상 말씀드리듯이, 이 얼굴마담들은 지 할일을 안합니다...ㅋㅋ
그리고 자신을 나타낼 데이터들을 어디선가 뽑아와야 합니다.
그래서 우리는 ViewController를 PickerView의 데이터소스이자 델리게이트로 선언해줍니다.

그리고 우리는 피커뷰에서 음악 이름을 선택하는 것을 만들어 보려 합니다.
음악 제목들이 들어갈 NSArray를 클래스 멤버 변수로 선언을 해 줍니다.
그리고 아까 잘 연결 하셨으면 아래처럼 아울렛과 액션이 잘 작성이 되어있을 거예요~


자, 저렇게 선언해 주시고 빌드(커맨드+B)를 해 봅시다.
아마 생전 처음보는 Warning이 발생할거예요~
잘 노려보세요 ㅎㅎ
일단 음악 이름이 들어갈 배열을 초기화 해 주시구요 ㅎ


경고를 다시 읽어봅시다.

프로토콜의 메소드가 완성되지 못했다고 지껄이는거 같죠?ㅎㅎ

맞습니다. 누군가가 누군가의 델리게이트 또는 데이터소스의 역할을 수행한다고 선언했으면 꼭 필수적으로 구현되어야 하는 메소드가 있을 수 있습니다.

피커뷰 같은 경우에는 필수적으로 구현되어야 하는 메소드가 있습니다. 그래서 경고를 띄워주는 것입니다.
 
그리하여 무슨 메소드가 꼭 필수로 들어가야 하는지 레퍼런스 탐험을 해 봅니다.

피커뷰 데이터 소스 레퍼런스를 봅니다.
두 메소드 전부 필수(required) 메소드이군요.
필수이므로 살짝 복사해서 ViewController.m으로 가져옵니다 ㅎ


피커뷰 델리게이트에는 필수 메소드는 없네요~ 하지만 우리가 필요한 메소드가 있을 것 같네요~
빨간 네모 쳐진 메소드의 설명을 읽어보면 열(row)를 선택했을 때 호출되는 메소드라고 설명이 있네요~
유저의 선택에 대해 응답하여야 하므로 복사해 옵니다~



자, 그리고 이쁘게 코딩을 해 볼까요?ㅎ 뭐, 설명은 역시나 주석에^^*



실행해 봅시다~! 어!?
요상합니다~ 평소에 보던 모습이 아니죠?ㅎ 위치도 이상하고... 물음표만 나오고 ㅠ


그럼 소스코드를 살짝 고쳐봅시다~


이번엔 위치가 이쁘게 잡혔네요~
그럼 물음표는??? 대체 왜 나올까요?? 저 물음표대신 내가 원하는 것이 나오게 하려면 어떻게 할까요?
음... 저 데이터는 어떻게 가져와야 할까요?ㅠ
그렇죠~
데이터소스에서 건져올 수 있겠죠?ㅎ 역시~!


데이터 소스의 메소드를 살짝 만져 줍시다 ㅎ


짜잔~~~~~~ 이쁘게 나오네용 ㅎㅎ


이렇게도 해 줄 수 있습니다. 이건 어떻게 했냐구요?ㅎ
레퍼런스를 뒤적뒤적 해보시면 나오겠죠?ㅎ






오늘은 추가적으로 혼자 해 볼 것들을 던져 드리겠습니다 ㅎㅎ

1. 바로 위의 그림처럼 셀렉트 인디케이터가 나오도록 옵션을 줘 보세요 ㅎ

2. 미완성인 이 예제를 제목을 선택했을 때 그 음악이 실행이 되도록 수정해 보세요~

3. 여러개의 컴포넌트를 가지는 피커뷰를 만들어 보세요~

답은 공개하지 않습니다~ 여러분의 몫입니다 ㅎ

그럼 오늘은 여기 까~~~~~~~지~~~~~~~!


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UIActivityIndicator
2. NSThread



서른 한 번째 시간입니다.^^

지난 번에 소리재생을 했는데, 화면이 멍 때리는 현상이 발생하였죠?ㅎ
자, 그녀석을 해결할 방법을 찾아봅시다.

그리고 로딩할 때 그냥 로딩되면 심심하니까 뺑글이도 한 번 넣어줘 봅시다~
스따뚜~~~~~~~~~~~~

그 전에 추천 한 방 어떠세요?ㅎ 저에겐 큰 힘이 됩니다 +_+ㅋ

# NSThread

일단, 화면이 멈추는 것 먼저 해결을 해 보도록 할게요.

스레드 라는 녀석이 있습니다.

우리가 이제까지 일반적으로 코드를 통해 동작시킨 녀석들은 거진 다 메인 스레드에서 동작을 하게 됩니다.

그런데 메인 스레드에서 무슨 일을 명령을 하면 어떤 한 일처리가 끝나기 전까지는 다른 일처리를 하지 못합니다.

다시 말해서 음악 플레이를 준비해! 라고 명령을 하면 음악 준비에 너무 열중 한 나머지 화면처리를 하지 못한다는 뜻입니다.

그래서 버튼이 퍼렇게 남아있고 화면이 멈춘 것처럼 보이게 되는 것이죠.

그래서 우리는 명령을 여러 줄로 분산시켜서 여러개의 명령은 한 번에 처리하도록 처리해 줄 수 있습니다.

그것을 스레드라고 합니다.

그래서 화면처리는 메인스레드에서, 로딩이나 파일 처리는 다른 새끼 스레드에서 처리를 하게 해 줍니다.

화면 처리는 메인스레드에서만 해줘야 합니다..^^

그래서 우리는 음악 로딩과 플레이 명령을 다른 스레드에서 동작하도록 구현해 보도록 할거예요~

간단합니다 ㅎㅎㅎ

코드 몇 줄로 끝!

지난 번에는 버튼을 누르자 마자 해당 명령들을 실행을 했는데, 이번에는 명령들을 새로운 메소드에 넣어주고, 기존 메소드에서는 버튼을 누를 때 스레드를 생성해 주는 코드로 바뀐거예요~^^

ViewController.m으로 이동합니다~


자, 마법처럼 파란 멍 때리는 현상이 없어졌죠?ㅎ

화면처리는 메인스레드에서 해주고, 음악 파일 준비와 실행은 새끼 쓰레드에서 처리를 하기 때문이예요 ㅎ
 
# NetworkIndicator, UIActivityIndicator
 

자, 이번에 뺑글이를 넣어 봅시다~

뺑글이의 종류는 크게 두 가지, 네트워크 인디케이터, 액티비티 인디케이터가 있습니다.

네트워크 인디케이터는 말 그대로 네트워크를 사용한다는 의미로 보여주구요, 액티비티 인디케이터는 뭔가 자료처리를 하고 있음을 보여주는 녀석입니다.

두 녀석 다 화면에 표시해 보도록 할게요. 물론 실제로는 불필요하게 네트워크 인디케이터를 사용해서 오해를 살 필요는 없겠죠?ㅎ

일단 헤더파일로 와서 액티비티인디케이터를 하나 선언해 줍니다.


그리고 viewDidLoad 메소드에서 nil로 초기화를 해 주구요~


인디케이터를 생성해 주는 메소드를 추가해 줍니다.
아까 말했듯이 화면처리는 메인 스레드에서 해줘야 하는데 액티비티 인디케이터는 화면처리에 속하므로 메인스레드에 넣어줘야 해요~
네트워크 인디케이터는 이것과는 좀 별개라 상관이 없는데 액티비티 인디케이터는 이렇게 처리를 해주어야 합니다...ㅎㅎ


자, 이렇게 다들 잘 나오시나요?ㅎ

저는 잘 나오네용 ㅋㅋㅋ

이렇게 오늘도 하나 툭 내려놓고 갑니다~

또 필요한 것 있으시면 댓글 주세요~^^

저 그럼 이만 물러가 보도록 하겠습니다~!


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UIAlertView


스물 아홉번째 시간입니다.^^

지난 번까지는 웹뷰에 대해서 알아보았습니다.

이번에는 AlertView에 대해서 알아보도록 하겠습니다.

AlertView는 xib에서 생성이 되지 않고 코드로 생성을 해 주어야 합니다.ㅎ

그럼 일단 시작해 봅시다~!

# UIAlertView

자, 일단 AlertView는 delegate가 없으면 무용지물입니다.
이녀석은 그냥 얼굴만 비출 뿐 아무것도 하지 않으려고 합니다.
그래서 우리는 ViewControllerForWeb에게 AlertView의 델리게이트를 해달라고 말할거예요.


자, 그리고 AlertView도 하나가 아니면 구분을 할 수 없기 때문에 태그를 넣어줄 예정이예요.
그래서 enum으로 먼저 어떻게 해줄지 정해줍니다.
enum은 첫 번째 수를 지정해 주고, 쭈욱 써주면 자동으로 하나씩 숫자가 늘어서 등록이 되어요.
첫 번째 녀석이 1이면 두 번째는 2, 세 번째오는 녀석은 3... 이런식으로요~


자, 그리고 나서 전에 작성했던 코드들을 조금 수정해 봅니다.


자, 실행 해 봅시다.
이렇게 얼럿이 뜨는게 보이시나요?ㅎ
버튼을 눌러봅니다.


반응이 없어요..ㅋㅋㅋ 네... 아까 말씀드렸듯이 이녀석은 그냥 얼굴만 비출 뿐 아무것도 하지 않으려고 합니다.
그래서 우리는 델리게이트에게 일을 맡겨야 해요.

자, 오늘도 어김없이 레퍼런스를 뒤적뒤적 합니다~
어김없이 커맨드 쉬프트 알트 / 를 누릅니다.
검색을 쇼숑~
아래 보니 사용자가 버튼을 클릭했을 때 무엇을 해줄지 말해줄 수 있는 메소드가 있군요.


이녀석에 대해 설명을 보니 유저가 버튼을 통해 대답을 하면 델리게이트에게 무엇을 할지 말해 줄 수 있는 녀석인 것 같네요.
복사해옵니다 ㅎㅎ


그리고 처리해줄 델리게이트인 ViewControllerForWeb에서 구현해 줍니다.

우리가 원하는 기능에 대해서 잘 써줍니다.
역시나 설명은 주석으로^^

 
짜잔~ 실행해서 눌러보면 어떤가요?ㅎ
잘 동작하나요?


정말 종료하시겠습니까?

예.

그러므로 오늘 포스팅은 여기까~지 ㅋㅋㅋㅋㅋㅋㅋㅋ

다음에 보아용~^^


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UIWebView
2. UIWebViewDelegate 



스물 여덟번째 시간입니다.^^

지난 번에는 웹뷰를 만들고 화면에 웹페이지를 띄워 만들어 보았습니다.

자 그럼 오늘은 웹뷰와 함께 이것저것 해 보아야 겠지요?ㅎ

긴 말 없이 시작해 봅니다 ㅎㅎ

p.s. 추천 한 방 어떠세요?ㅎ



# UIWebView - delegate

웹뷰를 화면에까지 띄워보았으니 이제는 앞으로 가기 뒤로가기 등,... 버튼 동작들을 구현해 봅니다.
자, 일단은 지난번에 버튼들에 태그를 달아 두었던 것 기억하시죠?
그 태그를 보다 직관적으로 표현해 보기 위하여 #define과 enum을 사용하여 구현해 보았습니다.
#define과 enum은 뭐냐구요?
아... 음... C에서 나오는 녀석들인데,

제가 C 카테고리에서 포스팅 한 줄 알고 있었는데, 아직 포스팅을 안했네요 ㅠ_ㅠ
iOS에 너무 열중을 하다보니;;ㅎㅎ

C 카테고리에서 포스팅 했습니다..ㅎ
한 번 읽어보세요..^^
2012/05/14 - [C] - C <15>. 전처리자
2012/05/24 - [C] - C <20>. enum

그냥 말 그대로 define (정의) 해 주는 전처리자 입니다.
전처리자는 뭐냐구요?
말그대로 전처리, 전에 미리 처리해 놓는다 이런거구요. 깊이 생각하실 필요없고 그냥
변수처럼 쓰이지만 바꿀 수 없는 static한 변수입니다.
물론... 변수와는 큰 차이가 있습니다만, 무시하세요 ㅎㅎ

이렇게 define과 enum을 사용하여 미리 태그들을 직관적으로 표현해 봅니다. 둘 중 하나만 해도 됩니다.
저는 그냥 아주 약간의 테크닉을 소개해 드리고자 이렇게 두 가지 표현 다 사용 해 본 것 뿐입니다..^^;


그리고 내려와서 지난 번에 만들어 두었던 barButtonClick: 메소드를 알차게 채워줍니다^^


짜잔~
실행해 보고 버튼을 눌러봅니다~

잘 동작 되시나요?ㅎ

그런데 코드에서 보면... 네 번째 function 버튼의 동작과 모양이 일치하지 않음을 알 수 있습니다. 그러면 웹뷰의 동작 상태에 따라
버튼의 모양을 상황에 맞게 변경해 주어야 겠지요?ㅎ

그러면 누군가 웹뷰의 상태를 보면서 웹뷰가 특정 행동을 할 때, 그에 맞는 상황 대처를 해 주어야 합니다.
그 녀석이 뭐라고 했죠?

네 맞습니다! delegate !!



# UIWebView - delegate

자, 그러면 Web View의 델리게이트에 대해 알아봐야겠습니다 ㅎㅎ
검색을 알차게 해 봅니다~
아직도 Documentation의 단축키를 모르신다구요?
ㅠ_ㅠ Command + Alt + Shift + / 입니다.
자, 그렇게 해서 레퍼런스를 찾아보니, 델리게이트가 해줄 수 있는 일들이 나오네요 ㅎ
우리가 필요한 것은 웹뷰가 로딩을 시작할 때, 그리고 끝냈을 때 입니다.
왜냐구요? 로딩을 시작하면 정지 버튼으로 변경 해 주고, 로딩이 끝나면 새로고침 버튼으로 변경 해줘야 하니까요 ~


자, 그럼 이 녀석들에 대한 설명을 읽고, 이녀석이다 싶으면 메소드를 복사 해 옵니다~



Bar Button은 툴바 안에 속해 있는 녀석이죠.
일단 그 녀석을 변경해 주려면 툴바의 도움이 필요할 것 같군요~
툴바의 아울렛을 선언 해 줍니다.



이렇게 이쁘게 연결이 되었겠죠?ㅎ


그리고 알차게 코드를 폭풍입력!!!!!!!!!!!!!
코드에 대한 설명은 주석으로 알차게 달려있답니다^^*


그리고 나서 동작 상태에 따라 버튼모양이 이쁘게 변하는지 확인 해 봅시다~

어떤가요?ㅎ

델리게이트라는 녀석 참 오묘하고 재미나지 않나요?

오늘은 여기 까~지~^^

다음에 또 만나요~



by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UIWebView 
2. UIToolBar



스물 일곱번째 시간입니다.^^

지난 번까지는 프로젝트를 계속 사용했는데, 이번에 새로 프로젝트를 하나 만들어 보겠습니다.
어찌되었든간 지난 번 까지 했던 내용들은 마음에 드셨는지 모르겠습니다...^^
지금까지 해 본것들은 예제이고 앞으로도 예제를 통해 내용이 진행되니, 디자인이 이쁘지 않더라도, 지금 당장 뭐가 없어보여도 쭉 한번 따라해 보세요..^^
그럼 어느순간 머릿속에 정리가 되고 느낌이 올 때가 있습니다.
그 때, 필요한 것들만 검색하고 취합해서 자신만의 프로젝트를 만들어 가시면 됩니다.
아직 그정도는 안온 것 같죠?ㅎ

그럼 오늘 또 새로운 세상을 향하여 한 걸음 내딛어 봅시다^^

출발~!



# UIWebView, UIToolBar

UIWebView...
음~ 이녀석은 뭘까요?ㅎ
딱, 이름만 봐도 웹뷰.
즉, 웹페이지를 보여주는 녀석이라는 것을 알 수 있죠?ㅎ

오늘은 이녀석과 한 번 놀아봅시다^^

아까 말씀드린대로 오늘은 새로운 프로젝트를 생성하여 진행 하도록 하겠습니다.
물론 이후 포스팅에서도 이 프로젝트를 계속 사용할 예정입니다~
프로젝트 템플릿은 Single View Application으로 하겠습니다.


프로젝트 이름은 WithYagom으로 했구요~
아래 여러 옵션들을 유심히 보시고, 실수 하지 않도록 하세요~
질문 주시는 분들중에 스토리 보드에 체크하고 프로젝트를 생성하셔서 질문하시는 분들이 몇분 계시더라구요^^;
너무 조급히 생각하지 마시고 천천히 꼼꼼하게 보며 진행하시기 바랍니다.
조급히 달리다 보면 소소한 기초들과 개념들을 놓치게 됩니다~!


일단 앞으로 당분간은 세로모드 고정으로 진행할 계획입니다.~



자, 새로운 프로젝트를 생성하고, 이제 WebView를 얹어 볼 새로운 뷰 컨트롤러 생성을 할 차례입니다.
WithYagom폴더에서 오른쪽 버튼 또는 커맨드 클릭을 하여 New File을 선택합니다.


Objective-C class를 선택해 주시구요~


클래스 이름은 ViewControllerForWeb이라고 하겠습니다. XIB파일 생성에도 체크해 주시구요~


자, 이렇게 새로운 클래스가 생성되었죠?
그런데 이렇게 클래스를 새로 생성 할때마다 파일이 쭉쭉 늘어나고 복잡해 지는데... 정말 많아지면 정신없겠죠? (지난 프로젝트 한 번 보세요..ㅎㅎ)
이참에 정리를 좀 해볼까요?


WithYagom폴더에서 우클릭을 하고 NewGroup을 선택합니다.


새로운 그룸이 생성되면 이름을 써서 그룹을 만들어 주고, 파일들을 알맞게 정리해 줍니다. 저는 이런식으로 정리를 해 보았습니다~
자, 좀 깔끔하죠?ㅎ


그렇다면 이제 본격적으로 시작해 봅시다.
ViewControllerForWeb.xib파일로 이동합니다.
ToolBar라는 녀석을 하단에 쭈욱 넣어주시고,
Bar Button Item이라는 녀석을 하나 넣고, Flexible Space Bar Button Item 을 넣고, 다시 BarButton Item을 넣고...
그렇게 Bar Button Item을 다섯 개 넣어줍니다.


자, 그리고 Bar Button Item들의 이름을 이렇게 바꿔주시고요~
ToolBar위쪽으로 Web View를 똻~~!!!!!!! 올려줍니다~


그리고 오른쪽 버튼을 누른 상태로 File's Owner로 쭈욱 끌어당겨 줍니다.


그리고 delegate를 클릭!!
이제 이 클래스(ViewControllerForWeb)의 인스턴스가 이 WebView의 delegate가 됨을 말하는 것입니다. WebView의 동작처리를 ViewControllerForWeb이라는 녀석이 하겠다는 뜻이죠?


그 이후에 Assistance 모드로 전환해서 ViewControllerForWeb.h파일에다가 아울렛을 선언해 줍니다.



자, 그러면 ViewControllerForWeb.h에 이렇게 이쁘게 생성이 되겠죠?ㅎ



자, 그럼 이제 Bar Button Item들도 액션 선언을 해 주어야 하는데, Bar Button Item 선택이 한 번에 안됩니다.
버튼을 누르면 처음에 Tool Bar 전체가 선택이 됩니다. 그러면 그 후에 버튼을 한 번 더 눌러주면 그 때 버튼이 선택이 됩니다.
(아래 두 그림을 참고하세요)


자, 그러면 첫 번째 버튼의 액션을 연결 해 봅시다.
오른쪽버튼을 누른채로 쭈욱 당여옵니다.
그 후에 액션을 아래처럼 연결해 주시구요. 이 그림만 보고 성질 급하게 다섯 번 째 까지 연결 하실 분들을 위해 한 줄 더 쓰고 다음 그림으로 갑니다 ㅋㅋ
두 번 째 버튼부터는 아래 그림을 참고하세요.


두 번 째 버튼부터는 위에 만들어 두었던 메소드로 연결을 해줍니다.
오른쪽 버튼을 가지고 쭈욱 끌어서 만들어 놓은 메소드 위로 올리면 Connect Action이라고 나옵니다. 그 때 마우스를 떼면 빤짝빤짝 해요~
연결 된 겁니다.


자, 그런데 버튼들에 이름을 직접 새겨 넣는 것 보다 좀 더 직관적으로 표현해 보고 싶습니다.
네 번째 새로고침 버튼의 스타일을 변경 해 봅시다. 좀 더 직관적으로 보이죠?ㅎ


 다섯 번 째 녀석도 한 번 바꿔 봅니다. 물론 실제로 컬업으로 닫히게 하지는 않을거예요..ㅎㅎ 그냥 스타일 한 번 줘 봅니다~



그리고 이제부터 첫 번째 버튼 부터 태그를 하나씩 지정해 줍니다.
태그는 그 녀석만의 식별 숫자라고 생각하시면 되겠습니다.
물론 다른 객체도 같은 태그를 가질 수 있습니다만, 객체별로 구분하고 싶다면 태그를 다르게 입력해 주는게 좋겠죠?
첫 번째 버튼의 태그는 10


두 번째는 20


세 번째는 30... 네 번째 다섯 번 째 까지 쭈욱 넣어줍니다.



그 후에 이제 메인 뷰 컨트롤러인 ViewController.xib로 이동하여 버튼을 하나 만들어 줍니다.
그리고 액션을 그림처럼 연결 해 주세요~


그리고는 새로 우리가 만든 클래스의 헤더를 import 해 주시고,
버튼과 연결된 메소드인 webButtonClick: 에 내용을 넣어줍니다.
코드는 아래 소스의 주석을 확인하세요.^^


그리고 ViewControllerForWeb.m으로 옵니다.
아래 소스를 작성해 주세요.


실행해 봅니다~!
자, 잘 나오나요?ㅎ
아래 툴바의 버튼들은 아무 동작을 하지 않죠?ㅎ 물론 우리가 아무것도 작성하지 않았기 때문이죠..^^;



오늘은 여기까지..ㅎ

오늘은 양이 많았지만, 결국 나온것은 웹페이지 하나 띄워 본 것 뿐이네요 ㅎㅎ
하지만 다음 포스팅의 밑거름들을 쭈아악~~~~~ 깔아 놓은 것이니 다음 포스팅에서는 좀 더 알찬 내용이 나올 것이라고 믿어 의심치 않습니다 ㅎㅎ

그럼 다음에 뵈어요~^^

뾰봉~


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 



Posted by yagom

오늘의 주제

1. UIImagePickerController 
2. UIImagePickerControllerDelegate



스물 여섯 번째 시간입니다.^^

지난 번 액션시트에 이어 이어지는 포스팅입니다^^
2012/04/21 - [iOS Dev/함께해보기] - iOS개발하기 #25. 액션시트 (UIActionSheet)

이번에는 액션시트를 눌러서 적절히 사진을 불러오는 방법에 대해 알아봅니다~
재미있겠지요?ㅎㅎ
고고~~~~~~~~~~~~~~~~~~~~~

★ 이번 포스팅은 Potomac님의 요청으로 진행해보았습니다 ^^* 
사실 이거 해봐야지 하다가 마침 Potomac님께서 요청해 주셔서 이제야 합니다 ㅎ 고맙습니다~!

# UIImagePickerController


자, 이제 사진을 불러와 보도록 할게요~
우선은 이미지 피커 이녀석도 자신을 도와줄 델리게이트가 필요로 합니다.
이녀석을 쓰려면 델리게이트가 두놈이 필요한데요, UIImagePickerControllerDelegate와 UINavigationControllerDelegate입니다.
이녀석 화면을 왔다갔다 하려면 네비게이션이 필요해서 그런가봐요 ㅎㅎㅎ
헤더파일에서 이쁘게 적어줍니다.


그리고 MyAnimationViewController의 구현파일로 넘어와서 액션시트 델리게이트 메소드에 이미지피커 컨트롤러 녀석들을 적절히 넣어줍니다.
자세한 설명은 주석처리 되어있으니 참고하시기 바랍니다~
저는 버튼이 정사각형이라 정사각형으로 자르고 싶어서 allowEditing 옵션을 YES로 설정해 주었습니다.


자, 그런데 이렇게 사진을 불러오려고 하는데, 시뮬레이터에 사진이 없습니다...
하............ 멘붕..........ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
하지만 다 방법은 있죠잉~


원하는 사진을 시뮬레이터 화면으로 끌어오면 사파리창이 뜨면서 이미지가 나옵니다.
그럼 이미지를 꾸욱 눌러주시면 아래처럼 액션시트가 등장합니다. 공교롭게도 지난번에 포스팅했던 액션시트가 나오네요 ㅎㅎㅎ
저장해줍니다.


물론 디바이스에서 실행하면 이렇게 사진들이 쭈욱쭈욱 나오겠죠?ㅎ
어쨌든 시뮬레이터건 디바이스건 사진을 선택해 봅시다.


사진을 선택하고 나면 이렇게 나오는데요~ Choose 또는 선택 버튼을 눌러보세요~


네...ㅋㅋㅋㅋㅋㅋㅋㅋ
아무일도 일어나지 않습니다.
왜냐구요? 이미지 피커 컨트롤러도 얼굴마담일 뿐이거든요 ㅋㅋㅋ

그래서 델리게이트에게 무엇을 해달라고 말해야 합니다.
그러면 델리게이트가 뭘 해줄 수 있는지 알아봐야겠지요?
또 개발문서로 놀러가 봅시다 ㅎㅎ
Picker를 닫을 때 델리게이트가 할일이 있네요~


'사용자가 사진이나 동영상을 집어내었을 때 델리게이트에게 말해준다.' 라고 설명되어있네요.
요 메소드를 일단 복사해 둡시다.
그리고 넘어오는 인자중에 info라는 녀석이 있는데 우리는 이녀석이 무엇인지 모르겠습니다.
한번 링크를 클릭해 봅시다.


우리가 원하는 녀석을 찾아봅니다.
네모로 잘린 사진을 원하는데.....
아! 찾았네요~!
UIImagePickercontrollerEditedImage라는 키로 이미지를 불러올 수 있다고 하네요 ㅎ


뭐 이정도 알아냈으니 충분한 것 같습니다.
이제 다시 코딩의 세계로 여러분을 초대합니다 ㅎㅎㅎ

우리는 피커를 띄워줄 때, MyAnimationViewController를 델리게이트로 지정을 해 주었습니다.
그러므로 MyAnimationViewController 구현파일로 와서 델리게이트 메소드를 구현해 줍니다.
아까 복사해 두었죠~? 

 
그리고 실행하여 사진을 선택해 봅니다~
짜잔~ 버튼으로 이쁘게 이미지가 들어왔네요 ㅎㅎㅎ


어때요 흥미로운 내용이었나요?

다음 번에는 뭘 해볼까나요? ㅎ 피드백좀 주세요~_~

다음에 뵈어요~

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

iOS 시뮬레이터의 사진첩에 사진을 넣어봅시다.


시뮬레이터를 실행하고 그냥 아무때나 상관없이 원하는 사진을 시뮬레이터로 끌어다 놓습니다.

그러면 safari창이 뜨는데요, 이미지를 잠시 꾹 눌러줍니다.

그러면 이렇게 액션시트가 뜨는데 거기서 이미지를 저장해 주면 사진첩에 저장이 됩니다.


가끔 정상적으로 저장이 안되는 경우가 있다고 하는데, 다른 이미지로 하시면 잘 될거예요~
jpg나 png 이미지로 시도해 보세요~ㅎ 

↓↓↓도움이 되었다면 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓


Posted by yagom

오늘의 주제

1. UIActionSheet
2. UIActionSheetDelegate 



벌써 스물 다섯 번째 시간입니다.^^

애니메이션은 흥미로우셨나요?ㅎ
이제 슬슬 뭔가 흥미가 오시는지, 아니면 아직도 뭐가 뭔지 잘 모르시는지..ㅋㅋㅋ
피드백이 없네요+_+
이런이런 점이 부족하다 말씀해 주시면 좀 더 발전이 있을 것 같은데..^^;

자 그럼 서론은 이만 마치고 새로운 주제로 넘어가 봅시다~
이번 주제는 UIActionSheet 입니다!

액션 시트가 뭐냐구요? 이제 알게 되겠죠?ㅎ

★ 이번 포스팅은 Potomac님의 요청으로 진행해보았습니다 ^^*
사실 이거 해봐야지 하다가 마침 Potomac님께서 요청해 주셔서 이제야 합니다 ㅎ 고맙습니다~!

# UIActionSheet

UIActionSheet는 사용자의 응답을 받기 위한 하나의 방법입니다.
이제 시작해 보도록 합시다.

자, 이제까지 그래왔던 것처럼 계속 프로젝트 사용합니다~ 절대 귀찮아서 그런거 아녜요~
나중에 이 프로젝트 하나만 보면 아~ 아~ 생각날 수 있잖아요?ㅎㅎ

자, MyAnimationViewController에서 만들어 주었던 움직이는 버튼녀석의 크기를 좀 키워줘 봅시다~ 저는 100*100으로 변경했습니다.


그리고 버튼에 액션을 연결해 줍니다. imageButtonclick이라는 메소드로 연결해 주었습니다.


이렇게 연결이 되었죠? 그리고 우리는 액션시트를 사용하면서 델리게이트도 사용해야 해요~ 왜 그런지는 밑에서 설명해 드릴게요 ㅎ
우선 나 액션시트의 델리게이트가 되겠다! 라고 말해줍니다.


자, 그리고 이제 버튼을 눌렀을 때 동작할 것을 코딩해 줍니다.
설명은 주석으로 달아놨으니 참고하세요^^*


이렇게 코딩하고 실행하면 요로코롬 나옵니다.
이것은 시뮬레이터에서 실행 했을 때의 화면이구요


이 화면은 실제 기기에서 실행 했을 때의 화면입니다.


destructive button과 other button 의 차이 보이시나요?
또한 위에 조건에서 사진이 없는 디바이스에서는 사진찍기 버튼이 나오지 않게 처리가 되었기 때문에 시뮬레이터와 아이폰에서 이렇게 차이가 나게 됩니다.

버튼을 눌러봅시다~ 뭔가 반응이 있나요?ㅎㅎ 없죠~ 없어요~

자, 그러면 우리가 액션시트 델리게이트를 사용해야 할 이유를 여기에서 찾아봅시다.
액션시트 자체는 "얼굴마담" 입니다.
즉, 액션시트는 화면에 보여주기만 하고, 유저가 응답을 하였을 때, 적절히 처리해줄 녀석이 필요한 것입니다. 그녀석이 물론 델리게이트겠지요?
아래 그림을 참고하시면 조금 더 이해가 되실지 모르겠습니다^^...


자, 그럼 이제 액션시트 델리게이트 레퍼런스로 가볼까요?
액션에 응답하기 목록에 메소드가 하나 있네요. 유저가 액션을 취했으니 그에 맞는 응답을 주어야 겠지요~
클릭해 봅시다.


'유저가 액션시트의 버튼을 클릭했을 때, 델리게이트에게 전송한다' 라고 설명이 되어있네요.
일단 메소드를 복사합니다 ㅎ


자, 우리는 아까 액션시트를 만들어 줄때, MyAnimationViewController를 델리게이트로 지정했으니 MyAnimationViewController의 구현파일로 옵니다.
거기서 적절하게 델리게이트를 구현해 봅니다.


이렇게 델리게이트 메소드를 만들어 주고, 원하는 기능을 추가하면 됩니다.

이제 어떤 기능을 넣을 거냐구요?

그건 다음 시간에...!ㅋㅋㅋ

I'll be back!

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

오늘의 주제

1. NSDictionary, NSMutableDictionary
2. NSArray, NSMutableArray



열 한번째 시간입니다.^^

지난 번에는 상속이라는 또 하나의 중요한 개념에 대하여 알아보았습니다.
이번에는 Objective-C에서 가장 흔하고 많이 쓰이는 클래스 중에 자료를 보관할 수 있는 녀석들에 대해 알아보도록 하려고 합니다.

딕셔너리랑 배열인데요, 한 번 봅시다~
 
어휴~ 봄감기 때문에 아주 죽겠네요+_+

# NSArray

배열이란???
C를 배운 분들이라면 배열을 아실겁니다 ㅎ
하지만 여기서 말하는 녀석은 메소드까지 가지고 있는 클래스 입니다. 단순한 자료형이 아니죠~
뭐 약간의 사용개념을 보면 C의 Linked-List(연결 리스트)와 비슷하다고 생각하시면 되겠습니다~!

일단 아래 발로그린 배열을 보시죠..ㅋㅋㅋ

배열입니다.
C에서의 배열과는 달리 이녀석에는 어떠한 객체도 들어갈 수 있습니다.
C의 배열에서는 int형 배열이라면 저장되는 녀석들이 전부 int형이지만, Objective-C의 Array에는 객체 형태라면 무엇이든 들어갈 수 있습니다.

위의 그림의 배열에는 index 0번에 NSString의 객체가 들어가 있고 1번에 NSNumber의 객체가 들어가 있습니다. 그 뒤에 또 어떤 객체들이 들어올 수도 있습니다.

Objective-C에서 이렇게 index번호로 쭈욱 연결되 있는 녀석을 우리는 Array라고 칭합니다.

이와 같은 배열 클래스는 크게 두 가지로 볼 수 있는데요,

처음 생성시 배열을 만들어 주고 수정, 삭제가 불가능한 NSArray.

그리고 생성 후에 추가, 수정, 삭제가 자유로운 NSMutableArray가 있습니다.

NSMutableArray는 NSArray를 상속받아 사용하기 때문에 NSArray의 모든 메소드를 사용할 수 있으며 추가적으로 추가, 수정, 삭제 메소드가 있습니다.
자세한 설명은 저 아래에서 다시 할게요~

잠깐,,! 상속을 모르신다구요? 그럼 알고 넘어갑시다^^
2012/03/28 - [Objective-C] - Objective C <9>. 상속(1)
2012/04/10 - [Objective-C] - Objective C <10>. 상속(2) - 오버라이딩


# NSDictionary

딕셔너리란???

우리말로 하면 사전이라는 뜻이죠~

우리는 사전에서 무엇인가를 찾고자 할때, 해당하는 단어를 찾고, 그 단어를 찾아가서 그에 해당하는 내용을 가져오죠.

여기서의 딕셔너리도 마찬가지입니다.

여러 자료들을 하나의 딕셔너리에 넣어놓고 우리가 원하는 자료를 꺼내오고 싶을 때, 우리가 딕셔너리를 생성할 때 부여해준 key라는 녀석으로 검색을 하여 꺼내옵니다.

여기 아래의 허접한 그림을 함께 보시죠 ㅋㅋㅋ

위의 그림의 딕셔너리에는 세 개의 객체가 들어가 있습니다.

NSString의 객체는 name이라는 key값을 가지고 있고, NSNumber의 객체는 number라는 key값을 가지고 있습니다.
그리고 NSArray의 객체는 array라는 key값을 가지고 있네요.

이처럼 딕셔너리에는 다양한 종류의 객체가 들어가 있을 수 있으며, 각각의 객체는 고유한 key값을 가지고 있습니다.
그렇기 때문에 우리가 사전에서 어떤 단어를 찾아서 그 의미를 해석해 낼 수 있듯이, 컴퓨터는 딕셔너리 안에서 키값으로 원하는 자료를 찾아올 수 있는 것입니다.

즉, Array는 index 값으로 자료를 꺼내올 수 있지만, 딕셔너리는 index값이 없는 대신 key 값으로 자료를 꺼내올 수 있습니다.

딕셔너리도 배열과 마찬가지로 NSDictionary와 NSMutableDictionary로 나뉠 수 있습니다.

두 개의 차이점은 위에서 말씀드렸으니 아시겠죠?ㅎ

이렇게 자료들을 편하게 보관할 수 있는 두 클래스를 알아보았습니다.



그렇다면 이제 예제를 통해 익혀보도록 해요~

# 실습해보기 

새로운 프로젝트를 만들어 봅시다~
요로코롬 만들어 줍니다~


그리고 코드를 예쁘게 넣어줍니다~_~


자, 자세한 설명은 주석을 통해 달아놓았으니 참고하시기 바랍니다.

위에서 디버깅 로그를 보게되면 배열에 두 개의 객체가 들어가 있는 것을 볼 수 있고, 딕셔너리에 배열, 이름, 숫자 이렇게 세 개의 객체가 들어가 있는 것을 볼 수 있습니다.

그런데 배열에서는 우리가 넣어 준 순서대로 들어가서 로그에 찍히는데, 딕셔너리의 로그에는 우리가 집어 넣어준 순서대로 찍히질 않네요+_+

네, 그렇습니다. 딕셔너리는 기본적으로 우리가 넣어 준 순서대로 자료가 정리되어 있는 것을 보장하지 않습니다.
딕셔너리라는 주머니에 객체들이 막 널부러져 있는거죠~^^* 이 또한 배열과 딕셔너리의 차이점이 되겠습니다. ㅎ

자, 위에서 Mutable이 아닌 기본 클래스를 사용해 보았으니 이제 Mutable도 사용해 보아야 겠죠?
코드를 이쁘게 추가해 줍시다.

역시나 자세한 설명은 주석으로 들어가 있습니다~
우리가 처음에 생성해 주었던 배열과 딕셔너리에서 Mutable 녀석들로 객체의 내용을 복사해 온 후에 원하는 내용을 삭제 해 보았습니다.
물론 추가, 수정도 가능합니다~ 그것은 개발문서를 보고 여러분께서 직접 해보기실 권고드립니다^^

디버깅 로그를 살펴보면 우리가 삭제한 내용들이 나오지 않는 것을 확인할 수 있습니다.
이처럼 Mutable을 들어간다면 수정 가능한 녀석들이라고 보시면 되겠습니다.


자, 그런데 제가 위에서 설명드린 것만으로 이렇게 유용하고 좋고 깔쌈하고 이쁜 클래스들을 전부 알 수가 없습니다.
제가 일일히 다 설명을 할 수가 없으니까요^~^

그래서 우리에게는 개발문서가 존재합니다!!!ㅎㅎㅎ
자, 코드에서 alt 키를 누른 상태로 NSDictionary 위에 살포기 커서를 가져가면 밑줄이 생기죠? 클릭해 봅니다~
요렇게 아래 그림처럼 나올꺼예요~ 그렇다면 좀 더 자세히 알아보기 위해 Reference를 눌러봅시다~


이렇게 NSDictionary Class Reference가 나옵니다~
이 개발문서에서는 이 클래스에 관한 거의 모든 내용이 실려있습니다.
살펴보기 부터 시작해서, 가지고 있는 메소드와 변수 등등 모든 것이 나와있는 것이죠.

이렇게 메소드들도 쭈욱 써져 있고 (링크로 되어있기 때문에 누르면 메소드에 관한 자세한 설명을 볼 수 있습니다) 
많은 내용들이 담겨져 있어요. 제가 이걸 다 블로그에 설명 할 수는 없겠죠?ㅎ


딕셔너리만 보면 서운하니까 배열 클래스도 놀러와 봅니다.


이렇게 메소드의 역할별로 카테고리가 나누어져 메소드가 정리되어 있어 쉽게 원하는 메소드를 찾아 볼 수 있습니다~_~

NSMutableDictionary 클래스 레퍼런스를 봅니다.
아래쪽에 Subclassing Note 라고 나와있는 부분이 있는데, 거기 위쪽에 보면  inherits from NSDictionary 라고 써져 있는 것 보이세요?
즉, '이 클래스는 NSDictionary를 상속받았다' 라는 뜻이죠?
그러므로 이녀석은 NSDictionary의 메소드와 변수들을 사용할 수 있다는 뜻이겠죠~ 거기에 추가적으로 수정 기능이 덧붙여 진 녀석이죠^^*


그래서 이녀석의 메소드들을 보면 몇 개 없습니다. 왜냐면 나머지 사용 가능한 메소드들은 NSDictionary에서 찾아볼 수 있거든요^^

이처럼 개발문서를 보면 우리가 알고 싶었던 것 이상으로 자세한 내용들을 찾아볼 수 있습니다~

이 글을 읽었다고 끝나는 것이 아니라 개발문서에서 이런저런 메소드 들을 보고 직접 실습해 보시기 바랍니다~

오늘은 그럼 여기 까~~~~~~~지!

감기때매 헤롱헤롱 @_@

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

오늘의 주제

1. UIViewAnimation 사용해 보기


스물 네 번째 시간입니다.^^

지난 번 포스팅에 이어 이번에도 애니메이션 입니다^^
조금은 다른 애니메이션이예요~ㅎ
지난 번 포스팅을 보고 오셔야 좀 더 좋을 것 같습니다~!
2012/04/16 - [iOS Dev/함께해보기] - iOS개발하기 #23. 애니메이션(UIViewAnimation)<1> 움직이기, 사라지기, 나타나기

자 그럼 출발~~~~~~~~~~~~

추천 한방 꾸욱~~~~~~ ^ㅇ^



# 뷰 애니메이션

자, 계속 사용하던 뷰 컨트롤러를 사용합니다.ㅎ
MyAnimationViewController xib파일로 와서 이번에는 ImageView하나를 끌어옵니다.
UIImageView도 UIView의 하위 클래스 이기 때문에 애니메이션 적용이 가능하겠죠?


자, 이미지를 하나 끌어다 놓겠습니다. 원하는 이미지 하나 끌어오세요~
Finder에서 이미지를 끌어다가 프로젝트 네비게이션 영역으로 끌어옵니다. 요로코롬~


그리고 이렇게 체크를 하시고~ Finish~!


그리고 나서 이미지가 이렇게 추가 되었으면, ImageView의 옵션에서 Image를 선택해 줍니다.


적절하게 크기도 조절해 주시구요~


이렇게 버튼 네 개를 만들어 줍니다. 그런데 오늘은 약간 다른 방법으로 메소드랑 연결할거예요 ㅎㅎ
일단 버튼 네개를 끌어 놓고, 위에 버튼에서부터 속성값에서 Tag를 1, 2, 3, 4 로 차례차례 지정해 줍니다~


그리고 첫 번째 버튼에서 액션을 하나 만들어 줍니다. 이름은 ViewAnimation으로~
제가 급한마음에 저번에도 메소드명을 대문자로 시작해 버렸는데, 여러분은 그러지 마세요~ㅠ_ㅠ 기본적으로 소문자로 시작합니다..!
viewAnimation으로 해주세요~


그 후에~ 두 번째 버튼에서 메소드를 하나 더 만들어서 연결해 주는게 아니고!!!!!!!
먼저 만들어 두었던 메소드로 연결을 해 줍니다! 세 번째, 네 번째 버튼도 마찬가지로 연결해 줍니다~


File's Owner에서 우클릭을 했을 때, 저렇게 연결이 되어있다면 잘 되신거예요 ㅎ


자, 그 후에 이미지뷰의 아울렛을 연결해 줍니다~


자, 드디어 코딩의 시간이..!! 두둥...!!! 저는 애니메이션 시간을 0.5초로 주었는데 여러분들은 1초 정도 주고 해보시길 바라요 ㅎ
자세한 설명은 주석으로 남겨놓았습니다~


애니메이션 커브와 트랜지션을 변경하여 여러가지 애니메이션 효과를 볼 수 있습니다. 트랜지션은 위의 코드에서 네 가지 사용해 보았으니, 커브를 변경해 가면서 차이점을 느껴보세요^^


실행해서 눌러봅시다~ㅎㅎ 여기 블로그에 동영상은 없으니 결과는 완성해 보신 분들만 알 수 있겠죠?ㅎ


오늘은 여기 까~지~

다음에 또 뵙도록 해요^^*

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

오늘의 주제

1. UIViewAnimation 사용하기


스물 세번째 시간입니다.^^

지난 번에는 스크롤 뷰에 대해 조금 알아보았습니다.
스크롤뷰는 정말 많이 쓰이고 있지요~

이번에는 조금 재미있는 애니메이션을 사용해 봅시다~
자, 그럼 긴말 없이 시작해 볼까요 ㅎㅎ

# UIViewAnimation을 사용할 수 있는 녀석들은?

말 그대로 View Animation입니다. 즉, UIView 의 하위 클래스라면 모두 사용 가능하다고 볼 수 있습니다. 다시 말해서, 우리 눈에 보이는 거의 모든 녀석들은 이 애니메이션을 사용할 수 있다는 뜻이기도 합니다^^.

이미지 출처 : 윈플. 님의 블로그

위의 이미지를 보시면 UIView의 하위 클래스들을 볼 수 있습니다. 우리 눈에 보이는 거의 모든 놈들이 하위에 있음을 알 수 있습니다.
그중에 오늘 우리는 UIButton을 가지고 놀아보도록 하겠습니다~!

# UIViewAnimation 

자, 그럼 본격적으로 시작해 보도록 하겠습니다.
새로운 뷰 컨드롤러를 만들겠습니다.
이름은 MyAnimationViewController


요로코롬 만드셨지요?


그다음 뷰의 속성에 들어가서 사이즈를 FreeForm으로.


그리고 사이즈를 요로코롬~ 사실 411이 아니라 362정도? 인데 제가 실수를 했어요 +_+ 계산에 약한 야곰...ㅋㅋ


버튼을 하나 쭈욱 끌어와서 이렇게 사이즈를 맞춰줘요~


그리고 사라지기, 나타나기, 내려가기, 올라가기 버튼을 만들어 줍시다~


그리고 이렇게 아울렛을 연결을 해 줍니다~


이렇게 만들어 졌겠죠?


그리고 동작시킬 버튼들은 액션을 연결해 주어야 겠죠~


두번 째 버튼도 연결~


이렇게 네개의 버튼 모두 연결해 봅시다~


이제 코딩의 시간입니다 ㅎㅎ
저는 이 화면을 SecondViewController에서 Push버튼을 눌렀을 때 나오는 화면으로 해주고 싶습니다.
그렇다면 SecondViewController 구현파일로 와서 MyAnimationViewController 헤더를 import해주구요~


pushButtonClick 메소드를 이렇게 수정을 해 줍니다~ 이제 더이상 임시 뷰컨트롤러는 필요없죠?ㅎ


자 실행을 시켜서 이렇게 화면이 나오나 확인해 봅시다~


잘 나온다면 이제 버튼들이 어떻게 동작해야 할지 코딩해 줘야겠죠?
MyAnimationViewController 구현파일로 와 줍니다.
처음에 애니메이션 옵션들을 설정해주고, CommitAnimations를 하기 전에 무엇을 바꿔줄지를 사이에 껴 넣어주면 애니메이션처럼 동작하게 됩니다.
사라지려면 알파값이 0이 되면 사라지고, 나타나려면 알파값이 1이 되면 나타나겠죠?
내려가고 올라가려면 프레임에서 위치를 변경해 주면 되겠지요 ㅎ


짜잔 실행시켜 보고, 사라지기 버튼 부터 차례로 눌러봅시다~


요로코롬 잘 동작하나요?ㅎ


애니메이션이 움직일 때 천천히 움직이다 빨라지느냐, 아니면 같은 속도로 움직이느냐, 빨리 움직이다 천천히 멈추느냐... 등등의 옵션은 UIViewAnimaionCurve 옵션으로 변경할 수 있습니다. 위에 작성하였던 코드들의 시간을 좀 더 늘리고 커브를 변경해 가면서 어떤 차이가 있는지 직접 확인해 보세요~^^*


자, 오늘 흥미로운 주제였나요?
다음 번에도 애니메이션을 조금 더 탐구해 보도록 할게요...ㅎㅎ
기다려주세용+_+

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom



오늘의 주제

1. 페이지 컨트롤 달기 


스물 두번째 시간입니다.^^

지난 번에 이어서 이번에도 스크롤 뷰를 조금만 더 가지고 놀아봅시다.
이번에는 정말 간단한거..ㅎㅎ

자, 그럼 긴말 필요없이 고고~


# 페이지 컨트롤 달기

세번째 뷰 컨트롤러 위에 페이지 컨트롤을 올려줍니다. 스크롤 뷰 위에 올리는거 아니예요~ 잘 보세요~

그리고 아울렛을 요로코롬 연결 해 줍니다~

이렇게 자동으로 연결이 되었겠죠?ㅎ


ㅎㅎ 구현파일로 와서 코드 한 줄 추가해 줍니다~

실행!!~~~~~~!!!!!!!!!

짜잔~~~~~~~~ 아무것도 안보여ㅋ요ㅋ 물론... 전부 흰색이니까..ㄷㄷ

그래서 페이지 컨트롤 배경색을 검정색으로 바꾸어 줍니다.

실행하면 이제 보이네요 ㅎㅎㅎ 어라? 근데 페이지가 잘못나와요~

페이지 컨트롤은 당연히 0페이지 부터 시작합니다 ㅎ 우리가 저번에 로그를 남겼던 것은 우리가 편한 1부터 남겼기 때문에 잘못나오겠죠?

요로코롬 바꿔 봅니다. 걍 -1만 해줬을 뿐인데...!?

짜잔~ 아주 잘됩니다 ㅎㅎㅎ

이처럼 델리게이트를 이용하면 참 편하게 이것저것 해줄 수가 있어요 ㅎㅎㅎ

다음 번에는 무엇을 가지고 놀아 볼까요?ㅎ



by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom



오늘의 주제

1. 스크롤 뷰 델리게이트 알아보기 


스물 한번째 시간입니다.^^

저번에는 스크롤 뷰 페이징을 한 번 해봤습니다~
그런데 그것만 보면 재미없지용?ㅎㅎ
델리게이트 복습겸 해서 스크롤뷰 델리게이트 연결을 해 봅시다.

자 그럼 출바알~~~~~~~~~~~~


# 스크롤 뷰 델리게이트

델리게이트를 사용하려면 헤더에서 "나 델리게이트임" 이라고 말해줘야 한다고 했었죠?ㅎ

이렇게 이쁘게 말해줍니다.

그리고 나서 스크롤뷰 델리게이트 레퍼런스를 찾아봅니다.

마침 그냥저냥 한 번 해볼만한 녀석이 보이는군요 ㅎ

-scrollViewDidEndDeceleration: 이라는 녀석을 클릭해 봅시다.

설명에는 '델리게이트에게 스크롤 움직임 감속이 끝났음을 말해줌" 이라고 써있네요.

즉, 움직임이 멈춘것을 감지하여 말해준다는 거겠죠.

레퍼런스에서 메소드를 복사해와서 이렇게 써줍니다.

실행하고 페이지들을 넘겨보면 ~~~~~~~~~~~

이렇게 로그가 남습니다~

그럼 이런 델리게이트로 어떤 것을 응용 해 볼 수 있을까요?ㅎ

잘 생각해 보세요^^*

그럼 제가 다음번에 해 볼거를 예상을 해 보실 수 있을지도...?ㅎㅎ




by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom



오늘의 주제

1. 스크롤 뷰 만들어 보기
2. 스크롤 뷰로 페이징 해보기


벌써 스무 번째 시간입니다.^^

지난 번까지 델리케이트와 데이터소스에 대해 알아보았습니다.
정말 중요한 개념이니까 이해될 때 까지 실습해 보아야 합니다.
그런 의미에서 다음 번에는 스크롤뷰 델리게이트도 잠깐 가지고 놀아볼 거예요~

자 그럼 스크롤뷰 한 번 만들어 볼까요?
스따뚜~~~~~~~~~~~~


# 스크롤 뷰 만들기

새로운 뷰 컨트롤러를 만들어 봅시다.

세번째 뷰 컨트롤러를 만듭니다.


자, 스크롤뷰를 쓰윽 끌어와 주시구요~


아시죠?ㅎ 아울렛을 이렇게 연결 해 줍니다!


그 다음에 거꾸로 델리게이트도 연결해 줍니다. 다음 시간을 위하여^^*


이렇게 연결이 되었으면 잘 하신거예요~


그 후에 스크롤뷰 옵션에서 Paging Enable을 체크해 줍니다~


다음에는 이렇게 뷰를 세개 만들어 줘 봅시다. 

원래 있던 뷰에 얹어주는게 아니라 따로따로 세개를 만들어 주는거예요~ 

빨간 네모를 잘 보세요 ㅎ


뷰 세개도 이렇게 아울렛 연결을 해 줍니다.


요렇게 하는거 아시죠?ㅎ


자, 이제 코딩을 해 봅시다~

세번째 뷰 컨트롤러 구현파일로 가 봅시다.

탭바 컨트롤러에 쓰일 타이틀도 정해주고요~

스크롤뷰 컨텐츠 사이즈랑 뷰들의 크기도 스크롤뷰에 맞춰서 이쁘게 설정한 후, 뷰를 스크롤 뷰에 붙여 봅니다.


그 후에 탭바컨트롤러에 붙여줘야 겠지요?

앱 델리게이트로 이동합니다. 

헤더도 데리고 와 주구요~ 뷰 컨트롤러를 만들어서 탭바 컨트롤러에 이쁘게 쏘옥 집어넣어줍니다.


그리고 실행~~


짜잔~ 세번째 탭이 생기고 뷰 컨트롤러도 붙었죠?ㅎ 상하좌우로 화면을 끌어댕겨 봅시다~ 페이징이 되시나요?ㅎ

근데 화면 사이즈에 딱 맞지 않아서 위아래로 움직이네요~ 고쳐봅시다.

스크롤뷰 옵션에서 Size를 FreeForm으로 변경해 주시구요.

사이즈를 411로 해 줍니다.

왜냐구요? 아이폰 세로 크기는 480px이구요 거기서 위에 상태바 20px 그리고 탭바컨트롤러 49px를 빼주면 저 크기랍니다 ㅎㅎ


그리고 스크롤뷰 옵션으로 와서 스크롤러들을 보이지 않게 해 줍니다.


짜잔~ 이렇게 페이징 스크롤 뷰를 완성해 보았습니다~



어때요~ 참 쉽죠잉?ㅎㅎ

다음번에는 스크롤뷰 델리게이트를 가지고 놀아봅시다 ㅎㅎ




by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom

xib에서 오브젝트들 화면에 구성해 놓고 아울렛이나 액션 연결하려면 소스파일로 왔다가 갔다가... 귀찮으셨죠?

한방에 해결해 봅시다 ㅎㅎ

Xcode4에서 이런 좋은 기능을 제공합니다~

일단 우선 Editor모드를 Show the Assistance editor 모드로 변경하면 두개의 소스파일을 동시에 볼 수 있죠?

(캡쳐에서 오른쪽 위에 네모표시가 있습니다)

그 모드에서 xib파일과 헤더파일을 동시에 열어줍니다.

왼쪽 화면에 파일 내용을 띄우고 싶으면 파일을 클릭하면 되고, 오른쪽에 파일 내용을 띄우고 싶다면 Alt+클릭을 하면 됩니다.

그 후 아래 이미지처럼 마우스 오른쪽 버튼 드래그&드랍 또는 Ctrl+드래그&드랍 해주시면 너무나 쉽게 Action 또는 Outlet을 선언해 줄 수 있습니다^^*




↓↓↓도움이 되었다면 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓


Posted by yagom