'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. 아퐁 2012.06.03 16:12  댓글주소  수정/삭제  댓글쓰기

    다음강의는 커스텀버튼 해주시면 안될까요??
    누르기 전 이미지와, 누른후 이미지를 다르게 설정할수있게요
    부탁드릴게요

  2. 2012.06.15 19:12  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.15 19:46 신고  댓글주소  수정/삭제

      개발문서에 보니 파싱 결과값이 에러가 나오는 것은 에러가 발생하였을 때 발생한다고 합니다.
      결과값 출력로그 부분에 error를 로그 찍어보시면 어떤 에러인지 파악할 수 있지 않을까 사료됩니다...^^
      아니면 데이터값이 잘 받아져 오지 않았을 수도 있을 것 같습니다.
      일단 처음에 json 파싱 전의 데이터가 잘 수신이 되는지 먼저 로그를 찍어 확인해 보세요..^^

      워낙 경우의 수가 많다보니 딱 이거다 라고 말씀드리기가 힘드네요ㅠ_ㅠ
      또 안되면 말씀해 주세요~!

    • 2012.06.17 17:55  댓글주소  수정/삭제

      비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.17 21:17 신고  댓글주소  수정/삭제

      메일주소를 남겨주시면 메일 드리겠습니다..^^

  3. 2012.06.20 13:28  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.20 13:54 신고  댓글주소  수정/삭제

      소스 확인해 보았습니다. :-)
      힌트를 드리겠습니다~!
      딕셔너리 키값은 대소문자를 구분합니다..^^*
      제가 또 밥 좋아하는 건 어떻게 아시고 ㅎㅎㅎ
      살짝 기대해 봅니다 ~_~ㅎㅎ

  4. 2012.06.20 15:57  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.20 16:20 신고  댓글주소  수정/삭제

      하하~ 네, 정말 간단한거라 대접(?) 받기도 민망하죠~^^;
      정말 꽉 막히는 부분이 생기면 직접 와서 물어보셔도 돼요~ 물론... 제가 거주하는 지역과는 지하철로 4~50분 정도 소요되는 거리지만...^^;ㅎ 잘 해결하신 것 같아 기쁘네요 ㅎ

  5. 나에게넌 2012.08.13 17:48  댓글주소  수정/삭제  댓글쓰기

    무사 통과합니다..강의 감사합니다.

  6. 2013.01.07 18:22  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.07 21:27 신고  댓글주소  수정/삭제

      안녕하세요 :)
      방문 고맙습니다~
      그 부분은 Daum쪽에서 API가 변경되면 변경 될 수도 있는 부분인 것 같습니다 ^^

  7. 블랙덤보 2013.01.29 12:09  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰선생님 강좌 잘 듣고 있습니다.
    문의 사항이 있어서 댓글달아봅니다.
    잘 구현되지만 검색 시 키보드를 클릭하면 Thread 1: signal SIGABRT 라는 메시지와 함께 다운이 되는데요.
    어떤 문제 일까요? 꼬인 부분이 있는지 다시 프로젝트를 시작했는데도 동일한 증상이 나타납니다.

    항상 강의에 감사드립니다.

    • 블랙덤보 2013.01.29 15:41  댓글주소  수정/삭제

      pageNum 부분을 수정하니 정상 작동이 되는군요....
      강좌 감사드립니다^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.30 08:00 신고  댓글주소  수정/삭제

      선...선생님까지야;;;ㅎ

      들러주셔서 정말 고맙습니다 ㅎ

      해결되셨다니 다행입니다.ㅎ 빨리 답변드리지 못해서 죄송합니다 ㅠ

  8. Favicon of https://gogodao.tistory.com BlogIcon rustyDAO 2013.02.26 15:42 신고  댓글주소  수정/삭제  댓글쓰기

    야곰님 오랜만에 인사드리네요 ^_ㅠ
    몸은 많이 괜찮아 지셨어요?? 빨리 나으셨으면 좋겠어요 ㅠㅠ

    혹시, c#으로 웹서비스 만들어 보셨어요?? -_-.... c#으로 웹서비스 함수 만들고,, 야곰님이 다음 api 호출 하셨던 처럼

    매개변수 이런것들 맞춰서 호출하는데 안되네요 궁시렁궁시렁.......ㅋㅋ 윈도우에서 웹함수 테스트할때는 제이슨 형식으로

    잘 되는데 으흐,,,,,,,,, 혹시 해보신적 있으신가여...? ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.28 10:22 신고  댓글주소  수정/삭제

      음...
      이 저주받은 몸뚱아리가 나아질 생각을 잘 안하네요 ㅠㅠ
      글쎄요... 그 방법은 제가 사용해보지 않아서 딱 어떻게 하라고 말씀을 드리기가 힘드네요 +_+ 죄송합니다..ㅠ

  9. 딴또 2013.03.22 15:19  댓글주소  수정/삭제  댓글쓰기

    감사합니다.

  10. mmbp 2013.04.26 17:47  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    NSDictionary *bookRequestDic = [[NSDictionary alloc]initWithObjectsAndKeys:[searchBar text], @"key", @"book", @"requestKind",[NSNumber numberWithInt:1], @"pageNum", nil];

    이렇게 고쳤는데도, Thread 1:signal SIGABRT 나오면서 실행이 되지 않습니다 ㅠㅠ

    log창에는 *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<SearchViewController 0x9176a40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key refreshButtonClicked.'
    *** First throw call stack 이렇게 나오는군요.으앙 해결책을 모르겠습니다ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.29 09:01 신고  댓글주소  수정/삭제

      NSDictionary *bookReqeustDic = @{ [searchBar text], @"key", @"book", @reqeustKind", [NSNumber numberWithInt: 1], @"pageNum"}; 으로 바꿔보세요..^^

  11. mmbp 2013.05.03 12:33  댓글주소  수정/삭제  댓글쓰기

    며칠 다른 일 때문에 못 보았습니다.
    NSDictionary *bookRequestDic = @{[searchBar text],@"key",@"book",@"requestKind",[NSNumber numberWithInt:1], @"pageNum"};
    이렇게 바꿨는데, Expected ';' at end of declaration 이라고 나오면서 build failed나와요 ㅠ

    NSDictionary *bookRequestDic = @[[searchBar text],@"key",@"book",@"requestKind",[NSNumber numberWithInt:1], @"pageNum"];
    이렇게 바꾸면 빌드는 되는데, 시뮬레이터에서 ViewController 에서 Search 버튼 누르면 종료되어 버립니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.03 13:06 신고  댓글주소  수정/삭제

      iOS 버전업이 되어서 맞지 않아 동작하지 않는 것일 수도 있는데요...
      제가 원본 소스를 잃어버려서 지금 테스트를 해 보기가 조금 거시기해요 ㅠㅠ

  12. 김현수 2013.07.05 14:56  댓글주소  수정/삭제  댓글쓰기

    저기...
    테이블뷰 인터페이스빌더에서 생성도 안했는데
    나오는건 뭐죠;;??
    쭉 읽어보고 왔는데
    테이블뷰를 어찌불러오는지 설명이없네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.05 15:17 신고  댓글주소  수정/삭제

      UISearchDisplayController는 검색결과가 테이블뷰에 나오는 컨트롤러이기 때문에 따로 테이블뷰를 생성하지 않아도 나오게 됩니다.

      그래서 TableViewDelegate와 DateSource같이 UISearchDisplayController에서 delegate와 dataSource를 가지고 비슷한 처리를 해주죠~

  13. 2013.07.24 14:45  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.25 13:24 신고  댓글주소  수정/삭제

      - (void)searchBarSearchButtonClickedUISearchBar *)searchBar
      메소드는 서치바 델리게이트 메소드로서, 서치바에 검색 버튼을 누르면 동작하는 메소드입니다.
      즉, 검색 버튼을 누르면 위의 메소드가 실행이 되구요,
      이전에

      - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
      메소드는 서치바에 우리가 글자를 입력할 때 호출되는 메소드입니다.

      즉, 우리가 검색창에 텍스트를 입력하면
      - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
      메소드가 호출되고, 그 안에서 검색 준비를 위하여 readyForRequestWithDictionary메소드가 호출이 된 후, 준비가 끝나면 스레드를 통하여 requestSearch 메소드가 호출이 되는거지요.

      델리게이트의 동작방식에 대해 잘 이해가 안가신다면 제 블로그에 포스팅이 있으니 참고하시면 되겠습니다 :)

  14. 프로그래밍구 2013.12.06 02:02  댓글주소  수정/삭제  댓글쓰기

    질문있습니다.

    현재 뷰디드언로드 메세드가 사라졌는데
    쓰레드 관련해서도 메모리해제에 전혀 개발자가 개입하지안해도되나요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.12.08 23:53 신고  댓글주소  수정/삭제

      안녕하세요, :)
      프로퍼티만 잘 설정해 주시면 큰 문제는 되지 않을거예요.
      좀 꺼림칙하다 싶으시면 dealloc 메소드를 오버리드해서 구현하시면 됩니다. 다만, [super dealloc] 은 안써주셔도 되구요 ㅎ

  15. 손현 2014.04.04 10:24  댓글주소  수정/삭제  댓글쓰기

    뒤늦게나마 뒷북쳐서 운영자님 죄송합니다..

    질문할게 있어서요.

    코딩을 다 끝냈는데..

    이부분에서 계속 터집니다..ㅜㅜ

    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:&error];

    -------------------------------------------------------------------------------
    *여긴 오류메세지..ㅠ입니다.

    2014-04-04 10:13:34.804 Parser[988:4c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'

    *** First throw call stack:

    (
    0 CoreFoundation 0x017ee1e4 __exceptionPreprocess + 180

    1 libobjc.A.dylib 0x0156d8e5 objc_exception_throw + 44

    2 CoreFoundation 0x017edfbb +[NSException raise:format:] + 139

    3 Foundation 0x012b3bd2 +[NSJSONSerialization JSONObjectWithData:options:error:] + 67

    4 Parser 0x00002bff -[ViewController requestSearch:] + 847

    5 Foundation 0x011c4a07 -[NSThread main] + 76

    6 Foundation 0x011c4966 __NSThread__main__ + 1275

    7 libsystem_pthread.dylib 0x01f2e5fb _pthread_body + 144

    8 libsystem_pthread.dylib 0x01f2e485 _pthread_struct_init + 0

    9 libsystem_pthread.dylib 0x01f33cf2 thread_start + 34
    )

    libc++abi.dylib: terminating with uncaught exception of type NSException

    (lldb)

    계속 이런 오류가 뜨는데 xcode5로 만들고있습니다.

    뭐가 문제인지 모르겠어요.. response가 계속 nil 값이던데.. 그래서인지..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.04.04 15:50 신고  댓글주소  수정/삭제

      response가 nil로 오면 딕셔너리로 변환을 할 수 없기 때문에 익셉션 에러가 발생합니다. response가 nil이 왔다면 요청이 잘못되었을 것 같습니다.


오늘의 주제

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

댓글을 달아 주세요

  1. 생초보 2012.05.30 19:40  댓글주소  수정/삭제  댓글쓰기

    와우~ 드디어~ 올것이 왔군요~ 감사합니다

  2. 나에게넌 2012.08.13 16:21  댓글주소  수정/삭제  댓글쓰기

    쉬어가는 코너2 군요..긴장하며 다음장으로...

  3. 어려워 ㅠㅠ 2013.03.18 22:44  댓글주소  수정/삭제  댓글쓰기

    친절하고 자세한 강좌 잘 보고 있습니다.
    항상 감사하구요
    건강하세요 ^^

  4. 딴또 2013.03.22 14:19  댓글주소  수정/삭제  댓글쓰기

    오~~~ 기대감에서 오는 이 짜릿함은 뭐지??? ㅋㅋ

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

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

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

#pragma mark 

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

한 번 보여드릴게요~

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


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


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



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


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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



Posted by yagom

댓글을 달아 주세요

  1. berry 2012.06.17 16:26  댓글주소  수정/삭제  댓글쓰기

    오랜만에 들렀습니다!!
    사실 ... 제가 하고있는일을 검색하다가
    여기군하고 링크를 눌렀는데
    야곰님 블로그였네요 ㅎㅎ
    시간이 빨리 나아져서
    야곰님껄 보면서 스터디를 하고 싶은데
    아직 시간이 빠듯해서 그렇게 하질 못하고있군요 !!!
    다른거보다가 이것도 유용한거같아서 한번 읽고 갑니다 ㅎ

  2. 나에게넌 2012.08.13 15:56  댓글주소  수정/삭제  댓글쓰기

    간만에 쉬운 내용이라 쭈욱 훓어보고 지나갑니다..

  3. Favicon of http://blog.naver.com/rbfwmqwntm BlogIcon C. 탄소 2012.10.08 20:28  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다. 도대체 뭐하는건가 싶어 찾아봤는데 참 편하게 정리해주네요ㅎㅎ
    (이전까지는 메서드 별로 주석 달아서 관리하고 있었습니다...
    클래스 메서드는 // Class Methods 같이... ㅎㅎ)


오늘의 주제

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. 인절미후후 2012.06.26 16:03  댓글주소  수정/삭제  댓글쓰기

    활용적인 측면에서는 정말 중요한 내용이라고 생각되지만 구현하는 방법에서 약간 어려운것 같기도 하네요
    어렵다기보다 어디에 활용해야 할지 잘 모르겠다는 뜻이에요.

    데이터의 전달 방법적인 측면도 있지만 해당 액션을 등록해놓고 리시버가 그 액션을 받으면 트리거처럼 이벤트를 발생시켜주는 것 같은 느낌도 드네요 . 여러글을 읽다보니 제 글도 정신이 없네요. 잘 읽고 갑니다.

    설정내용을 저장하는 방법처럼 계속 그 값을 보관해서 여러 뷰에서 사용할 수 있는 방법과는 다른것 같네요.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:21 신고  댓글주소  수정/삭제

      어디에 활용해야 할지는 제가 오늘 달아드린 댓글 중에도 있겠네요 :-)

      물론 계속 다음 또 다음 포스팅을 읽어가다 보시면 어디서 어떤식으로 써야 할지 조금은 느낌이 올 수 있을 것 같습니다 ^^* 중간중간 제가 사용해 보았거든요..ㅎ

      음... 해당 액션을 등록해 놓고 특정 이벤트가 발생하면 리시버에게 해당 액션을 명령하는 것이 더 맞다고 볼 수 있을 것 같습니다... :-) 물론 보는 관점의 차이와 사용 상황에 따른 차이는 있겠습니다만...^^

      마지막줄에 하신 말씀은 잘 이해를 못하겠네요 ㅠ_ㅠ

      불같은 덧글 고맙습니다...ㅎㅎ

  2. 인절미후후 2012.06.28 15:02  댓글주소  수정/삭제  댓글쓰기

    저의 미천한(읽기 힘든) 댓글에 신성한 댓글 달아주셔서 감사합니다.

    마지막 댓글은 어플내부에 옵션이 있는것들 있잖아요 설정값을 저장해서 가져다 쓰는 경우를 얘기한 것입니다.
    어플들 보면 옵션같은 .. 아직 옵션을 제대로 구현해보지는 않았지만 파일/디비 에 저장해놓고 불러다 쓰는게 맞겠죠.
    아니면 다른 여러 방법이 있기도 하겠지만..

    여러뷰에서 사용한다는 말이 좀 오해를 부른것 같네요.

    제가 요새 정신이 없다보니 .. 글쓸때 한번더 생각해야 겠어요..
    차가운 머리를 하고 글을 적어야 하는데;;

    커뮤니케이션은 개발자의 중요 스킬중 하나라고 생각해요..(패시브)
    야곰님처럼 불같은 감성과 냉철한 이성을 가지고 글을 적으려고 노력하겠습니다!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.28 15:42 신고  댓글주소  수정/삭제

      어이쿠 무슨 말씀을 그리 하십니까...ㅎㅎ
      물론 설정내역 저장은 파일저장 또는 서버저장으로 하는 것이 맞겠죠 ^^
      저도 냉철하지 못해서 자주 실수하곤 합니다 ㅠ_ㅠ
      냉철한 이성과 불같은 감성을 갖추어야 하는데 아직 너무 부족합니다..ㅠ
      어떤 직종이든간에 커뮤니케이션은 정말 중요한 것 같습니다 ㅎ
      항상 덧글 이렇게 주셔서 정말 고맙습니다 :-)
      소통에 게을리 하지 않겠습니다. ㅎ

  3. Sio 2012.07.19 17:52  댓글주소  수정/삭제  댓글쓰기

    확실히 이전 강의인 프로토컬과 델리게이트 쓸때보다 코드도 적고
    간단해 보이기는 하는데 ....
    ㅋㅋ 아직 지식이 부족해서 그런지 어디다 써먹이야 할지는 감이 안오네요
    노티피케이션 관련 소스 같은것도 더 찾아서 뭐에 써먹었었나 봐야겠어요 ㅜㅜ ㅎㅎㅎ
    잘보고 갑니다~~!!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.20 09:20 신고  댓글주소  수정/삭제

      나중에는 아주 유용히 잘 활용하실 날이 올거라 생각합니다 ㅎㅎㅎ
      다음 번에 개발하다가 문득 아! 이런게 있었지! 라는 생각이 들 때가 올지도 모릅니다 ㅎㅎ

  4. 나에게넌 2012.08.13 16:00  댓글주소  수정/삭제  댓글쓰기

    위 서문에 Notification 쓰면 수고가 줄어드는 만큼 위험도 도사린다고 하셨는데..
    어떤 위험이 다가올런지요 ㅎㅎ

    그럼 차라리 delegate를 쓰는게 좀 더 안전한 방법일까요??

    위 댓글처럼 시기적절하게 활용할 수 있다면 코딩실력이 한단계 발전할텐데요.. 그게 어렵네요 ㅎ

    강의 감사합니다..

  5. Favicon of http://koreawolf.tistory.com BlogIcon 안승진 2012.08.17 14:03  댓글주소  수정/삭제  댓글쓰기

    정말 이해하기 쉽게 설명하셨네요.+_+/
    실습하기 전까지만 읽어도 이해가 되어었습니다.. +_+
    다른 사이트 글보다가 이게 뭐 이랬는데 하하;;;

    감사합니다.

  6. 김다오 2013.02.19 18:34  댓글주소  수정/삭제  댓글쓰기

    야곰님 ~ 정말고맙습니다 ㅋㅋㅋㅋ
    정말 유익하네요 ㅋㅋㅋㅋ

  7. 바른생활 2013.04.08 16:43  댓글주소  수정/삭제  댓글쓰기

    어우~~~ 감사합니다.
    C++로 3D를 하는데, 모바일 쪽에서 뭐좀 해볼라치면 자꾸 objective-c가 발목을 잡네요.
    막막했는데 많은 도움이 되었습니다.
    감사합니다.

  8. 에고공 2013.05.08 13:26  댓글주소  수정/삭제  댓글쓰기

    노티피케이션 알아볼려고 돌아다니다가

    http://seonho.blogspot.kr/2012/10/ios-nsnotificationcenter.html
    이 블로그에 위 본문 내용의 스샷이 고대로 들어가있고,
    어떠한 언급도 없는것 같아서.. 알려드려요.
    뭐 나쁜의도겠냐만은..
    그래도 아셔야 할 것 같아서..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.08 17:26 신고  댓글주소  수정/삭제

      안녕하세요 에고공님 :)
      관심 가져주셔서 정말 고맙습니다 ㅎ
      의도가 어찌되었든 말없이 가져가는 것은 옳지 못하지만, 웹이라는 공간의 특성상 어쩔 수 없는 현상이기도 한 것 같습니다 ^^...
      좋게 좋게 쓰인다면 크게 나무랄 것도 없지요..^^

  9. 2013.05.20 21:40  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  10. dklee7206 2013.05.21 13:47  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 항상 감사히 잘 보고 있습니다.

    ViewController.m에서
    -(void)setLastAddressWithNoti:(NSNotification *)noti {
    NSDictionary *notiDic = [noti userInfo]; ******< 이걸 만들어주고..
    NSString *lastAddress = [notiDic objectForKey:@"lastAddress"];
    NSLog(@"lastAddress = %@",lastAddress);
    [lastAddressLabel setText:lastAddress];
    }

    ViewControllerforWeb.m에서도


    //noti를 위한 딕셔너리 생성 후 기본 노티피케이션 센터에 노티피케이션 전달
    notiDic에 넣어주는데..>******* notiDic = [[NSDictionary alloc]initWithObjectsAndKeys:lastAddress,@"lastAddress",nil];
    NSLog(@"notiDic : %@", notiDic);


    두 부분이 헷갈리고 이해가 잘 안되서요..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.21 18:07 신고  댓글주소  수정/삭제

      ViewController에서는 노티피케이션에 싣고 보낼 데이터(userInfo)를 만들고 노티피케이션을 쏩니다.

      그러면 ViewControllerForWeb에서 노티피케이션을 받고 전달된 데이터(userInfo)를 가져오는 것입니다.

      노티피케이션에 포함되어 전달되는 데이터는 Dictionary 형태가 되어야 하며, Dictionary데이터는 userInfo라는 이름으로 들어옵니다.

      노티피케이션은 특정 상황에서 발송을 할 수 있고, 데이터도 함께 보낼 수 있기 때문에, 특정 상황이 발생했을 때 여러 수신자가 노티피케이션을 받아서 일괄적으로 처리를 할 수 있기 때문에 유용합니다. :)

      윈도우에서는 메세지와 같은 역할이라고 볼 수 있겠습니다...(아마도?)

  11. dklee7206 2013.05.21 21:55  댓글주소  수정/삭제  댓글쓰기

    클래스 중에


    -(void)setLastAddressWithNoti:(NSNotification *)noti {
    NSDictionary *notiDic = [noti userInfo];
    NSString *lastAddress = [notiDic objectForKey:@"lastAddress"];
    NSLog(@"lastAddress = %@",lastAddress);

    [lastAddressLabel setText:lastAddress];

    }

    여기서 [noti userInfo]; 이게 뭘 의미하는지

    [[NSNotificationCenter defaultCenter]postNotificationName:@"setLastAddress" object:nil userInfo:notiDic]; 여기서
    userInfo:notiDic이랑 위에거랑 같이 혼동이 되서 미치겠네요.. ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.21 23:15 신고  댓글주소  수정/삭제

      변수명이 같아서 혼동이 되시는 것 같은데요.
      postNotification이라는 메소드는 노티피케이션을 송출하는 메소드입니다.

      즉, userInfo로 세팅될 딕셔너리가 notiDic이라는 딕셔너리라는 뜻이구요,

      받는 쪽에서는 노티피케이션에 실려온 userInfo를 꺼내는 것에 불과합니다.

      보내는 쪽과 받는 쪽의 notiDic 변수명을 각각 다르게 하더라도 똑같이 동작을 합니다.

      저것은 객체 자체가 움직이는게 아니고 포인터변수(즉, 객체의 주소)만 옮겨주는 것이기 때문에 변수명은 큰 의미가 없습니다.

      [noti userInfo]를 사용하는 이유는 수신된 NSNotification의 객체인 noti에서 userInfo인 딕셔너리를 꺼내와야 우리가 전달된 데이터를 활용할 수 있는 것이기 때문이죠.

      NSNotification 문서를 보시면 userInfo에 대해 나와있을 거예요.

      저도 처음에 헷갈렸던 부분이기도 합니다 ^^;

      예제 말고 스스로 다른 예제 프로젝트를 만드셔서 직접 여러개 만들어서 노티피케이션을 송출해보고, 받아보는 것을 해보시면 차츰 이해가 되실 거라고 믿습니다 :)

    • dklee7206 2013.05.23 14:20  댓글주소  수정/삭제

      자세히 설명해주셔서 감사합니다 ^^ 이해가 잘 되었습니다.

  12. 2013.05.21 22:02  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.21 23:08 신고  댓글주소  수정/삭제

      노티피케이션은 수신하고 있는 객체들이 일괄적으로 어떤 일을 처리하고자 할 때 주로 쓰입니다.
      그러니까 노티피케이션을 받는 다른 객체들이 무언가를 실행하기 원할 때 노티피케이션을 송출하게 되는 것이지요.

    • dklee7206 2013.05.23 14:21  댓글주소  수정/삭제

      설명 감사드립니다!

  13. Favicon of http://fldragonn.blog.me BlogIcon 미르룡 2013.07.08 10:37  댓글주소  수정/삭제  댓글쓰기

    ^^ NotificationCenter를 사용할 일이 있었는데 역시 yagom님의 글을 보니 한 번에 이해가 됩니다.
    가장 중요한 핵심을 간단한 그림으로 설명해 주셔서 큰 도움 받았습니다. 항상 좋은 정보 잘 보고 있어요.

  14. nely 2014.03.13 16:55  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다~~~


오늘의 주제

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. 생초보 2012.05.25 17:37  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님~~ 생초보에용

    이것저것 혼자 공부중인데 딱 막히는게 한가지 잇어서,,,
    염치불구하구 다음강좌는 요런거 좀 다뤄 주시믄 어떻실란지요ㅡㅡ;;

    거진 며칠째 헤메고잇는게,, NSXMLParser 이녀석입니다

    월 500원짜리 웹호스팅도 가입해서 xml 파일 올려놓고 테이블뷰에 뿌려주려고
    구굴링, 맥부기 모두 뒤져서 코딩 해보고 있는데,,,,,완전 멘 붕 상태입니다..

    시간 나실때 부탁드려요~

    감사합니다




    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.25 17:58 신고  댓글주소  수정/삭제

      ㅎㅎ 고녀석 조만간 하려고 했습니다~
      일단 테이블 뷰 먼저 포스팅 나가고 고거 바로 합니다~ㅎㅎ
      조금만 기다려 주세용~_~

  2. 인절미후후 2012.06.26 15:46  댓글주소  수정/삭제  댓글쓰기

    아 정말 어렵네요 중요한 개념이고 자주 보이는건데
    잘 알아야 응용을 할텐데..
    두어번 더 봐야될거 같습니다.

    프로토콜, 데이터소스, 델리게이트,
    프로토콜은 뭐뭐 쓰겠다고 선언해주는 것이고,
    데이터소스는 써야할 데이터를 셋팅해주는 애고,
    델리게이트는 사용할 때 가져다 쓰는거고..자바에서의 인터페이스라고도 하던데

    아 프로토콜이랑 델리게이트 헷갈리네요.. ㅎㅎ 사용할때는 델리게이트, 선언시는 프로토콜 이라고 생각하고 있습니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:18 신고  댓글주소  수정/삭제

      이녀석들은 중요한 수준 그 이상입니다~!

      델리게이트, 데이터소스는 프로토콜의 일종이라고 생각하시면 됩니다.

      프로토콜은 객체간에 서로 약속한 메소드를 호출 할 수 있게 해 주는 역할이 되겠습니다.

      데이터소스는 약속된 메소드를 통하여 지정된 데이터를 가져올 수 있으며, 델리게이트는 특정 상황에 대한 반응을 메소드를 통해 구현할 수 있도록 해 준것입니다.

      덧글을 제가 써놓고도 무슨말인지 알쏭달쏭 하네요 =ㅅ=

      여하튼 정말 중요한 것 이상의 내용임에는 틀림없습니다.

      꼭 이해하고 숙지하셔야 할 내용입니다~!

  3. Sio 2012.07.19 17:29  댓글주소  수정/삭제  댓글쓰기

    으... 이건 뭔가 많이 사용해 봐야 아! 이거구나~ 라고 확실히 알것 같네요 ㅎㅎㅎ
    오늘 배울 것들로라도 이것 저것 응용해 봐야겠습니다 ㅜㅜ ㅋㅋ
    그럼 다음 강의로 고고~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.20 09:17 신고  댓글주소  수정/삭제

      네, 정말 기본적인 개념이지만 처음엔 참 이해하기 어려운 내용중에 하나일 것입니다.
      힘내세요^^*
      천천히 오세요~
      너무 빠르면 탈나요 ㅎㅎㅎ

  4. 나에게넌 2012.08.13 15:12  댓글주소  수정/삭제  댓글쓰기

    폭풍 흡입!!! 완전 중요한 내용 감사합니다..

  5. Dklee7206 2012.10.17 00:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.. 좋은글 많이 보고 있습니다.
    많이 어렵네요... ㅠㅠ 왜 써야하는지 부터도 잘 모르겠고..
    이유같은것 좀 보충해서 알려주시면 많이많이 감사할께요~

    내일도 좋은 하루 되세요~

  6. hyung 2012.11.30 11:44  댓글주소  수정/삭제  댓글쓰기

    오늘은 델리게이트를 공부하겠어요! 이제 회사일 따윈 모름 ㅋㅋㅋㅋㅋㅋㅋ

  7. Favicon of https://lifeones.tistory.com BlogIcon Hue Kim 2013.03.20 14:49 신고  댓글주소  수정/삭제  댓글쓰기

    너무 좋은 자료들 감사합니다.

    포스팅 하느라 시간도 엄청오래걸리셨을텐데..

    고생많으셨어요..ㅠㅠ 저도 비슷한거 해볼려다..하나 작성하고 포기했었는데..;;..

    대단하십니다!!!

  8. dklee7206 2013.05.13 11:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 따라해 보고 있는데요. ViewControllerforWeb.m
    [self changeFuncButton: UIBarButtonSystemItemStop]; 이부분에서 에러가 나서요
    메소드 구현된 부분 있을까요?

  9. dklee7206 2013.05.14 17:20  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 역시나 이해가 안됩니다~ ㅠㅠ
    델리게이트 선언해준 이후부터 조금만 더 자세히 부연 설명 부탁드려요.. 주석으로 설명 해주셔도 되구요..
    감사합니다~


    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.14 19:30 신고  댓글주소  수정/삭제

      어떤 부분이 잘 이해가 안가시는지요...?ㅠㅠ
      http://blog.yagom.net/179
      이쪽 참고해 보셨나요? :)

    • dklee7206 2013.05.16 10:47  댓글주소  수정/삭제

      네 안녕하세요. 개념적으로 약해서 이해를 못하고 있는것 같습니다..
      따로 공부해보고 궁금한점 질문 드릴께요..

    • dklee7206 2013.05.16 16:26  댓글주소  수정/삭제

      프로토콜 구현하는쪽과 받아들이는 쪽 이런 부분이 구분이 잘 안되고 컨트롤러 각각의 역할이 뭔지 개념이 잘 안잡힙니다. ㅠㅠ

  10. dklee7206 2013.05.18 11:21  댓글주소  수정/삭제  댓글쓰기

    델리게이트 프로토콜은 꼭 ViewControllerForWeb에서 선언해주어야 하는건가요?
    그리고 델리게이트로서의 역할을 하기 위해서 ViewController.h에서 메소드와 여러가지를 구현해줘야 한다고 설면해주셨는데 서로의 관계가 잘 이해가 되지 않는데 조금만 더 설명해주시면 감사하겠습니다.

  11. dklee7206 2013.05.19 18:10  댓글주소  수정/삭제  댓글쓰기

    @property (weak, nonatomic)id<viewControllerForWebDelegate>delegate;
    이 부분은 왜 만들어주는 건지 잘 모르겠습니다..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.20 10:15 신고  댓글주소  수정/삭제

      답변이 늦어져 죄송합니다 ^^;
      프로토콜은 음..... 일종의 서로간의 통신이죠?

      프로토콜은 꼭 해당 뷰컨트롤러에서 생성해주지 않아도 됩니다.
      하지만 그 프로토콜을 사용하려면 프로토콜을 사용하고자 하는 컨트롤러에서 내용을 알고 있어야 하므로 구현된 소스파일이 import되어야겠지요 :)

      ViewController가 ViewControllerForWeb의 대리인이 되려면, 해당 프로토콜을 충족시키는 메소드 등이 필요합니다.
      @required에 선언된 메소드가 ViewController에 꼭 구현이 되어있어야 하구요, @optional에 선언된 메소드는 말그대로 있어도 없어도 됩니다.

      그리고 @property (weak, nonatomic)id<viewControllerForWebDelegate>delegate;

      의 의미는 viewControllerForWebDelegate 프로토콜을 따르는 id형의 delegate라는 이름을 가진 변수를 property선언해 주겠다는 의미입니다.

      그래서 이 컨트롤러의 대리인 역할을 할 객체가 자신을 이 프로퍼티에 세팅하게 되는거지요.

      iOS에서 기본적으로 delegate를 달고 있는 녀석들 (UITableView 등)의 레퍼런스 도큐먼트 보시면 delegate가 어떻게 선언되어 있는지 확인해 보세요 ㅎ

      id는 어떤 객체든지 가리킬 수 있는 포인터 형이구요.

      꼭 이 예제가 아니더라도 몇 가지 메소드를 더 만들다 보시면 감이 오실거예요^^;

      보고 이해가 안되면 직접 프로젝트 만드셔서 이것저것 해 보시면 더 빨리 이해되실 거예요 ㅎ

      더 설명이 필요하시면 말씀해 주세요~

  12. Favicon of http://ohsdsl@naver.com BlogIcon hahahaha 2013.09.11 14:58  댓글주소  수정/삭제  댓글쓰기

    storyboard를 이용하여 사용하고 있습니다.

    ㅠㅠ Label이 주소로 안바뀌어서요..

    web 버튼 클릭해서 갈떼 delegate:self 를 어떻게 해야할지 모르겠네요..
    이부분 말고는 다 똑같이 진행한 상태입니다.

    아니면 다른 문제가 있을가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.11 20:18 신고  댓글주소  수정/삭제

      ViewControllerForWeb.h 파일에서 delegate 선언부에서 id 앞에 IBOutlet 이라고 써 준 후 저장하시고
      스토리보드에 가셔서 아울렛 연결해 주시면 됩니다.

    • Favicon of http://ohsdsl@naver.com BlogIcon hahahaha 2013.09.12 10:55  댓글주소  수정/삭제

      outle을 어디로 연결을 해야하는건지 궁금합니다.

      지금 스토리보드상에서 아울렛이 연결되는데가 없어서요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.12 14:31 신고  댓글주소  수정/삭제

      일단 스토리보드를 쓰지 않고 해 보세요..

      스토리보드는 앱 구조와 동작 흐름을 익힌 후에 사용하여도 늦지 않습니다...

      스토리보드 절대 쉬운게 아녜요

  13. 안녕하세요? 2013.11.04 23:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 델리게이트에 대해 검색하다가 고수님의 의견을 여쭙고자 들리게 되었습니다. A클래스에서 B클래스에 있는 b메소드를 호출한다고 할때, 예전에는 classB *B = [[classB alloc]init ]; 한다음, [B b]; 이렇게 호출했었거든요. 그런데 B클래스의 특정한 메소드의 경우 호출은 되는데 A의 Array를(이 Array는 Plist파일에 저장한 다음 해당 위치에서 불러옴) 불러올때 Array값이 null 로 들어오더라구요. B클래스의 다른 메소드에서는 Array값을 제대로 받아오는데 왜 특정 메소드에서만 받아오지 못하는지 도무지 원인을 알 수가 없었습니다. 그러다가 해당 메소드를 Delegate선언해서 쓰니까 값을 제대로 받아오더군요. 혹시 원인을 알 수 있을까요? 그리고 classB *B = [[classB alloc]init ]; [B b]; 이렇게 Delegate선언 없이 쓸때의 문제점은 무엇이 있는지 알려주시면 정말 감사하겠습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.11 09:42 신고  댓글주소  수정/삭제

      안녕하세요?
      alloc, init 한다는 것은 새로운 객체가 생성되는 것이기 때문에 클래스 이름이 같더라도 서로 다른 녀석들입니다.
      포스팅 중 클래스와 객체에 대하여 보시고 조금 더 생각해 보시면 알 수 있을지도 모르겠습니다 :)
      방문해 주셔서 고맙습니다!

  14. 감사합니다! 2014.03.05 11:35  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다.
    해당 강의로 프로토콜을 거의 이해하게 되었습니다.
    책은 봐도 잘 모르겠던데 님 강의를 한번 보게되니 바로 이해하게 되네요.


오늘의 주제

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. 초보 2012.05.29 20:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님
    블로그 잘 보고 있습니다

    위 예제를 따라했는데 피커뷰에 물음표도 안 나타나고 노래 제목도 안 나타나요 ㅠ.ㅠ

    도와 주세요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.29 23:28 신고  댓글주소  수정/삭제

      1차적으로 두 번째 그림에서 피커뷰 데이터소스와 델리게이트로 선언을 해 주었는지, 그리고 2차적으로 selectAudioName 메소드에서 델리게이트와 데이터소스를 잘 세팅해 주었는지 확인해 보세요.
      상황을 정확히 모르니 제가 대답해 드리기가 참 애매하네요^^;

  2. 인절미후후 2012.06.26 15:25  댓글주소  수정/삭제  댓글쓰기

    피커뷰 강좌 잘보았습니다.
    역시 문제를 내면 답글이 적어지나봐요 ㅎㅎㅎ
    저는 대강대강 해보았습니다.

    그냥 이러면 되겠지...하고 연결만 ㅎㅎ
    저 피커뷰안에서 코팅되는 애도 인디케이터라고 하는군요 셀렉트 인디케이터 새로운 인디케이터 하나 더 알아갑니다~(그래봐야 총 세개..)

    강좌 감사합니다 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:11 신고  댓글주소  수정/삭제

      ㅎㅎㅎ...
      마무리 문제가 문제였을까요?ㅎㅎ

      피커 뷰 안에서 그 파란 줄로 현재 선택된 녀석들을 알 수 있게 해주는 녀석도 인디케이터라고 합니다 ^^*

  3. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.06.26 16:45 신고  댓글주소  수정/삭제  댓글쓰기

    올만에 피커뷰 공부하면서 무한으로 돌리는 문제에 대해 고민하고 있습니다.
    기존에 해결했던 방식이
    1. 데이터를 반복으로 집어넣기
    2. 처음 위치를 가운데로 놓기
    3. 선택되면 % 를 이용해서 중간 위치로 돌려놓기
    이 방식으로 해결을 했는데요. 생각해보니 무한이 아니더라고요.
    뭔가 좋은 해결책이 없을까요? (아니면 제가 놓친 레퍼런스가 있을까요?ㅠ)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 17:25 신고  댓글주소  수정/삭제

      제가 지금 레퍼런스를 찾아보지 않고 그냥 제 생각을 말씀드려보면...^^

      위의 제 예제에서 볼 때
      titleForRow
      didSelectrow
      메소드에서 각각

      return [audioNameArray objectAtIndex:row % [audioNameArray count]];

      return [audioNameLabel setText: [audioNameArray objectAtIndex:row % [audioNameArray count]]];

      로 처리해 주시면 되지 않을까요...?ㅎ

  4. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.06.26 21:04 신고  댓글주소  수정/삭제  댓글쓰기

    음.,, 단순히 데이터를 표시해주는 부분을 고쳐서는 안되더군요.
    [pickerView selectRow:row inComponent:component animated:NO];
    이 부분으로 처리해야 될 것 같은데 생각인데 titleForRow 함수안에서는 제대로 실행되지 않네요 ㅎㅎ;
    결국 처음방법으로 합의봐야될 듯싶네요~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 23:46 신고  댓글주소  수정/삭제

      음.. 그렇군요~
      제가 직접 해보지를 못해서 잘 판단이 서질 않네요..ㅎ
      데이터의 양이 극도로 많지 않다면 1번도 임시 해결책이 될 수 있겠네요 ^^*
      제가 정신이 없어서 직접 해보지 못하고 적절한 답변을 드리지 못해 죄송합니다 ㅠ_ㅠ

  5. Sio 2012.07.19 16:14  댓글주소  수정/삭제  댓글쓰기

    2번 문제덕에 삽질좀 많이 했습니다 ㅋㅋㅋㅋ
    노래가 한곡만 나오고 처음 선택된 녀석만 나와서는 ㅡㅡ;;ㅋㅋ

    그래도 어찌어찌 해결되니 성취감이~ ㅎㅎㅎㅎ
    오늘도 잘보고갑니다~!

  6. 서동휘 2012.08.07 11:18  댓글주소  수정/삭제  댓글쓰기

    [[[UIApplication sharedApplication] keyWindow] addSubView:pickerView];

    selectAudioName이란 함수에서 이 부분을 쓰니

    No visible @interface for 'UIWIndow' declares the selector 'addSubView'라는 문구가 뜹니다. ㅠㅠ

    흠.. 무슨 말일까요.,.ㅣ.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.07 15:49 신고  댓글주소  수정/삭제

      안녕하세요 서동휘님~
      UIWindow 클래스에 addSubView라는 메소드가 선언되어 있지 않다는 경고문구 입니다...
      에러가 나서 실행이 안되나요?
      iOS 몇 버전에서 그렇게 나오나용?

  7. 서동휘 2012.08.07 18:06  댓글주소  수정/삭제  댓글쓰기

    으이그ㅠㅠㅋㅋ다시 쓰니까 이런 오류가 사라지네요 ㅠㅠ

    성실한 답변 감사합니다 ㅎㅎ 매번 배우고 갑니다^^

  8. 나에게넌 2012.08.13 14:39  댓글주소  수정/삭제  댓글쓰기

    쭈욱 잘 보고 있습니다..감사합니당

  9. dklee7206 2013.05.12 02:24  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다. 감사합니다.
    피커뷰 관련해서 질문드려요.. 화면에 다른곳 터치하면 피커뷰 내려가는 이벤트 구현하려고 하는데요.
    쉽게 할 수 있는 방법이 있을까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.05.12 18:13 신고  댓글주소  수정/삭제

      가장 쉬운 방법이라면...
      꼼수로.. 화면에 투명 버튼을 하나 올려두고 그 버튼에서 피커뷰 내리는 메소드랑 연결해주면 되겠죠? ^^

  10. dklee7206 2013.05.13 09:42  댓글주소  수정/삭제  댓글쓰기

    네 감사합니다~ 그렇게 한번 해보겠습니다. ^^*

  11. 리얼왕초보 2013.07.29 19:18  댓글주소  수정/삭제  댓글쓰기

    주옥같은 강좌 잘 보고있습니다~^^
    질문에 답변도 너무 잘 해주셔서 공부하는데 힘이나고 도움이 많이 되고있습니다~

    지난번에 맥부기에서는 1번문제만 해결했었는데
    다시 한 번 보니까~
    1,2,3번 다 해결했네용~^^ 야곰님 덕분입니다~
    감사합니당~~

  12. 어제 글을남긴것같은데.. 2013.11.11 12:02  댓글주소  수정/삭제  댓글쓰기

    어찌된 영문인지 글이 지워져 있네요.
    ios7 이랑 xcode 업데이트 후 갑자기 문제가 생겼는데요,

    키 윈도우에 올린 피커뷰를 최상위로 올리는 명령어가 이상하게 동작합니다.
    피커뷰가 ios7 이 되면서 디자인이 달라졌던데 그래서 그런걸까요 ?

    예전엔 최상위로 올라오던 메뉴가 갑자기 최상위로 올라오지 않네요ㅠ

    어떻게 해야 할까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.11 20:25 신고  댓글주소  수정/삭제

      음... 글쎄요^^;

      저도 해보니 iOS7에서 안되고 있어요. 왜 그런지는 아직 시간이 없어서 파악을 해보지는 못했는데, 구글링 해보시면 힌트를 얻지 않을까 싶습니다..

  13. 으아.. 그냥 2013.11.12 13:05  댓글주소  수정/삭제  댓글쓰기

    버그같은데 혹시라도 해결 방안을 알게되면 코멘트 주세요~
    매일 들리고 있습니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.12 14:05 신고  댓글주소  수정/삭제

      새로 프로젝트를 만드셔서

      AppDelegate에서 첫 런칭 메소드에

      [self.window makeKeyAndVisible];

      써주시고,


      - (void)viewDidAppear:(BOOL)animated
      {
      [super viewDidAppear:animated];

      UIWindow *keyWindow =[[UIApplication sharedApplication] keyWindow];
      UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:keyWindow.bounds];
      [pickerView setBackgroundColor:[UIColor redColor]];
      [pickerView setDelegate:self];
      [pickerView setDataSource:self];
      [keyWindow addSubview:pickerView];
      }

      이렇게 한 번 해보세요.

      viewDidLoad 말고 viewDidAppear를 사용하여 뷰가 나타난 후에 한 번 해보세요~

  14. 아하 2013.11.12 20:06  댓글주소  수정/삭제  댓글쓰기

    해결 방법을 알았어요.

    현재 야곰님 소스처럼 버튼 터치액션후 키윈도를 위로 올려서 썼었는데,

    갑자기 원래 있던 파란틀에 흰배경 피커뷰 틀이 사라지고

    이번에 ios7에 업데이트 된 피커가 들어오면서 생긴 문제였군요.

    위에 주신 소스보고 피커뷰 소스 배경색을 흰색으로 넣고나니 기본으로 제공되는 피커뷰처럼 동작하네요^^

    제가 구현해둔 앱 배경색이 흑색이라 아무것도 안나오는것처럼 보였는데,

    백그라운드컬러 주신거보고 힌트얻어서 해결했습니다 ^^;

    빠르고 친절한 답변 감사합니다 ~ ^^


오늘의 주제

1. UIActivityIndicator
2. NSThread



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

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

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

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

# NSThread

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

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

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

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

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

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

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

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

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

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

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

간단합니다 ㅎㅎㅎ

코드 몇 줄로 끝!

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

ViewController.m으로 이동합니다~


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

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

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

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

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

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

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


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


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


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

저는 잘 나오네용 ㅋㅋㅋ

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

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

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


by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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



Posted by yagom

댓글을 달아 주세요

  1. 뺑글이 2012.05.19 00:16  댓글주소  수정/삭제  댓글쓰기

    저... 뺑글이가 돌아갈때 자신이 가지고있는 gif이미지를 사용할수는 없나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.19 02:59 신고  댓글주소  수정/삭제

      물론 가능합니다만 커스터마이징을 해야하지요...^^
      http://blog.blackwhale.at/?p=336
      여기를 참고해 보시기 바랍니다~

  2. 인절미후후 2012.06.07 19:44  댓글주소  수정/삭제  댓글쓰기

    인디케이터 사용법도 다양하군요~
    제가 이 코드 다 해보기 전에는 히든으로 해서 닙파일에 불러놓고 쓸때만 비지블해서 사용하는건가 했는데
    야곰님의 코딩습관이 보이는거 같기도 하고 제가 안쓰는 방식으로 구현하시니 뭔가 더 깊이가 있어 보이네요
    좋은 실습 해보았습니다. 감사합니다~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.08 01:26 신고  댓글주소  수정/삭제

      사실 이것도 인디케이터 정지 메소드를 따로 구현하고 메인스레드에서 호출 해 주었어야 했는데 잘못 처리를 했어요^^;
      저는 너무 부족합니다^^;
      항상 과찬의 말씀 겸허히 듣겠습니다.
      댓글 정말 고맙습니다 ㅎ
      또 놀러오세요^^~

  3. 인절미후후 2012.06.26 14:52  댓글주소  수정/삭제  댓글쓰기

    차근차근 해보는데 의문이 생기더군요
    음악이 재생되는 중에 홈버튼을 눌러서 홈으로 가니 음악소리는 안나는데 백그라운드에서는 음악이 재생되고 있군요
    다시 아이콘을 클릭해서 어플로 가보니 홈버튼 누르기전의 음악이 아니라 계속 음악이 흘러가서 그 후의 음악이 나오네요
    뷰를 띄워서 한거면 viewWillDisapper 같은 메서드를 오버라이딩해서 사용할텐데. 메인뷰라서 AppDelegate에서 받는 이벤트 밖에 못받나봐요 해결방법을 생각해보면서 다음 강좌로 진행하도록 하겠습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:09 신고  댓글주소  수정/삭제

      아하 네~^^*
      아마 프로퍼티로 옵션 세팅하는 부분이 있을 것으로 생각이 되는데 지금은 찾아보지 않아서 확실하게 답변을 못드리겠습니다 ㅎㅎ 한 번 레퍼런스 찾아보세용~^^

      그리고, 만약에 옵션이 없어서 수동으로 멈추고 재생해 주어야 한다면 우리는 아주 좋은 녀석을 알고 있죠.
      노티피케이션이라는 좋은친구요 :-)

  4. 앱만들자 2012.07.14 16:30  댓글주소  수정/삭제  댓글쓰기

    야곰님 덕분에 조금은 앱에 대해 이해가 조금은 가는 것 같네_감사합니다......

  5. 앱만들자 2012.07.15 15:51  댓글주소  수정/삭제  댓글쓰기

    인디게이터 설명 머리에 쏙쏙 잘들어오네요 감사드립니다.....이해가 잘되게 설명 되있어서

  6. Yoo 2012.08.02 14:29  댓글주소  수정/삭제  댓글쓰기

    막히는 부분이 있었는데 이글을 보고 해결했습니다 너무 감사드려요 ^^ 많은 정보 공유했음 좋겠어요^^

  7. 나에게넌 2012.08.13 13:26  댓글주소  수정/삭제  댓글쓰기

    점심먹고 또 야곰님 강의 먹으니 배 터져요..감사합니다..

  8. chobo 2012.09.08 17:21  댓글주소  수정/삭제  댓글쓰기

    Thread 를 사용해야하는 경우가 궁금해지는데요. 예를 들어 프로그램 설계시 performance 가 달릴 것 같은 부분들에 이용을 해주면 되는 것인가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:41 신고  댓글주소  수정/삭제

      안녕하세요~
      스레드를 이용하는 경우에 대해서는 한줄로 설명하기가 참 애매한데요...
      만약에 별도의 스레드를 생성하지 않고 메인스레드에서 모든 일을 처리하게 된다면 순차처리 방식으로 처리가 되게 됩니다.
      무슨뜻이냐 하면, 코드에 나오는 순서대로 앞의 일을 처리 한 뒤에 다음 일을 진행하게 된다는 뜻이죠. 그런데 우리는 한꺼번에 여러 일을 처리하고 싶을 때가 있습니다. 그럴 때 스레드를 사용한다고 보시면 될 것 같아요 :) 너무 설명이 미흡한가요^^;
      추가적으로 궁금하신 것이 있다면 말씀해 주세요 ㅎ

  9. 딴또 2013.03.20 14:35  댓글주소  수정/삭제  댓글쓰기

    수고하셨습니다.

  10. 리얼왕초보 2013.07.29 16:05  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~ 야곰님 또 한주가 시작됬네용~
    화이팅 한주 되세요^^

    이번 장도 다시 보니까~ 이해가 슉슉되네요
    단,,,, 설명해주신 것만 이해가 되는 한계가 있네요;;
    궁금한게 하나있습니다~
    activityIndicator를 코드로 넣지 않고 저는 IB로 넣어줬는데요(프로퍼티 선언은 했습니다)
    attributes inspector에서 설정을 어떻게 해야하고, 코드는 어디에 어떻게 넣어야 하는지..
    이렇게 저렇게 다 해봐도 위에 야곰님이 하신 것 처럼 구현되지가 않네요 ㅠㅠ
    야곰님의 신의 한 수 가르침 부탁드릴게요~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.29 17:17 신고  댓글주소  수정/삭제

      안녕하세요~!
      흠...
      글쎄요;;
      코드로 하나 IB로 하나 저기에서 큰 차이가 없어요...
      프로퍼티로 넣으셨다면 indicatorView 대신 self.indicatorView로 똑같이 진행하시면 될 것 같아요... 'ㅁ'


오늘의 주제

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. 생초보 2012.05.11 14:56  댓글주소  수정/삭제  댓글쓰기

    감이와요 감이와요~~~ 창문밖에서 한줌 햇살이 쫘아~악 비춰주는거 같네요 ㅋㅋㅋ 지금 날씨는 우중충하지만 ㅋㅋㅋ


    감잡았어요 ~~

    퇴근후 다시 첨부터 복습 해봐야겟어요

    강좌 잘 보고있어요 감사합니다 ㅎㅎ

  2. 인절미후후 2012.06.06 19:48  댓글주소  수정/삭제  댓글쓰기

    잘 읽고 갑니다~
    얼럿뷰는 그냥 워닝 메시지 띄워주기만 하고 델리게이트는 사용하지 않았었는데
    야곰님께서 사용하신걸 보니까 저도 사용하고 싶어지는 마음이 마구 샘솟네요 좋은 강좌 감사합니다.

  3. 쌩초짜 2012.06.28 17:40  댓글주소  수정/삭제  댓글쓰기

    항상 잘 읽고 있습니다.

    프린트까지 하면서 보다가 문득 궁금한게 있어서요.
    위의 예제에서 alterview 의 delegate를 선언해주는 부분있자나요?
    헤더파일에...
    그부분을 지워보고 컴파일을 해도 잘 돌아가던데
    그부분을 꼭 써줘야하는건가요?
    안써주는거랑 어떤차이가 있는건가요?


    변경전
    @interface ViewControllerForWeb : UIViewController <UIAlertViewDelegate>

    변경후
    @interface ViewControllerForWeb : UIViewController

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 09:42 신고  댓글주소  수정/삭제

      제가 아직 확인해 보지는 않았지만, 아마 alertView의 델리게이트를 self로 지정해 줄 때 경고가 생길 것입니다.

      써주신 두 줄의 코드 차이는 사실상 명시를 해 주었다는 것에 큰 의미가 있을 것 같습니다.

      한 마디로 써줘도 그만 안써줘도 그만이지만(안 써주면 경고가 발생되죠), 이왕이면 명시적으로 써주는 것이 좋겠죠 :-)

      자주 들러주세요 :-)

  4. hobbang 2012.07.19 16:22  댓글주소  수정/삭제  댓글쓰기

    sample 보고 따라서 써보기만 했었는데,
    강좌 올려주신걸 보니 어떻게 써야 하는지.. 이해가 잘 되네요. 감사합니다.

  5. Favicon of https://kier9.tistory.com BlogIcon 리현느 2012.07.29 07:56 신고  댓글주소  수정/삭제  댓글쓰기

    나 어특햄 흑흑 경고창 안뜨넹

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.29 13:01 신고  댓글주소  수정/삭제

      아픈게 아직 안나으신건가요 +_+ㅋㅋ
      버튼에 태그가 잘 들어가 있는지,
      버튼에 메소드가 잘 연결이 되어있는지,
      [alert show];
      가 작성이 되어있는지... 등등 잘 살펴보세용~
      이래도 저래도 안되면 빌드 클린 해 보고 다시 해보셔요~
      커맨드+쉬프트+K

  6. Favicon of https://kier9.tistory.com BlogIcon 리현느 2012.07.30 09:13 신고  댓글주소  수정/삭제  댓글쓰기

    될때까지 해봤더니 되요 ㅎㅎㅎㅎ 짱짱

  7. 서동휘 2012.08.06 13:26  댓글주소  수정/삭제  댓글쓰기

    이상하게도 ㅠㅠ AlertView *alert 쓰는게 여기서 부터 빨간색 느낌표가 뜨네요

    AlertView를 인식하지 못하는 것 같은데 무슨 문제일까요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.06 16:52 신고  댓글주소  수정/삭제

      안녕하세요 동휘님~!
      AlertView가 아니라 UIAlertView 입니다~ㅎ
      만약에 그래도 에러가 난다면 위에 똑같은 alert 객체를 생성하셨는지 확인해 보세요~ㅎ
      같은이름의 객체가 겹치면 에러가 나옵니다~!

  8. 나에게넌 2012.08.13 10:59  댓글주소  수정/삭제  댓글쓰기

    폭풍 흡입!!! 감사합니다..

  9. Favicon of https://gogodao.tistory.com BlogIcon rustyDAO 2013.02.15 16:53 신고  댓글주소  수정/삭제  댓글쓰기

    야곰님~
    맥부기에서 야곰님 강좌 처음 접하고, 여기서 계속 강좌보면서 공부하다가 모르는 건 맥부기 야곰님 강좌에 질문했었는데 ~
    T-Story 가입해서 이제 여기다 남겨볼려구요 ^~^ㅋㅋㅋ

    하나하나 다 해보고 있는데, 오늘 switch문에서 으아 오타를 내버려서ㅠㅠ web뷰 닫기버튼이 제대로 안먹히는 실수를....
    무슨문제인지 찾을려고 디버깅을 해보았는데요~ visual studio에서 디버깅하던 그런 경험으로 ㅋㅋㅋ
    아 근대 아직 xcode에서 디버깅 하는게 너무 미숙하네요 ㅋㅋ 또 뭐 메모리 누수 감지 시뮬레이터 등 이런것도 있다던데,,

    야곰님 여유가 되신다면 ! 조심스레 디버깅, 시뮬레이터 다루는 것도 조심스레,, 요청해봅니당
    배우는 입장에서 염치 없지만,,, 강좌에서 담번에는 뭐할까요? 이러셔서 ㅋㅋㅋㅋㅋㅋ 헤헤,,ㅋㅋㅋㅋ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.15 17:47 신고  댓글주소  수정/삭제

      안녕하세요 다오님 :)
      제가 요즘 개인적으로 건강 악화와 사정으로 인하여 포스팅을 하지 못하고 있습니다...^^;

      이렇게 찾아와 주셨는데 좋은 답변을 드리지 못해서 정말 죄송합니다... ㅠ_ㅠ

      제가 직접 올릴 순 없지만, 좋은 강좌들 링크 알려드릴게요.
      도움이 되면 좋겠습니다 :)

      가끔 들러서 또 덧글 남겨주세요 ㅎ

      포스팅은 못해도 질문답변이나 도와드릴 수 있는 부분이 있으면 언제든 준비가 되어있습니다 ^^*

      http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1
      http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial
      http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

  10. Favicon of https://gogodao.tistory.com BlogIcon rustyDAO 2013.02.18 09:37 신고  댓글주소  수정/삭제  댓글쓰기

    아.. 야곰님 빠른 쾌유를 빕니다..
    아프신대도 이렇게 질문 받아주시고, 또 좋은 자료도 소개해 주셔서 정말정말 감사합니다..
    이 은혜를 어찌 갚아야 할지 ㅠㅠ

    얼른 몸부터 빨리빨리 나으셔요 !

  11. DinoJ 2013.06.11 10:41  댓글주소  수정/삭제  댓글쓰기

    정말 강의가 재밌고 귀에 쏙쏙 들어와요~!!
    항상 감사해요 야곰님^^


오늘의 주제

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. Favicon of http://blog.daum.net/exlikeus BlogIcon 몰락아티스트 2012.05.09 12:26  댓글주소  수정/삭제  댓글쓰기

    이런 개발하기 시리즈를 포스팅하는게 얼마나 힘들고 피곤한지 사람들이 모르는 걸까요?
    관심이 없어서 그런걸까요. 항상 수고하시는 IOS개발하기 시리즈를 지켜보고 있습니다.
    댓글과 추천뿐이지만, 힘내시고 항상 정성스러운 포스팅 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.09 15:52 신고  댓글주소  수정/삭제

      ㅎㅎ 안녕하세요~
      아티스트님 글 잘 보고 있습니다...
      저도 오늘 지나치기만 하고 댓글을 못달았네요 ㅠ_ㅠ
      저부터 반성을...ㅋㅋ
      저도 아티스트님께서 포스팅하신 인기 블로그에 관한 글처럼 인기블로그에 속하고 싶네요...^^
      물론 제 욕심일 뿐이지만요 ㅋ

  2. 생초보 2012.05.10 02:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님~ 생~ 초보입니다

    프로그램에 ㅍ 자 도 모르는 상태에서 첨부터 쭉~ 다 읽어보면서 따라도 해보니 다 이해는 못해도 감은 오는거 같네요

    단지 앱을 만들고 싶어서 공부를 시작했는데 맘이 급해서 그런지 만들고싶은 앱과 관련된 부분은 눈에 잘들어오는데
    그 외 부분은 대충대충 이해 못하고 넘어가게 되고....

    오늘은 #define <--요놈을 알게되서 너무 기분이 좋아요~ ㅎㅎ

    다음 강좌도 잘~ 부탁드립니다 감사합니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.10 09:16 신고  댓글주소  수정/삭제

      ^^ 안녕하세요~
      제 목표와 조금은 부합한 결과를 이끌어 낸 것 같아 기분이 좋습니다^^*
      마음이 급하다고 기초와 기본, 그리고 중요한 부분을 놓치는 경우가 많고, 저 또한 그랬었는데 누누히 말씀드리지만 간과하고 넘어가서는 안될 부분들이 많습니다..^^
      물론 이제 기초부분이 아니라 기본 부분으로 접어들었지만서도 기초를 탄탄히 하시기 바랍니다!^^
      생초보님의 응원으로 힘이 납니다!!ㅎㅎ
      #define 녀석은 잘 사용하면 편하고 좋지만, 위험요소가 너무나 많은 녀석입니다.
      꼭 필요할때만 적당히 사용하시고, 그 외에 다른 방법들도 많으니 enum, const 상수 등을 사용하시기를 권고드립니다. (검색해 보시면 define의 단점이랑 그 외에 다른 대체방법이 나올거예요)
      그럼 자주자주 놀러오시고 댓글도 많이 많이 주세요~^^
      필요한 부분 있으면 말씀해 주시구요 ㅎ
      그럼 좋은하루 되세요~^^*

  3. 인절미후후 2012.06.06 16:49  댓글주소  수정/삭제  댓글쓰기

    아니 이거슨!!!(이것은 이라고 적는게 맞습니다.)
    바 버튼 바꾸기군요 제가 이전에 바 버튼 체인지를 시도하다가 포기했었는데
    폭풍코딩중에 너무 반가와서(반가워서가 맞는말입니다.) 중간에 글남깁니다.

    제가 이런저런 검색으로 알아낸것은 애플에서 제공해주는 이미지 버튼(play/stop/refresh/rewind같은)은
    체인지를 할수 없고 정 사용하고 싶으면 같은 자리에 버튼을 두개주고 히든과 비지블(hidden = NO)을 번갈아가면서
    사용하라고 하더군요 (카메라 커스텀 할 때 사용해 봤습니다.카메라를 온/오프 가능하게 하고 on시에만 사진마크가 뜨도록 하는 거였죠)
    코딩 다 하고 다시 소감 남길게요 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.06 17:51 신고  댓글주소  수정/삭제

      아하~! 그런 방법도 있었군요 ㅎㅎ
      미쳐 생각하지 못했네용 ㅎ
      이런 귀차니즘같은...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
      좋은 부연설명 고맙습니다 ^^*
      오늘 폭풍 댓글 받으니 기분 너무 좋네요 ㅎㅎ (정말 좋네요가 맞는 말입니다.)

  4. 지문 2012.06.06 18:39  댓글주소  수정/삭제  댓글쓰기

    초보라, 맥부기에서 야곰님 강좌 본적이 있어서 왔습니다.
    맥부기에도 질문 올렸지만 아직 해결이 안되어서요.
    RUN했을때, 시뮬레이터5.1가 xcode(4.3.2) 상에서 바로 뜨지를 않고
    장면이 바뀌면서 바탕화면이나, 크롬화면위에서 시뮬레이터가 뜹니다.
    시뮬레이터를 xcode화면 위에서 뜨게 하고 싶은데,,어떻게 하는지요?
    너무 초보적인 질문이라서,,,망설이다가 올려봅니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.07 01:33 신고  댓글주소  수정/삭제

      글쎄요..^^;
      무슨말인지 완전히 이해가 가진 않지만,
      다음 번에 실행될었으면 하는 자리에서 시뮬레이터를 종료 해 보세요.
      다음 번에 실행 될 때 시뮬레이터가 지난 번에 실행되었던 자리에서 실행 될 겁니다.
      적절한 답변이었으면 좋겠네요^^;;;

  5. yuyu 2012.06.21 18:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좀 여쭤보고 싶은게 있는데요.
    앱에서 사진을 찍은 위치의 위도와 경도를 알수 있나요?
    그리고 위치서비스를 사용자 동의없이 자동으로 활성화 시키는 것도 가능한가요?
    아니면 자동으로 활성화 시키면 안되는 규정이라도 있나요?
    아무리 찾아봐도 모르겠네요.
    알고계시면 좀 알려주세요~ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.22 11:39 신고  댓글주소  수정/삭제

      지난 번이랑 질문이 똑같으시네요...^^;
      지난 번에 답변 드렸었는데...
      그래서 저도 답변을 복사해왔습니다 ^^
      그리고 사진에서 위치 가져오는 방법은
      http://stackoverflow.com/questions/1238838/uiimagepickercontroller-and-extracting-exif-data-from-existing-photos
      http://stackoverflow.com/questions/616346/iphone-access-location-information-from-a-photo
      참고하세요~
      ============================
      상식적으로 당연히 사용자의 허가 없이는 그 무엇도 불가능 합니다...
      그런 규정이 명시되어있는지는 모르겠지만, 사용자의 위치정보를 무단 수집하는 행위이므로 어플리케이션에서 임의로 사용자 위치정보를 사용할 수 없습니다.
      사용자가 허가 하여야 합니다.

    • yuyu 2012.06.26 13:27  댓글주소  수정/삭제

      안녕하세요.
      답변 정말 감사드립니다.
      전에 제가 올린 글은 너무 예전 글에 올려서 지우고 다시 올린건데 안지워졌나보네요.ㅎ
      ================================
      위치정보 무단 수집은 당연히 불법인거 아는데,
      애플에서 사용자 허가 없이는 위치정보 수집을 하면 안된다는 조항을 회사에서 꼭 찾아야 한다는데,
      아무리 찾아도 못 찾겠네요ㅠ
      혹시 아시나 싶어서 여쭤본거에요.ㅎ
      더 찾아봐야겠네요.ㅋ

      다시한번 답변 감사드립니다.^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 16:06 신고  댓글주소  수정/삭제

      음... 그런 조항에 대해서는 확인해 본 적이 없어서요 ㅠ_ㅠ 구글신께서 답을 내려 주셨기를... :-)

  6. Sio 2012.07.18 17:25  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~~~!!
    음.. itemStyle에 따라서 FuncButton을 바꾸는 부분에서요...
    저는 바뀌는 모습이 보이지 않습니다 ㅜㅜ;;;;;
    시뮬레이터로 아무리 돌려도 변하는 모습이 보이질 않네요 ....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 19:04 신고  댓글주소  수정/삭제

      음.. 웹뷰의 델리게이트가 연결되어있나 확인해 보세요~^^*

    • Sio 2012.07.19 11:22  댓글주소  수정/삭제

      아하하;; 할때 뭘 잘못 해서 xib를 싹 지웠다가 다시 했더니 delegate 연결을 깜박했네요 ㅡㅡ;;;
      한번 해봤으니 혼자해봐야지 하면서 나름대로 다시 해봤는데도 역시 하나씩 빠트리네요 ㅋㅋㅋ
      이젠 아주아주 잘됩니다~! 감사합니당^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.20 09:07 신고  댓글주소  수정/삭제

      잘 동작된다니 다행입니다 ㅎ

  7. 리현 2012.07.27 04:39  댓글주소  수정/삭제  댓글쓰기

    당큐~~아파서 잠시 쉬고 다시왔더염 ㅎㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 13:11 신고  댓글주소  수정/삭제

      에고...ㅠㅠ 아프면 안돼요~
      저도 며칠 아프고 이제 좀 정신 차렸는데, 혼자사는데 아프니까 서러워요 ㅠㅠㅠ

  8. 나에게넌 2012.08.13 10:39  댓글주소  수정/삭제  댓글쓰기

    계속 쪽쪽 빨아갑니다..오늘 강의 다 볼꺼에요 ㅎㅎ 항상 감사합니다..

  9. 감사합니다. 2012.10.17 17:19  댓글주소  수정/삭제  댓글쓰기

    yagom님 덕에 정말 많이 배우고 있습니다.

    근데 ios6으로 넘어오면서 더이상
    [self dismissModalViewControllerAnimated:YES]; 코드가 안먹는거 같아요..

    그래서
    [self dismissViewControllerAnimated:YES completion:nil]; 요걸로 바꾸니 정상 작동하는군요.

    스토리 보드로 yagom님 강좌 다 따라하는데 정말 재밌네요.
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.20 10:43 신고  댓글주소  수정/삭제

      안녕하세요 :)
      말씀하신 내용이 맞습니다.
      iOS6에서 변경된 부분 중 하나인데요, iOS6미만 기기에서도 호환이 되게 만들으려면 버전체크를 해서 적절한 메소드를 호출해 주어야겠죠?ㅎ
      찾아주셔서 정말 고맙습니다.
      필요한 내용 말씀해 주시면 피드백 하도록 노력하겠습니다 ^^*

  10. 2012.10.31 15:40  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.01 09:37 신고  댓글주소  수정/삭제

      안녕하세요 앱만들자님 :)
      applicationDidBecomeActive 메소드와 applicationWillResignActive 두 메소드를 이용하시면 될 것 같습니다 ^^*
      찾아주셔서 정말 고맙습니다 ㅎ
      추운날씨 감기 조심하셔요~

  11. 이춘홍 2014.01.04 22:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 소중한 정보 잘 보고 질문드립니다.

    제가 앱개발을 처음해봐서 웹뷰의 사용시 애플 앱심사에 결격사유가 어느정도인지 궁금합니다.
    혹시 앱심사를 잘 통과할 수 있는 노하우가 있을까요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.01.05 20:05 신고  댓글주소  수정/삭제

      안녕하세요, 방문해 주셔서 고맙습니다 ^^

      앱 심사 기준은 기본 틀은 크게 변하지 않지만 간간히 변하기 때문에 수시로 확인을 해주시는 것이 좋습니다.

      https://developer.apple.com/appstore/guidelines.html

      이곳에 가시면 앱 심사 가이드라인이 있습니다.

      제가 아무리 말씀드려도, 개인마다 어떤 기준의 체감이 다르기 때문에 가이드라인을 읽어보시고 애매한 부분이나 궁금한 부분이 있다면 애플에 직접 이메일로 문의해 보시는 것도 좋은 방법입니다 :)


오늘의 주제

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. 이전 댓글 더보기
  2. 편안한비 2012.05.15 11:03  댓글주소  수정/삭제  댓글쓰기

    좋은자료 잘 보고 갑니다~

  3. 노가다개발자 2012.05.17 18:25  댓글주소  수정/삭제  댓글쓰기

    혹시 폰갭 이용시 웹페이지를 불러올때 웹뷰로 불러오는게 아니라.. 사파리 웹으로 전환이 되서 열리는데..

    이것에 대한 폰갭에 대한 설정이 있는지 아니면 코딩상으로 제어를 해야하는지 알수있을까요??

    스크립트로 보내서 document.href 로 열어도 다른분 댓글보면 웹뷰를 통해서 열린다는 분도 계시는거 같은데..

    웹으로 전환이 되어버리네요..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.18 05:47 신고  댓글주소  수정/삭제

      흠... 글쎄요^^;
      폰갭에서 웹뷰를 띄워본 적이 없어서 잘 모르겠습니다..^^;
      맥부기나 스택 오버플로에서 정보를 얻으심이 빠르실 것 같습니다..
      확답을 드리지 못해 죄송합니다..!

  4. 인절미후후 2012.06.06 16:09  댓글주소  수정/삭제  댓글쓰기

    항상 알찬 포스팅 감사합니다~~

    와서 볼때마다 느끼는데 딱 저한테 필요한 내용이 정말 많은거 같아요 유용하게 잘 보고 있습니다.
    다음강좌 이동하겠습니다~

  5. 박병훈 2012.07.14 16:58  댓글주소  수정/삭제  댓글쓰기

    안녕하세요?? 요즘 아이폰 입문자입니다.ㅋㅋㅋㅋㅋㅋㅋ
    아주 좋은 자료 감사합니다.
    이번 포스팅을 보고나서 다른 페이스북 페이지로 연결 시키려고하는데 안되네요
    페이스북은 연결이 안되나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.15 20:28 신고  댓글주소  수정/삭제

      안녕하세요 박병훈님.
      페이스북을 어떻게 연결하고자 하시는지요?
      페이스북 페이지를 열고 싶으신 건지, 아니면 페이스북에 글을 남기고 싶으신 건지에 따라 방법이 다릅니다 :-)
      게다가 이제 iOS 6.0 이 정식으로 나오면 또 다른 방법이 생기구요 ㅎ
      어떤 방법으로 연결을 원하시는지 구체적으로 말씀해 주세요~

  6. 앱만들자 2012.07.15 00:18  댓글주소  수정/삭제  댓글쓰기

    참쉽게 설명과 그림을 보니 이해가 자꾸만 가네요 정말 감사합니다........

  7. Sio 2012.07.18 13:09  댓글주소  수정/삭제  댓글쓰기

    웹뷰 같은건 왠지 어려울것 같았는데
    아직까지는 따라갈만 해서 좋네요 ㅎㅎㅎ
    설명을 너무 잘해주셔서 그런가봐요 ^^

  8. 나에게넌 2012.08.13 09:34  댓글주소  수정/삭제  댓글쓰기

    야곰님 지식을 쪽쪽쪽 다 빨아가겠습니다..항상 감사합니다..

  9. mhy 2012.09.12 11:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님 글에 많은 도움을 받고 있습니다.

    현재 내용을 따라하다 문의 드릴게 있엇 글남깁니다.

    위내용에 웹표 표현되는것이 시뮬레이터에서는 잘보이는데

    폰으로 확인하면 아무내용도 표시가 되질않는데 어떤이유때문에 그런가요..

    웹뷰가 그냥 흰색화면으로만 나오네요...

    도움주시길 바랍니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:46 신고  댓글주소  수정/삭제

      혹시 아이폰의 버전이 5.x대가 맞나요?
      6.x대에서는 아직 제가 테스트를 해보지 못했습니다.
      버전이 달라서 그럴 수도 있을 것 같습니다 ^^;
      그게 아니라면 어떤 이유 때문인지 다시 알아봐야겠네요~

  10. Parkep 2013.01.02 10:07  댓글주소  수정/삭제  댓글쓰기

    덕분에 공부 열심히 하고있습니다 감사합니다 ㅎㅎㅎ

  11. dumbo 2013.01.15 15:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님 덕분에 ios 재미있고 쉽게 배우고 있습니다.

    현재 6.0버전으로 따라가고 있는데 loadRequest부분에서 thread 1 break point 1.1 메시지가 나오면서 구동이 멈추는데요.

    어떤 문제로 메시지가 뜨는지 문의드립니다.

    늦게나마 새해 복 많이 받으세요~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.16 13:04 신고  댓글주소  수정/삭제

      혹시 Break Point로 지정되어있진 않은가요?^^

      코드 옆에 파란색 화살표가 있는지 확인해 보시고 혹시나 있으면 제거해 주세요 ㅎ

  12. dumbo 2013.01.17 22:34  댓글주소  수정/삭제  댓글쓰기

    .....감사합니다 ㅎㅎ

  13. seunggon 2013.02.25 19:21  댓글주소  수정/삭제  댓글쓰기

    웹뷰의 소스를 얻을 수 있을까요 ? 따라하는데 계속 실패하네요 ㅠㅜ

  14. Help 2013.02.28 10:23  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 잘 보고있어요 정말 큰도움되었답니다!!ㅠㅠ

    아이폰 앱을 다 만들고 앱스토어에 등록하는 강의생각은 없으신가요?ㅠㅠㅠ

    열심히 구글링하고 있는데 원하는 정보가 안나와요...

    만든 앱을 올리고나서 그걸 업데이트하려면 -info.plist 에서 버전만 올리면 되는건가요??

    그리고 사용자가 다운받아논 앱을 업데이트시키려면 어떻게 해야할지....아무리찾아도안나와요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.28 10:40 신고  댓글주소  수정/삭제

      안녕하세요~
      지금은 제가 포스팅할 여력은 되지를 않구요...^^
      http://writerkim.pe.kr/1132
      여기를 참고해 보시겠어요?ㅎ
      큰 도움이 되어드리지 못하여 죄송합니다..^^;

  15. 딴또 2013.03.13 16:59  댓글주소  수정/삭제  댓글쓰기

    멋진 강의 정말로 감사합니다.

  16. 배도영 2013.03.16 17:24  댓글주소  수정/삭제  댓글쓰기

    @synthesize ygWebView 가 빠졌네요... ㅠㅠ

    왜 안되나싶어서 엄청 찾아다녔습니다.ㅠㅠ

  17. 노현빈 2013.07.07 22:42  댓글주소  수정/삭제  댓글쓰기

    포스팅 정말 감사합니다
    우연히 블로그를 방문하게 되었는데
    야곰님 덕분에 잘 배우고 있습니다
    프로그래밍은 초심자라 배우면서도 조금 막막했는데 강의보면서 천천히 따라하니까 조금씩 감이 잡히는 것 같습니다.
    정말 감사합니다.

  18. Favicon of http://ohsdsl@naver.com BlogIcon hahahaha 2013.09.02 16:05  댓글주소  수정/삭제  댓글쓰기

    야곰님 잘 보고 있습니다.

    질문이 있는데요

    초기 페이지에서 버튼 눌러서 웹뷰 띄우게 하는게 아니라

    바로 초기페이지에 웹뷰를 넣고 실행하니까 오류가 나는데요

    원래 안되는 것인지 아니면 제가 잘못해서 그런건지 궁금합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.03 09:17 신고  댓글주소  수정/삭제

      안녕하세요~

      초기화면에서 웹뷰를 띄운다고 오류가 나서 앱이 죽는다거나 하는 경우는 없을거예요.
      뭔가 잘못되었기 때문에 오류가 나는 것 같은데, 어떤 오류가 어디서 나는지 파악해 보셔야 할 것 같습니다.

  19. 조언이필요한자 2014.02.05 10:06  댓글주소  수정/삭제  댓글쓰기

    안녕하세요

    야곰님 글 너무 잘보고 있습니다

    질문이 있습니다.

    야곰님이 말씀하신대로 웹뷰를 잘 띄웠는데요

    url주소가 한글이 들어가 있으면 불러오지가 않습니다

    한글이 깨진건 아니구요 로그에는 주소가 정확히찍힙니다.

    혹시 조언좀 구할수 있을까요??ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.05 10:11 신고  댓글주소  수정/삭제

      안녕하세요 :)
      URL 인코딩이 필요한 것 같습니다.
      http://theeye.pe.kr/archives/853
      이 주소 또는 구글에 iOS URL encoding 이라고 검색해 보셔요 ㅎ

  20. 조언이필요한자 2014.02.05 10:26  댓글주소  수정/삭제  댓글쓰기

    아 너무 감사합니다

    가르켜주신 url 타고 가서 보고 바로 적용 해서 해결했습니다.

    정말감사합니다. 좋은하루되세요~

  21. 조언이필요한자 2014.02.06 14:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요

    질문이있어서 그러는데요

    공지사항 을 만들려고 합니다.
    그런데 공지사항 목록을 그렸습니다
    그리고 그 목록중 하나를 클릭하면
    DrawDetail(nIndex); nIndex를 인자로받아
    함수를 호출 하여 그 공지사항에 대한 정보를 그렸습니다

    여기서 문제는 공지사항 상세 에서 다음과 이전 버튼을 만들어서
    다음버튼을 누르면 클릭한 목록 다음것을 그리고 이전버튼을 누르면 클릭한 목록 이전것을 그리고 싶습니다.

    그래서 DrawDetail(nIndex); 함수로 값을 그릴때 nIndexnext = nIndex +1; 을 해줘서 다음버튼 클릭시
    DrawDetail(nIndexnext); 로 다음 공지사항 상세를 바로그리려 하는데 그 목록에 대한 정보를 가져오지 못합니다.
    인자 값은 제대로 증가 한것을 확인했습니다만....

    제말을 이해하셨을지 모르겠습니다. 읽어주셔서 감사합니다. 조언가능하시면 조언해주시면 감사하겠습니다.ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.07 09:14 신고  댓글주소  수정/삭제

      안녕하세요, 또 뵙습니다 :)

      여러가지 경우의 수가 존재하기 때문에 딱 뭐라고 말씀드리기가 어렵군요.
      일단 목록(배열)의 인자들이 이미 메모리에서 해제되었을 수도 있고
      DrawDetail 함수가 어디에 구현되어 있는지에 따라서도 다를 것 같구요... 또 어떤식으로 그리고 계신지도 제가 잘 몰라서요 ^^;

      상세 화면으로 넘어갔다면 상세화면 전의 컨트롤러에서 공지사항 정보들을 상세화면쪽으로 넘겨줘야 하는데, 어떤 방식으로 어떻게 넘겨주시는지도 제가 잘 모르구요..^^;

      델리게이트와 프로토콜의 개념에 대해 조금 더 알아보시거나, 싱글턴 기법에 대해서도 알아보시면 좋을 것 같아요.


오늘의 주제

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

댓글을 달아 주세요

  1. 오싹이 2012.04.26 16:21  댓글주소  수정/삭제  댓글쓰기

    열심히 따라하고 있었는데 새 내용이 올라 왔네요....
    감사합니다.

    스토리보드 한번 해주세요!!!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.26 16:55 신고  댓글주소  수정/삭제

      관심 가져주셔서 고맙습니다^^*
      스토리보드는 제가 제대로 사용해 본적이 없어서 포스팅 하기가 애매하네요~_~
      요즘 너무 바빠서 따로 공부할 시간이 별로 없어서 단기간 내에는 힘들 것 같습니다^^;
      다음 번에 기회가 되면 공부해서 포스팅해 볼 계획입니다..ㅎ
      자주 놀러오세요~^^

  2. Berry 2012.05.02 16:21  댓글주소  수정/삭제  댓글쓰기

    사진이 이쁘게 잘 들어오네요!! ㅎㅎ
    올라온 강좌까지 이제 모두 다 보았군요!!
    다음번엔 어떤 강좌를 보게될지 흥미진진합니다
    제가 지금까지 보아온걸 정리하면서
    다음번에는 어떤 강좌를 한번 진행해주셨으면 하는지
    코멘트를 꼭 ! 달아드리겠습니다
    26번째 시간까지 고생많으셨고
    다음강좌도 기대하겠습니다 !

  3. 생초보 2012.05.05 02:20  댓글주소  수정/삭제  댓글쓰기

    고생이 많으셔요~

    다음 강좌는~~!!

    웹이나 db 에서 데이터값을 가져와서 앱에 뿌려주는~~~ 그런 강좌 어떨까요???~~

    매일매일 과일이나 채소 등등 가격이 바뀌는거를 실시간 시세를 앱으로 확인하는 앱을 만들고 싶어서 공부중인데^^

    혼자 책사서 독학중인데 여간 어려운게 아니네용...

    로또번호 확인하는 앱처럼 웹에서 데이터 값을 가져와서 앱에 뿌려주는 앱 !!! 꼭 만들어 보고 싶어요~

    도와주세요~










    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.05 08:18 신고  댓글주소  수정/삭제

      ^^* 관심 가져주셔서 정말 고맙습니다 ㅎ
      안그래도 그 내용은 진행할 예정인데, 아마 조금은 더 있어야 하지 않나 싶습니다..^^
      간단하다면 간단하지만 복잡하다면 복잡한 내용이라, 일단 정말 기초부터 해 놓고 기본으로 올라가 보려 합니다.
      조금만 기다려 주세요~^^
      좋은 주말 되시길..!
      고맙습니다~

  4. 생초보 2012.05.05 14:04  댓글주소  수정/삭제  댓글쓰기

    와~~ 벌써부터 기대됩니다 궁금햇던 부분이 강좌로 올라올 예정이라니
    그때까지 열공하면서 자주 올께요 감사합니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.06 19:33 신고  댓글주소  수정/삭제

      네, 빠른 시일내로 올라올지는 모르겠지만, 조금은 시간이 더 필요하지 않나 생각해 봅니다^^;
      관심 주셔서 정말 감사합니다~!

  5. 2012.05.09 19:57  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 하하 한번도 블로그를 보고 댓글을 남겨본적이 없는데
    야곰님 블로그에는 안남길수가 없어서 이렇게 처음으로 댓글을 달아봅니다
    아이폰 혼자 공부하려니 좀 답답하고 이것저것 꼬이는게 많아서
    시작한지는 꽤 됐는데 아직 감을 못잡고있었어요
    근데 야곰님 블로그를 처음부터 여기까지 차근차근 보면서 따라하다보니
    어느정도 감이 오는것 같아요
    뭐 아직 갈길이 멀겠지만
    그래도 이것이 어떤식으로 동작하는지
    어떤식으로 찾아보고 프로그램을 만들어야하는지
    소스를 얻은것 같아서 참으로 도움이 많이 되었습니다


    앞으로 두개의 강좌가 남았는데
    그거 마저보고
    지금까지 한것을 복습한다 생각하고
    야곰님의 소스 안보고 다시 처음부터 만들어보려고해요

    진짜 도움 많이 받고갑니다
    앞으로도 강좌 또 올려주시면 자주들러서 열심히 공부하려구요 히히

    진짜 완젼 대박 감사합니다 ^-------------^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.09 23:33 신고  댓글주소  수정/삭제

      안녕하세요 탱님^^*
      정말 이런말씀 해주셔서 영광입니다.
      아직 저도 쓸날이 많이 남았네요...ㅎ
      제가 기초만 쓰려고 했던 분량에 반도 못왔네요 +_+
      워낙 분량이 방대하다 보니 산넘어 산이네요...ㅎ
      자주자주 들러서 댓글도 남겨주시고, 필요한 것 있으시면 말씀도 해주세요 ㅎ
      특별한 일이 없다면 일주일에 두어개 씩은 포스팅 올라갈거예요~^^*

  6. 사랑해 엑스코드 2012.07.13 12:50  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다. 한가지 궁금한게요. 웹상에 사진이 있거나 앱에서 사진 클릭했을때 액션시트 뜨고 저장하는 방법 포스트 가능하신지 궁금합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.14 16:00 신고  댓글주소  수정/삭제

      웹상에 사진은 꾸욱 길게 누르고 있으면 액션시트가 자동으로 올라옵니다 ^^
      앱에서 사진을 클릭했을 때 사진을 저장하는 방법은, 몇 가지 방법이 있는데요, 가장 쉬운 방법으로는 버튼으로 구현하는 방법이 있지요.
      버튼의 백그라운드 이미지를 원하는 사진으로 넣고, 버튼은 터치했을 때 액션시트가 올라오도록 하면 되겠죠?
      제 블로그에 있는 글들을 보시고 잘 응용하시면 충분히 가능한 작업입니다^^
      제가 요즘 정신이 없어서 한동안 포스팅을 못하고 있네요 ㅠ_ㅠ
      정말 죄송합니다.
      종종 들러주세요. 고맙습니다 :-)

  7. Sio 2012.07.18 12:23  댓글주소  수정/삭제  댓글쓰기

    아휴... 액션시트 ㅡㅡ ㅋㅋㅋㅋ
    사진 처리하는데 필요한 Delegate도 여러개고 이것저것 많네요 ㅎㅎㅎ
    여러번 반복해서 자동으로 딱딱 나오게 노력해야 겟어요 ㅎㅎㅎ
    잘보고갑니다~!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 13:10 신고  댓글주소  수정/삭제

      자동으로 딱딱 나오는 것도 중요하지만,
      문서보고 잘 찾아서 적재 적소에 사용하는 것도 중요하겠죠?ㅎ
      사람이 컴퓨터가 되면 안됩니다 ㅎㅎ
      사람은 생각할 줄 알고 컴퓨터는 생각할 줄 모른다는 것이 컴퓨터랑 다른거예요 ㅎ
      자동으로 뭔가를 반복하다보면 사소한 것들을 너무나 쉽게 놓쳐버리거든요~ :-)

    • Sio 2012.07.19 11:17  댓글주소  수정/삭제

      오홍~ 그렇군요 ㅎㅎㅎ
      적재적소!!! 충고 감사합니다~!

  8. Favicon of https://kier9.tistory.com BlogIcon 리현느 2012.07.25 05:08 신고  댓글주소  수정/삭제  댓글쓰기

    아이시떼르
    ㅎㅎㅎㅎ 잼나네염

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.25 10:09 신고  댓글주소  수정/삭제

      이런 공개적인 고백... 설레는데요..?ㅋㅋㅋ
      부끄부끄
      황송하네요 ㅋ
      제 동네에 놀러오시면 차라도 한잔 사드릴게요 ㅋㅋㅋ
      불같은 덧글 넘넘 고맙습니다 ㅎㅎ

  9. neoaero 2012.08.07 09:24  댓글주소  수정/삭제  댓글쓰기

    야곰님!! 일일히 뎃글 달아 주시는거 보면 정말 성실히신분 같아요..
    델리게이트 참 어려운 개념이었는데...이제야 좀 알거 같아요...
    그리고 레퍼런스 찾아보는 방법 가끔식 소개해주시는거 너무 좋은거 같아요..앞으로도 자주 소개 부탁드려요..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.07 10:11 신고  댓글주소  수정/삭제

      안녕하세요 neoaero 님~!
      부끄럽네요^^;
      요즘 포스팅을 하지 못해서 죄송할 따름입니다 ㅠㅠ
      빨리 돌아오도록 노력하겠습니다~!
      자주 들러주시고 덧글도 또 남겨주세요 ㅎㅎㅎ
      힘이납니다~!

  10. hyung 2012.11.07 17:33  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 야곰님 포스팅이 너무 좋아서 글 남기네요
    한번도 블로그 보고 글 남긴적이 없었는데.. 허허
    회사에서... 한번도 해본적도 본적도 없는 IOS로 카메라를 개발하래요 ..
    ㅠㅠ.. 여기저기 자료 찾아다니다가 너무 저에게 딱 맞는 자료라 감동 받고 글 남겨요
    개발환경은 스토리보드라 조금 다르지만 이것저것 만지다보니 되긴됬어요^^
    프로젝트 끝나면 IMAC을 반납해야 해서 더 못하겠지만
    그동안은 자주 들려서 많이 배울게요~

  11. TaylorHK 2012.11.22 12:43  댓글주소  수정/삭제  댓글쓰기

    흐음....
    버튼 1개로 되는건 이제 할 수 있겠는데..
    버튼 여러개에 각각 이미지 보여지게 하는걸 못하겠네요..ㅠㅠ
    버튼에 태그값 넣어서 해야되는건가요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.22 13:08 신고  댓글주소  수정/삭제

      버튼마다 태그값을 지정하고 UIButton *button = (UIButton *) [self viewWithTag:태그값]; 으로 버튼을 불러와서 세팅하시면 될거예요~

  12. ios코드왕 될놈 ㅎㅎ 2013.05.13 18:31  댓글주소  수정/삭제  댓글쓰기

    야곰님 블러그에서 야공 야공 기초 쌓아갑니다
    앞으로도 좋은코드 많이 올려주세여

  13. 맨해솔 2013.06.25 13:13  댓글주소  수정/삭제  댓글쓰기

    감사합니다.
    덕분에 이미지 뽑아 오는걸 할 수있게 되었네요.
    그리고 궁금한게 두가지있는데
    가져온 파일 이름알아내는 방법과 영상 도 가져오는 방법도있나요?

  14. 한때... 2013.07.09 16:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 몇권의 IOS 개발 책보다 더욱 이해가 잘되어

    몇일째 푹 빠져 공부하고 있는 초보개발자 입니다.

    모든 강의를 잘 따라 왔는데 유독 이부분에서 이미지 버튼에 이미지가 표시가 되질 않네요 ^^;;

    특별히 에러나거나 하는 부분이 없어 더욱 머리를 싸메고 있지만.. 오탈자나 실수한 부분이 쉽게 보이질 않네요.

    다만 SecondView에서 Push 버튼을 누르면 다음과 같은 로그가 올라오는데 혹시 feedback 해주 실 수 있으신가요??

    부탁 드립니다 ^^;

    2013-07-09 16:49:20.321 ChangeViews[2161:907] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
    (
    "<NSLayoutConstraint:0x1e5e90e0 V:[UIRoundedRectButton:0x1e5fb250(16)]>",
    "<NSLayoutConstraint:0x1e526a40 UIRoundedRectButton:0x1e5fb250.baseline == UIRoundedRectButton:0x1e5e4a60.baseline>",
    "<NSLayoutConstraint:0x1f158af0 V:|-(NSSpace(20))-[UIRoundedRectButton:0x1e5fb250] (Names: '|':UIView:0x1e5e1c20 )>",
    "<NSLayoutConstraint:0x1e5c01e0 UIButtonLabel:0x1e5e9550.centerY == UIRoundedRectButton:0x1e5fb250.centerY>"
    )

    Will attempt to recover by breaking constraint

    <NSLayoutConstraint:0x1e5c01e0 UIButtonLabel:0x1e5e9550.centerY == UIRoundedRectButton:0x1e5fb250.centerY>

    Break on objc_exception_throw to catch this in the debugger.
    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

    • 한때... 2013.07.09 21:08  댓글주소  수정/삭제

      해결했네요 ㅎㅎ;

      위 이상한 메세지는 신경쓸 필요가 없었네요 ㅠ

      imagePickerController 함수내에

      [picker dismissViewControllerAnimated:YES completion:nil] <<
      이부분을 함수 가장 첫줄에 적어주니.. 사진이 올바르게 이미지 버튼에 출력되었습니다.

      이유는.. 모르겠어요 ㅠㅠ ㅋㅋㅋㅋ

      더욱 머리가 복잡해 지네요 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.10 10:46 신고  댓글주소  수정/삭제

      해당 메세지는 iOS 6에서 사용하는 Auto Layout에 대한 경고문구 같아요 :) 지금 이 글의 기준이 iOS 5이기 때문에... 그걸 사용하지 않았었어요 ㅎㅎ

      그런데 저 코드의 위치를 바꿔서 제대로 되지 않았다는건 저도 잘 이해를 못하겠습니다 ^^;

  15. 리얼왕초보 2013.07.25 17:04  댓글주소  수정/삭제  댓글쓰기

    야곰님~ 전에 맥부기에서 강좌를 쫙~ 다봤었는데
    요기 블로그서 다시 한 번 보고 있습니다^^
    그때나 지금이나 정말 감사히 잘~ 보고있구요~
    이번 강좌에서 궁금한게 UINavigationControllerDelegate는 사용이 된 것인지..아닌지 궁금해서요~
    UINavigationControllerDelegate 요녀석을 빼도 실행은 되는데 노란 경고가 하나 살포시 떠주네용..그래서 다시 넣었는데
    왜 필요한지 이해가 잘 안되네용 ㅠ
    UINavigationControllerDelegate Protocol Reference 를 살펴봤지만;; 연관성을 이해를 못하는 바보 ㅠㅠ인가봐용

  16. sy 2013.11.20 15:18  댓글주소  수정/삭제  댓글쓰기

    여려장의 사진을 불러올순없나요 ??..

    만들어야하는데 길좀알려주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.22 20:01 신고  댓글주소  수정/삭제

      그건 굉장히 큰 커스터마이징 작업입니다...^^;

      간단한 포스팅 정도로 끝내지는 못할 작업량인데, iOS 개발에 익숙치 않으신 분이면 간단하게는 할 수 없을 것 같습니다.

      오픈 라이브러리를 잘 찾아보시면 답이 나올지도 모르겠습니다 :)

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


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

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

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


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

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


Posted by yagom

댓글을 달아 주세요

  1. 인절미후후 2012.04.25 17:06  댓글주소  수정/삭제  댓글쓰기

    원리는 해당 파일의 링크가 사파리브라우저를 통해서 열리는것이죠 iOS가 자유롭게 저장할수 있는건 사진파일만이라서 저 방식으로 사진만 이동시킬수 있는것이구요
    이게 제가 추측해 본건데 맞을까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.25 17:51 신고  댓글주소  수정/삭제

      음... 꼭 자유롭게 저장할 수 있는것이 이미지 뿐이라는 것은 저도 확실히는 모르겠습니다만, 파일 링크를 사파리브라우저를 통해서 여는 것은 맞습니다^^~

      ㅎㅎ물론 시뮬레이터 라이브러리에 이미지를 저장하는 다른 방법도 존재합니다만, 이 방법보다 훨씬 복잡하기 때문에 소량의 이미지를 저장하고 싶다면 저는 이 방법을 추천드립니다..ㅎㅎㅎ

  2. yuyu 2012.06.21 17:35  댓글주소  수정/삭제  댓글쓰기

    완전 멋진 팁 감사합니다~!!^^

  3. 동군~ 2012.11.13 14:48  댓글주소  수정/삭제  댓글쓰기

    감사합니다.


오늘의 주제

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. Favicon of http://blog.daum.net/exlikeus BlogIcon 몰락아티스트 2012.04.23 04:47  댓글주소  수정/삭제  댓글쓰기

    이렇게 열심히 좋은 정보를 힘들게 올려도 댓글하나 없다는게 마음이 아픕니다.
    좋은 정보 올려주셔서 감사하고, 수고하셨습니다^^

  2. Berry 2012.05.02 15:49  댓글주소  수정/삭제  댓글쓰기

    헉헉 이제 여기에 누르면 사진첩 불러오기 카메라 불러오기를 하시겠구나
    하고 스크롤을 내렸는데
    아니 이럴수가요 ...
    다음 시간에라니 ...
    어서 다음 강좌로 넘어가야겠습니다 !!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 15:52 신고  댓글주소  수정/삭제

      ㅋㅋㅋ 너무 빠르신거 아닌가요~
      오늘 다 보면 한참 기다리셔야 할거 같은데요 ㅎㅎ

    • Berry 2012.05.02 15:57  댓글주소  수정/삭제

      할 수 있는 시간이 있을때 최대한 해놔야겠다는
      생각이 번뜩여서 말이죠 ㅎㅎ
      그리고 하나하나 따라하면서
      진행해나가는게 여간 재미있는게 아니라서요!!
      다음강좌가 아쉽게도 올라와있는것중에 마지막이지만
      그것까지 보고난다면
      다시 제가 하고있던 작업에
      지금까지 봐왔던 것들을 하나하나 적용시켜볼 예정입니다
      그리고 C 강좌와 Objective-C 강좌 또한 하나하나 볼 예정이구요 ㅎㅎ 할 일이 아직도 태산처럼 쌓여있네요!!
      제가 yagom님의 blog를 알게된건 참 행운인것 같습니다!
      거듭 감사의 말씀을 드립니다 ㅎㅎ (__)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 17:25 신고  댓글주소  수정/삭제

      아이쿠~
      이렇게 찾아주시는 것만으로도 저는 영광입니다~^^
      시간되면 소주라도 한 잔 하고 싶네요 ㅎㅎ

  3. 리현 2012.07.25 04:29  댓글주소  수정/삭제  댓글쓰기

    Delegate:self

    쪽에 경고 뜨는데 없애는 방법 없나염? 되긴하는에 먼가 찝찝 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.25 09:54 신고  댓글주소  수정/삭제

      헤더에 그녀석의 델리게이트를 하겠다고 명시해 주셨나요?ㅎ
      헤더에서 해당 델리게이트를 맡겠다고 선언해 주지 않으면 경고가 발생합니다..ㅎㅎ

  4. 미스터 2012.08.27 14:23  댓글주소  수정/삭제  댓글쓰기

    덕분에 xocde 가 보다 쉽게 와 닿네요. 정말 고맙습니다.

  5. 딴또 2013.03.13 15:11  댓글주소  수정/삭제  댓글쓰기

    열심히 추천 누르고, 열심히 댓글 달면서 공부하고 있습니다.

    다음 강좌로~~~ !!!

  6. mmbp 2013.04.16 15:06  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 또 막혀서 ㅠㅠ 이번에도 혹시 오타인지 열심히 봤는데,

    myActionSheet = [[UIActionSheet alloc]initWithTitle:@"선택하세요"
    delegate:self
    cancelButonTitle:@"취소"
    destructiveButtonTitle:@"사진찍기"
    otherButtonTitles:@"사진첩에서 고르기", nil];
    이부분에서 "No visible @interface for 'UIActionSheet' declares the selector 'initWithTitle:delegate:cancelButton..." 이라고 나왔습니다. 도무지 어디가 잘못되었는지 알수가 없었지만, 구글에서 해당 에러를 검색했더니 UIAcitonSheet 관련 예문이 있더라구요.
    그걸 복붙해서 :@"" 부분만 수정했더니 됩니다 -_-;
    도무지 이유를 알수 없군요 ㅡㅡ;

    그리고 시뮬레이터에서는 동작을 하는데 iPhone4 ios6.1.3에서는 또 먹통이 되는군요 ㅠㅠ 이유가 뭘까요...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.16 16:36 신고  댓글주소  수정/삭제

      글쎄요;;;
      [[UIActionSheet alloc]initWithTitle:@"선택하세요"
      delegate:self
      cancelButtonTitle:@"취소"
      destructiveButtonTitle:@"사진찍기"
      otherButtonTitles:@"사진척에서 고르기", nil];

      이렇게 해도 안된다는 말씀이신거죠...?

      저 에러는 해당 메소드를 찾지 못했다는건데... 어디서 잘못된걸까요...;;

  7. 새벽다섯시반 2013.06.05 18:12  댓글주소  수정/삭제  댓글쓰기

    이곳에도 글 남깁니다.
    폰 브라우져를 이용해서 이미지를 꾸욱 누르고 있으면 저장이 되잖아요?
    그걸 브라우져가 아니라 일반 페이지에서도 구현 할려면 액션시트를 응용하면되나요?
    정말 감이 안잡혀서 답답해서 질문 올립니다 ㅠ
    혹시 짧게 나마 강좌로 올려주실수 있으신지ㅠ

  8. araza2 2013.09.03 10:30  댓글주소  수정/삭제  댓글쓰기

    cancelButonTitle <-여기에 오타가 있어서 그런듯


오늘의 주제

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. Favicon of https://bikiniline.tistory.com BlogIcon 비키니라인 2012.04.24 13:20 신고  댓글주소  수정/삭제  댓글쓰기

    으음. 그러니깐 딕셔너리는
    c++에서 구조체 같은 거군요 ~! ... 아닌가 ㅠ

    근데 궁금한게 NSArray 를 사용할때요
    2차 배열은 어떻게 만드는지 궁금하네요
    으음... 어차피 배열에는 객체가 들어가는 거니깐..
    2개의 원소를 갖는 배열 객체를 만들고 그 객체를 원소로 갖는 배열을 만들면 그게 2차 배열이려나 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.24 18:04 신고  댓글주소  수정/삭제

      구조체와 생김새는 비슷하지만, 객체라는 큰 차이점이 있고, 내부에도 객체만 들어갈 수 있다는 점이 다르죠..^^
      Objextive-C 에서도 C의 거의 모든 기능을 사용할 수 있습니다. ㅎ 그러므로 C에도 있는 녀석을 굳이 새로 만들 필요는 없겠죠 ㅎ

      NSArray는 기본적으로 다차원 배열을 지원하지 않습니다만, Array의 각 인덱스에 Array를 넣어준다면 그게 다차원 배열이 되겠지요..ㅎㅎ

      항상 들러주시고 관심 가져 주셔서 고맙습니다^^

  2. Favicon of https://bikiniline.tistory.com BlogIcon 비키니라인 2012.04.25 15:23 신고  댓글주소  수정/삭제  댓글쓰기

    c++의 경우에,
    1. A라는 구초체를 만든다 struct A{ 어쩌고 저쩌고 ...};
    2. A형 배열을 선언한다. A array[10];
    이렇게 해두면 사용할때 array[4].어쩌고 = xxx ; 뭐 이런식으로 접근하기도 편하고 값을 바꾸기도 편한데..

    objective c 의 딕셔너리는 좀 복잡하네요...
    NSMutableDictionary형 배열을 만들고 초기화? 해주고... 포함된 객체에 접근하는거 까지는 별 차이 없는데
    내용을 바꿔주는게 복잡하네요 ...

    1. objectForKey메소드를 이용해 오브젝트를 불러온다
    NSNumber *temp2= [numberDic[[string integerValue]-1] objectForKey:@"appearanceCount"];
    2. 형변환을 해준다.
    int a = [temp2 intValue];
    3. 하고싶은 작업?을 한다.
    a++;
    4. 다시 객체화 시킨다.
    NSNumber *b = [[NSNumber alloc]initWithInt:a];
    5. 넣는다 -ㅅ-;;
    [numberDic[[string integerValue]-1] setObject:b forKey:@"appearanceCount"];

    C++의 경우 한줄이면 끝나는걸 무려 5줄씩이나 써야 하네요 ㅠ ㅠ

    질문 1. 이렇게 하는거 맞나요 ..? ㄷㄷㄷ 한두줄에 깔끔하게 끝나는 메소드가 따로 있는지 모르겠네요 ... ㅠ ㅠ

    질문 2. 선언부에서 NSMutableDictionary *numberDic[45];
    이런식으로 배열을 잡았습니다..
    에러도 안나고 워닝도 없고.... 제가 원하는 작업을 잘 수행하는데 이런식으로 써도 무방한가요 .. ?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.25 16:13 신고  댓글주소  수정/삭제

      1. 네, 맞습니다...^^ 숫자를 객체화 시켜 사용을 할 때 불편함이 있지요..^^ 그래서 때에 따라 구조체를 사용하는 방법도 좋은 방법이라고 생각합니다! 각 언어마다의 특징이라고 이해하면 편할듯 하기도 하네요..ㅎㅎ 어떤 언어에서는 이런점이 편하고 이런점이 불편하고 그런것이 있으니까요 ㅎ
      위에서 말씀하신 점은 딕셔너리 보다는 NSNumber의 특성 때문이라고 보시면 될 듯합니다^^~

      2. 사용하신 방법은 딕셔너리 포인터를 C스타일의 배열로 선언하셔서 사용한 것입니다.
      물론 그렇게 사용하셔도 전혀 지장은 없습니다. 포인터 하나하나마다 딕셔너리를 할당하고 초기화 하셔서 사용하시면 됩니다. NSMutableArray를 사용해도 좋지만, 아마 사용하신 방법이 속도는 조금 더 빠를거예요~^^*
      NSMutableArray를 사용하시면 객체 추가 삭제가 훨씬 더 쉽기 때문에 추가 삭제가 필요하다고 하면 이 방법이 더 좋다고 볼 수 있구요... 뭐 다양한 메소드를 이용해서 필요한 기능을 쓸 수 있기 때문에 적절히 판단하셔서 사용하시면 되겠습니다~

      충분히 적절한 답변이 되었는지는 모르겠습니다만, 짧은 지식으로 말씀드렸습니다^^;

      더 부족한 점 있으면 말씀해 주세요~!

      비가 많이 오네요. 동동주에 파전이 땡기는 날입니다 ㅎㅎ

    • Favicon of http://soooprmx.com/wp BlogIcon sooop 2013.06.14 09:58  댓글주소  수정/삭제

      Objective-C에서는 리터럴로 좀 더 간단하게, 배열/사전/숫자(NSNumber) 객체를 초기화할 수 있습니다. 리터럴은 쉽게 말하자면 @"acb"와 같이 축약된 문법으로 NSString을 만드는 것처럼 많이 써왔던 거구요.

      NSArray *anArray = @[ @"a", @"b", @"c"]; // 끝에 nil을 넣지 않습니다.
      NSDictionary *aDict = @{ @"key" : @"value", @"key2" : @"value2" } ; // 키:값 의 순서로 씁니다.

      NSNumber *aNum = @(0.5); // [NSNumber NumberWithFloat:0.5f];와 동일

  3. 인절미후후 2012.06.08 11:03  댓글주소  수정/삭제  댓글쓰기

    이거 그동안 어렴풋이 알면서 쓰던건데 이렇게 정리해주시니 너무 감사합니다.
    제가 자바를 조금 공부했었는데 키와값으로 저장하는거니까 자바의 컬렉션 프레임워크로는 List랑 Map같네요
    뮤터블과 디폴트의 차이도 잘 알게 되었습니다.
    항상 보는쪽의 입장을 잘 배려해주시는 레퍼런스 참조하는 부분을 익숙해지도록 자주 보여주시는것도 너무 좋은 점 같네요.
    픽커뷰 보다가 넘어왔어요
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.08 13:26 신고  댓글주소  수정/삭제

      인절미후후님
      항상 격려의 말씀 남겨주셔서 제가 힘이 솟습니다.
      정말 고맙습니다^^*
      저도 항상 읽는 입장에서 어떻게 하면 쉽게 다가갈 수 있을까 고민을 합니다만... 쉽지는 않네요^^
      부족한 점은 지적해 주시고 필요한 부분은 꼭 말씀해 주세요. 부탁드립니다 ㅎ
      행복한 주말 보내시길...^^

  4. 중동백곰 2012.06.15 19:12  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다..
    저기 제목에서 NSArray, NSMutableDictionary <== 요거 NSMutableArray 가 아닐까 사료되옵니다..

  5. 네모누리 2012.07.17 11:07  댓글주소  수정/삭제  댓글쓰기

    정말 유용하게 보고 있습니다.
    더 이상 강의 안 올라오나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.17 23:58 신고  댓글주소  수정/삭제

      네모누리님~
      관심 정말 고맙습니다 :-)
      요즘 제가 진행중인 프로젝트로 인해서 포스팅을 못하고 있는데 월말쯤 되면 다시 재개할 수 있을 것 같네요 ㅠ_ㅠ
      원하는 부분 있으시면 말씀해 주세요. 틈틈히 준비하도록 하겠습니다~!

  6. 나에게넌 2012.08.13 15:19  댓글주소  수정/삭제  댓글쓰기

    NSNotification 강의 보다가 중간에..링크 타고 발도장 찍습니다..꾸욱

  7. 첼로와짜짜 2012.11.27 14:42  댓글주소  수정/삭제  댓글쓰기

    다 읽었다ㅎㅎㅎㅎ 정말 도움 많이되었습니다. 감사합니다. 또 업데이트되면 들릴께요. 건강하세요.

  8. 2012.12.09 01:55  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.09 12:15 신고  댓글주소  수정/삭제

      이건 C 코드이고, 무엇을 도와달라는 말씀이신지 잘 모르겠네요;;;
      오브젝티브C는 C코드드를 그대로 사용 가능합니다

  9. 무민 2013.01.18 12:13  댓글주소  수정/삭제  댓글쓰기

    설명을 간단명료하게 잘해주셨어요. NSArray, NSDictionary... 다른곳에서 강좌를 봤지만 잘 이해가 안갔었는데 이곳에서 이해하고 갑니다. 고맙습니다.

  10. Favicon of http://www.facebook.com/younhak.kim.9 BlogIcon 꺼북대장 2013.01.28 00:58  댓글주소  수정/삭제  댓글쓰기

    딕셔너리에대해 보다 자세히 배우고 갑니다.
    ~감사합니다.
    새로운 강좌가 기다려집니다 ㅎㅎ

  11. 2013.02.19 21:37  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  12. 여의도 2013.02.20 02:25  댓글주소  수정/삭제  댓글쓰기

    답변 주셔서 감사드립니다. 말씀하신 대로 해보도록 하겠습니다. 당장해보고 싶지만,, 헐,,, 벌써 2시가 넘었네요.... 편히 쉬시구요~~

  13. 2013.02.20 12:57  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.20 14:16 신고  댓글주소  수정/삭제

      T_T 죄송합니다...ㅠ

      제가 지금 병상이라 맥을 사용하기가 어렵습니다...

      몸이 정상이 아니라 코드를 보기가 좀 힘들어요 ㅠ 힘들게 올려주신건데 정말 죄송합니다...ㅠ

  14. 여의도 2013.02.20 14:49  댓글주소  수정/삭제  댓글쓰기

    몸도 안좋으신데 실례가 많았습니다. 쾌차하시길 기원해 드려요,,
    질문드린 내용은 나름 해결해보고 좋은 소식 전해드리겠습니다.
    그럼 또 뵙겠습니다. 꾸벅..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.20 15:19 신고  댓글주소  수정/삭제

      아닙니다..ㅠ
      오히려 제가 도움을 드리지 못해 죄송스러울 따름입니다 ㅠㅠ
      핵심 부분을 메일로 한 번 보내봐 주세요, 다시 한 번 보도록 할게요.
      yagomsoft@gmail.com

  15. 여의도 2013.02.20 17:32  댓글주소  수정/삭제  댓글쓰기

    염치불구하고 메일 보내드렸습니다. ^^

  16. 여의도 2013.02.20 21:54  댓글주소  수정/삭제  댓글쓰기

    명쾌하게 해결해 주셔서 감사드립니다!!
    다음에 또 부탁드릴것 같은데요? ....
    편히 쉬시구요!!

  17. 여의도 2013.02.21 16:43  댓글주소  수정/삭제  댓글쓰기

    메일에 이어서~~~~ ㅎㅎㅎ

    네,, 그렇군요,,,
    그럼, reloaddata를 사용하면 앱이 알아서 데이터를 계속 갱신해서
    화면에 뿌려주는 건가요? (그럼 좋겠네요,,, 당겨서 새로고침 이런거 구현안해도 되니... )
    아니면 앱이 실행되고 한번만 reloaddata가 되는 것인지요?
    ㅎㅎㅎ

    질문은 끝이 없네요...

    아, 생각난김에 당겨서 새로고침 커리큘럼은 어떠세요?
    굉장히 복잡한거 같더라구요..

    수고하시구요~~~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.02.21 19:13 신고  댓글주소  수정/삭제

      :)
      reload를 호출할 때 마다 갱신합니다.
      자동갱신은 하지 않구요...^^;
      지금은 몸이 좋지 않아서 당분간은 추가 연재 계획이 없습니다 ...ㅠ
      한 두 번 도큐먼트 관련해서 포스팅이 진행될지도 모르겠지만... 그 이상은 아직 계획이 없습니다 ㅠㅠ 죄송해요..

  18. Favicon of http://blog.naver.com/yunzeman BlogIcon 사운드오션 2013.02.22 10:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 저희는 온라인_모바일 게임 음원 및 효과음 제작 업체입니다. 저희도 블로그를 운영하는데 yagom님의 심도있는 강좌를 저희 블로그에도 게시 할 수 있을까 해서 문의드립니다.
    아울러 저희가 게시하는 사운드 게시물도 yagom님께서 퍼오셔서 서로 어플 개발자분들께
    좀 더 다양한 정보와 도움을 주고자 합니다. yagom님과 저희가 서로 winwin 할 수 있는 전략적
    파트너가 될 수 있을것 같습니다. 혹 어떠신지 답변 부탁드립니다. ^^ RSS 열린 이웃으로 추가하였습니다.

  19. Favicon of http://sharphail.tistory.com BlogIcon 샤해 2013.03.19 11:32  댓글주소  수정/삭제  댓글쓰기

    덕분에 개념을 확실히 잡을수 있었네요 ㅎㅎ
    다른분들의 comment들도 도움이 되었습니다.
    감사한 마음과 함께 링크좀 담아갈게요 '-'


오늘의 주제

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. Berry 2012.05.02 15:19  댓글주소  수정/삭제  댓글쓰기

    점점 갈수록 신기함을 금할 수 없네요
    하고있는 일에 UI를 입힐때 많은 도움이 될 것 같습니다
    정말 꾸준히 보기를 잘했다는 생각만 드네요 !! ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 15:31 신고  댓글주소  수정/삭제

      ^^...
      이건 뭐 빙산의 일각밖에 되지 않아서 여기에 나오는 내용들을 천천히 보면서 관련 개발문서 보시면 훨씬 더 신세계를 경험하실 수 있을거예요 ㅎ

  2. 쵸뵤쟈 2012.05.11 11:15  댓글주소  수정/삭제  댓글쓰기

    많이 배워갑니다~~

    근데 컬업은 왜 이미지에 적용이 안될까요?? 눌러도 반응이 없네요 ㅜㅜ 로그찍어보면 실행은 되는데 ㅠㅠ

    • 쵸뵤쟈 2012.05.11 11:17  댓글주소  수정/삭제

      헉ㅋㅋ브레이크를 빼먹었네요 ㅎㅎㅎㅎ

      컬업이나 컬다운은 처음에 이미지가 안보일때 쓰면 유용하겠네요 ㅎㅎㅎ
      오늘도 많이 배우고 가요~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.11 13:10 신고  댓글주소  수정/삭제

      ㅎㅎ 해결되셨다니 다행이네요~^^*

      자주자주 놀러오시고 좋은 주말 되시길 빕니다~^^

  3. Sio 2012.07.17 17:15  댓글주소  수정/삭제  댓글쓰기

    애니메이션 동작 커브 설정에서 4가지 다 번갈아 가면서 했는데도
    눈이 옹이구멍인지라 인식 불가 ㅋㅋㅋㅋ
    결국 찾아봤습니다~~ㅎㅎ
    움직여대서 그런지 애니메이션이 제일 재밌네요 ㅋㅋㅋ
    잘보고가니다~!

  4. 리현 2012.07.25 03:29  댓글주소  수정/삭제  댓글쓰기

    오훌 ㅎㅎㅎㅎㅎ

  5. 초보kay 2012.07.27 13:06  댓글주소  수정/삭제  댓글쓰기

    애니메이션 정말 재밌네요! ㅋㅋ
    또 한가지 배우고 갑니다.~

  6. neoaero 2012.08.19 11:12  댓글주소  수정/삭제  댓글쓰기

    OpenGL같은거 사용안하고도 이런 에니메이션들이 가능하는군요..
    그럼 OpenGL같은데 언제 사용하는거죠??^^

    너무 너무 재밌는 강의입니다..최근 날이 너무 더워서..진도가 주춤했네요..!! 아직도 열공중입니다..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.19 12:31 신고  댓글주소  수정/삭제

      안녕하세요 neoaero님~!
      오랜만에 뵙네요 :-)
      저 메소드 내부는 OpenGL로 구현이 되어있습니다.
      저 애니메이션 메소드는 간단한 뷰의 움직임이나 나타냄 없앰 등에 사용하면 좋습니다 :)
      물론 잘 사용하면 그 활용도가 무궁무진하겠지만요 ㅎ
      OpenGL은 좀 더 복잡하고 다양한 애니메이션들을 구현할 때, 좀 더 원하는 그래픽들을 보여줄 때 사용합니다. ㅎ

  7. Parkep 2012.12.31 10:06  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ㅎ

  8. 딴또 2013.03.13 14:39  댓글주소  수정/삭제  댓글쓰기

    감사합니다.

  9. BlogIcon hahahaha 2013.09.02 13:59  댓글주소  수정/삭제  댓글쓰기

    책보다 이 강의가 더 좋은거 같아요 ㅎ

    잘보고 있습니다.

    ios6, xcode 4.6 - storyboard를 써서 해서 어려움이 많은데 적응해보려고 노력중입니다.

  10. MAE 2013.10.01 16:31  댓글주소  수정/삭제  댓글쓰기

    감사합니다 오늘도 많은것을 배웠네요 !

  11. suyoung 2014.02.06 14:32  댓글주소  수정/삭제  댓글쓰기

    sender tag 값이 0만 찍혀서
    스위치문 case 가 실행되지 않네요 ㅠ.ㅠ;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.07 09:11 신고  댓글주소  수정/삭제

      6번째 그림을 보시면 버튼마다 태그값을 넣어준 것을 보실 수 있을거예요.
      버튼마다 꼭 태그값을 넣어주세요 :)

  12. suyoung 2014.02.07 17:11  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 해결했습니다 감사합니다~~


오늘의 주제

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. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.04.16 16:20 신고  댓글주소  수정/삭제  댓글쓰기

    잘 봤습니다!
    빨리 다음거를 원합니다 ㅎㅎ

  2. Berry 2012.05.02 15:01  댓글주소  수정/삭제  댓글쓰기

    점점 흥미로워 지네요 ㅎㅎ!!
    가끔은 배운다는것도 재미가 있다는걸 느낍니다 ...!!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 15:12 신고  댓글주소  수정/삭제

      그 반대의 즐거움도 있겠지요?ㅎ
      근데 요즘 통 못써서 속상합니다 ㅠㅠ
      이번주까지 폭풍 프로젝트라서...ㅎ
      다음주에나 가능할 것 같습니다.

  3. Favicon of https://loveazzing.tistory.com BlogIcon 몹쓸강아지 2012.06.08 17:00 신고  댓글주소  수정/삭제  댓글쓰기

    강좌 너무 감사히 잘보고 있어요..

    그런데 incomplete implementation이라는 경고가 나오는데. 구글링해보니 헤더에서 선언한 메소드가 구현이 안돼 있을경우라고 나오네요. 그런데 아무리 눈을 씻고 봐도 안보여서 다음으로 진행이 안되고 있어요.. ㅠㅠ 푸시버튼을 눌러도 애니메이션을 보여줄 뷰가 안뜨고 있거든요.


    여기서 더 바라는 것도 제 욕심이겠지만, 매번 강좌 올려주실 때 소스도 참고할 수 있게 같이 올려주심 안될까요? 아직 디버깅이 힘든 저같은 초보를 위해서요.. ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.08 18:03 신고  댓글주소  수정/삭제

      프로젝트를 새로 생성해서 했기 때문에 처음부터 차근차근 따라하셨다면 구현이 되어있지 않는 메소드는 없을 텐데요^^;
      죄송하지만 소스코드는 첨부하지 않습니다.
      소스코드를 첨부해드리면 이 블로그가 제가 의도한 방향이랑은 너무 달라지거든요...^^
      코드 올려드리면 저도 편한데, 굳이 캡쳐해서 올리는 이유랍니다...^^
      한 번 더 프로젝트 만드셔서 차근차근 따라와 보시길 바랍니다.
      .h 파일에 우리가 구현해준 메소드는 총 네개 입니다.
      그 중 하나라도 .m파일에 구현되어 있지 않다면 나오는 경고 메세지 입니다.
      그리고 만약 xib 파일에서 File's Owner를 우클릭 했을 때 메소드 연결이 잘 되어있지 않다면 버튼을 눌러도 동작하지 않을 수 있습니다.
      한 번 디버깅에 성공하시면 실력 팍팍 늘게 되실거에요.
      감히 제 생각을 말씀드리는데 도전 해 보셨으면 하는 바람입니다..^^

    • wowjam 2013.07.19 12:28  댓글주소  수정/삭제

      전 이제 서야 이 강좌들을 보고 있어서 오래된 리플들에 리플달고 있네요.
      UINavigationController를 추가 않하셔서 그럴겁니다.
      AppDelegation.m 파일에서
      UINavigationController *myAniViewController = [[UINavigationController alloc] initWithRootViewController:viewController2];
      이렇게 UINavigationController에 두번째 탭뷰를 추가하시고...

      self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, myAniViewController, viewController3, nil];
      이렇게 탭바컨트롤러에 추가하는 부분을 수정하시면...
      push 버튼 누르실때 새 뷰를 오픈하실수 있을겁니다.
      관련 강좌는 여기에서 보실수 있습니다. http://blog.yagom.net/168

  4. 인절미후후 2012.06.11 11:14  댓글주소  수정/삭제  댓글쓰기

    소스코드를 직접 올리지 않으시는 의도를 알게되어 더욱 좋네요.
    저도 중간에 필요한 부분을 보다보면은 잘 못따라가는 부분이 있어서 헤메게 되는데 그 전글을 읽어보면은 다 따라갈 수 있도록 배려해 두셨더라구요. 솔직히 책을 사서 보더라도 이 코드는 인터넷 어디가면 받을 수 있다는 글이 있다며 내용중간에 생략을 하는게 있는데 좀 무책임한거 같아요. 그 코드에 대해서 모르는 부분이 있을 수도 있는건데. 책을 쓰시는분들 고충도 이해하지만 이 코드만 가져다 쓰면 해결되니 알아서 하시오 라는 태도는 약간 주의 해야될 것 같아요.
    ...제가 써놓고도 약간 애매한 글이네요 ...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.11 13:28 신고  댓글주소  수정/삭제

      ㅎㅎ 저는 이 코드 가져다 해보세요... 를 별로 좋아하지 않습니다^^;
      자신이 직접 타이핑하면서 손에 익히고 좋은 습관을 들였으면 하는 바람입니다..^^
      무작정 가져다 쓰면 나중에 자신의 스타일 마져 찾을 수 없게되는 것 같더라구요ㅎ

  5. Sio 2012.07.17 16:42  댓글주소  수정/삭제  댓글쓰기

    재미나네요 애니메이션 효과 ㅎㅎㅎㅎ
    잘만 쓰만 이쁜 앱 만들때 주요할꺼 같아요 ㅎㅎ

    하는데 뭔 오류가 있어서 뭐여이건 하고 봤더니 Freeform Size 가xCode 4.2에선 안된다는것 같네요 ㅡㅡ;;ㅎㅎㅎ
    안될거면 왜있는건지 하는 생각과 함께 얼렁 버젼업 해줘야 겠단 생각이 드네요 ㅋㅋㅋ

    암튼 이번 강좌도 잘보고 갑니다~!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 00:07 신고  댓글주소  수정/삭제

      Freeform Size가 iOS 하위버전에서는 지원되지 않습니다.
      제 기억으로는 iOS5부터였던가... 4부터였던가로 기억합니다..ㅎ
      Xcode버전과는 별개입니다 ^^*

  6. 초보kay 2012.07.27 12:07  댓글주소  수정/삭제  댓글쓰기

    강좌 넘 잘 보았습니다.
    야곰님 따라 ChangeViews, 이 프로젝트에 계속 하나씩 기능을 붙여 나가면 어느덧 아이폰 API Demo가 될듯 하네요.
    잘 보고 갑니다.

  7. 딴또 2013.03.13 14:11  댓글주소  수정/삭제  댓글쓰기

    바쁘신 일정에도 이렇게 좋은 강의를 올려 주셔서 너무 감사합니다.

    열심히 공부하겠습니다. 야곰님께서도 힘내십시오.

  8. 새벽다섯시반 2013.06.05 15:12  댓글주소  수정/삭제  댓글쓰기

    강좌 잘 보고 있습니다.
    따라하다가 AnimationButton 이 부분에서 빨간줄이 갑니다.
    에러내용을 살펴보니 찾을수 없다고 나오는데요.
    제가 처음부터 보고 따라하지 않아서 그런걸수도 있겠지만.
    어디서 저 AnimationButton을 가져다 쓰는지 궁금합니다.
    제가 생각했을땐 Controller에 선언된 AnimationButton을 가져다 쓴다고 생각했는데
    제가 잘못생각한건가요?ㅠ 아이폰 감이 안잡히네요 도와주세요!ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.06.05 16:35 신고  댓글주소  수정/삭제

      구현파일(.m)에서 빨간줄이 나온다는 말씀이신가요?
      헤더파일(.h) 에서 AnimationButton이 @property로 선언이 되었는지 확인해 보세요 :)

      정확히 어느부분에서 어떻게 에러가 나는지 알려주시면 도움이 될 것 같습니다 :)

    • wowjam 2013.07.19 12:32  댓글주소  수정/삭제

      이미 해결하셨을 문제 같은데...
      제 생각엔 .h 에 추가한 프로터티가 .m에 @synthesize가 않된거 같네요.
      @synthesize AnimationButton; 를 @implementation 아래줄에 넣어보세요.

  9. 새벽다섯시반 2013.06.05 18:07  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다.
    헤더파일(.h)에 @property (strong, nonatomic) IBOutlet UIButton *AnimationButton;
    이라구 선언해주었구요.
    구현파일(.m)의 AnimationButton 가 써져 있는부분은 다 빨간줄 가네요 ㅠ

  10. MAE 2013.09.30 17:20  댓글주소  수정/삭제  댓글쓰기

    야곰님 강좌 잘보고있습니다. 덕분에 많은 도움이 되고 있어요 정말 감사드립니다.
    모든 코딩을 하고 빌드를 했는데 autoreleasepool에서 warning이 뜨네요 왜 그럴까요?
    Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<ViewController 0xa287060> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key AppearButton.'
    Xcode5 버전입니다 ㅜ.ㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.30 18:03 신고  댓글주소  수정/삭제

      인터페이스 빌더 또는 스토리보드에서 액션이나 아울렛 연결이 잘못된 것 같습니다..

      이게 버전이 오래된 자료라 iOS 7과 맞지 않을 수 있습니다..^^;

  11. MAE 2013.09.30 18:04  댓글주소  수정/삭제  댓글쓰기

    아울렛 연결이 잘못됐었네요 감사합니다^^

  12. mk 2014.06.19 13:11  댓글주소  수정/삭제  댓글쓰기

    도와주세여 UIButton을 이미지로 변환해서 사용하려는대.
    UIView beginAnimation:nil context:nil];<--context 값에 무엇이 들어가야하나요??이미지파일로 변환해야 할것 같은대.ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.06.20 13:21 신고  댓글주소  수정/삭제

      안녕하세요, context랑은 별개의 이야기 같구요,
      버튼의 backgroundImage를 애니메이션으로 변경하고 싶으신 건가요? 그렇다면 이런 간단한 방법으로는 안될 것 같구요, 따로 라이브러리를 사용하시는게 더 편할거예요.
      질문의 요지를 정확히 파악을 못하겠어요 ^^;



오늘의 주제

1. 페이지 컨트롤 달기 


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

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

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


# 페이지 컨트롤 달기

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

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

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


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

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

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

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

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

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

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

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

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

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



by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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


Posted by yagom

댓글을 달아 주세요

  1. Berry 2012.05.02 14:05  댓글주소  수정/삭제  댓글쓰기

    흠 저만 안되는걸까요 ㅠㅠ
    페이지 컨트롤을 처음에 스크롤뷰에 올려버리는 바람에 (그림만 보고 따라하다가 ...)
    왜안되나 한참 보다가 뷰위에 올리셔야한다는 문구가 가장 처음에 있는것을 보고 (좌절을...)
    새롭게 뷰 위에다가 올려보았습니다
    그뒤 백그라운드 컬러도 블랙으로 바꿔 실행을 해보았지만
    여전히 페이지 컨트롤러 아이가 보이질 않네요 ㅠㅠ
    이글을 보실떄쯤엔 해결했을지도 모르겠지만
    우선은 적어봅니다
    아울렛 역시 위와같이 잘 연결하였습니다!
    무엇이 문제일까요 ... ??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 14:10 신고  댓글주소  수정/삭제

      정렬 위치가 스크롤 뷰 보다 아래여서 그럴 수 있습니다.
      스크롤 뷰에 가려서 밑에 깔리면 안보일 수 있어요..^^
      xib파일 안에서 Objects의 뷰 정렬이 잘 되어있는지 확인해 보세요..^^
      페이지 컨트롤이 스크롤 뷰 보다 아래쪽에 있어야 합니다.

    • Berry 2012.05.02 14:25  댓글주소  수정/삭제

      아하 정렬위치라는개념이 존재하는군요
      혹시 이와 관련된 내용이 포스팅이 되어있나요 ?
      초반부를 보고 중반부를 약간 안본부분이 있어서
      이러한 개념을 파악하지 못했나봅니다 ㅠㅠ
      포스팅이 없다면
      간단한 설명을 부탁드려도될까요 ?
      간단하게 xib 파일안에서 Objects가 아래쪽에 위치할수록
      저희가 보는 입장에선 상단으로 올라가게 되는건가요 ?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 14:29 신고  댓글주소  수정/삭제

      네, 그렇습니다.
      우리가 addSubview 하면 뷰가 위에 얹어지는 것처럼 xib안에서도 아래쪽으로 갈 수록 위에 올라가는 것으로 정렬이 됩니다~^^
      그러니까 Objects쪽에서 위쪽에 위치할수록 실제 화면에서는 아래쪽에 위치하게 되는겁니다.

    • Berry 2012.05.02 14:38  댓글주소  수정/삭제

      아 그렇게 되는게 맞군요!
      또 하나를 알아가네요 ㅎㅎ
      이것을 해보고
      문득 생각이 든게
      page control을 터치할 시 (시뮬레이터에서는 클릭이겠지만요) 해당 페이지로 이동될 수 있도록 할 수 있지 않을까 생각하여 검색을 통해 한번 그것을 구현해 보았습니다
      그런데 페이지가 1에서 3페이지로는 한번에 점프가 안되더라구요 ?
      이것은 원래 지원이 되지 않는것인가요 ?
      아니면 다른 어떤 작업을 병행해주어야 하는것인가요 ?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 14:49 신고  댓글주소  수정/삭제

      ㅎㅎ 원래 오른쪽을 누르면 오른쪽으로 한 페이지, 왼쪽을 누르면 왼쪽으로 한 페이지씩 이동합니다.
      여러 페이지 이동은 해 본적이 없는데, 커스터마이징 할 수 있는 메소드가 있는지 모르겠네요 ㅎ
      개발문서에서 스크롤뷰 델리게이트를 찾아보세요 ㅎ

    • Berry 2012.05.02 15:20  댓글주소  수정/삭제

      역시 그러한 내용들은 저희들의 영원한 동반자 개발문서와 함께해야하는거군요 !!
      한번 뒤적여봐야겠습니다 ㅎㅎ

    • Berry 2012.05.02 15:27  댓글주소  수정/삭제

      개발문서와 어서 친해져야겠습니다 ㅠㅠ
      아직 정확히 제가 원하는 정보를 얻기위해
      어떻게 해야하는지 잘모르겠네요
      검색을 해서 이것저것 눌러보지만
      아직은 도통모르겠네요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 15:33 신고  댓글주소  수정/삭제

      처음에는 누구나 어렵습니다 ㅎㅎㅎ
      저도 처음엔 어리벙벙+_+
      조금 헤집고 다니다 보면 금방 알게되실거예요~ㅎㅎ
      저는 물을 떠먹여 드리진 않겠습니다...^^;
      물론 저도 그 메소드가 있는지 없는지는 지금 모릅니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
      귀찮아서 절대 그런건 아닐걸요...(?)ㅋㅋㅋㅋㅋㅋㅋ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 15:38 신고  댓글주소  수정/삭제

      으악~!
      제가 착오를 드릴만한 댓글을 드렸네요.
      스크롤뷰쪽이 아니라 페이지 컨트롤 쪽에서 봤어야 하는건데...
      하지만... 저도 찾아봤는데 메소드가 없네요..^^;

    • Berry 2012.05.02 15:54  댓글주소  수정/삭제

      ㅎㅎㅎ 신경써주셔서 감사합니다!
      저도 밥상도 차려주길 원하고
      떠먹여주기까지 원하는 그런 질문자가
      되고싶지않네요 ㅠㅠ
      예전에 그렇게 몇번 어려운 고비를 넘기곤했는데
      그뒤 후배들이 그것을 물어볼때는
      도대체 알려줄수가 없더라구요
      그래서 지금은 조금 시간을 넉넉히
      잡더라도 혼자서 해결하고
      어느부분의 문제가 있는데
      어떻게 하면 좋겠냐는 식의
      코멘트만을 조금 요구하는 식으로
      문제들을 해결하려고 노력하고있습니다 ㅎㅎ
      앞으로도 많은것들을 질문드릴수 있도록
      더 많은 공부를 해야겠네요 ㅎㅎ
      그래도 되겠죠 ?!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 17:24 신고  댓글주소  수정/삭제

      물론 언제든지 환영입니다~^^
      자주자주 놀러오세요 ㅎ

  2. 사랑해 엑스코드 2012.07.10 19:05  댓글주소  수정/삭제  댓글쓰기

    좋은거 배워갑니다. ㅎㅎ 야곰님 강의 팬입니다.. 좋은 저녁되세요

  3. Sio 2012.07.17 16:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세욤~!
    음... 세번째 뷰 컨트롤러 위에 페이지 컨트롤을 올리라고 하셨는데요...
    그 세번째 뷰 컨트롤러가 3이 써있는 뷰를 말씀하지는 건가요?
    전 그렇게 하면 마지막 페이지에서만 페이지 컨트롤이 나옴니다;;;;
    음.. 제가 잘못이해한건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 00:06 신고  댓글주소  수정/삭제

      ^^*
      아닙니다. 그 세 개의 뷰가 들어가는 뷰 컨트롤러의 뷰에서를 말씀드린거예요 ㅎ
      맨 위의 그림을 보시면 뷰 컨트롤러의 뷰가 맨 위에 따로 있고
      뷰 3개가 따로 따로 존재하는 것을 보실 수 있습니다.
      어떤 것도 그 위에 속하거나 들어가 있지 않죠.
      물론 뷰 컨트롤러의 뷰에는 스크롤뷰랑 페이지 컨트롤리 올라가 있구요..^^

  4. 리현 2012.07.24 22:23  댓글주소  수정/삭제  댓글쓰기

    ㅠㅠ이미지 확대 보기좀 해주세염 ㅠㅠ 텍스트가 잘 안보여혐 ㅠㅠ

    글구 감사합니다 ㅎㅎㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.25 09:49 신고  댓글주소  수정/삭제

      요게 예전 티스토리 버그라 저도 어떻게 하지 못하고 있습니다 ㅠ_ㅠ
      수정이 불가능해요 ㅠㅠㅠㅠㅠ
      죄송합니다~
      확대 안되는 글들은 몇 개 없을거예요~!

  5. 리현 2012.07.25 00:22  댓글주소  수정/삭제  댓글쓰기

    증감수를 +0으로 하니까 순차적으로 페이지 롤링이 되네요 ㅎㅎㅎㅎ 잼나당

  6. 초보kay 2012.07.27 02:12  댓글주소  수정/삭제  댓글쓰기

    재미나게 배웠습니다.
    페이지콘트롤러에 페이지변화사건을 추가하고 뷰콘트롤러의 보기영역을 조절해보았더니 페이지콘트롤러로도 페이지조종이 잘 되네요. 물론 구글링, 또 구글링 한 결과지요. ㅎㅎㅎ
    자체로 해볼 기회를 주니 더 많은걸 알게 됩니다. 감사합니다.

  7. Lewis6 2013.01.22 11:15  댓글주소  수정/삭제  댓글쓰기

    이번 강의도 감사합니다 ^^
    그런데 저는 [pageCtrl setCurrentPage:currentPage-1]; 부분에서

    pageCtrl 이 선언되지 않은 identifier라고 나오면서

    _pageCtrl로 바꾸라고 해서 그렇게 하니 제대로 되네요.

    분명 .h 에서는 pageCtrl로 선언이 되어 있는데요;;

    왜 그럴까요? ;; ㅎㅎ

  8. 김민국 2013.01.30 12:44  댓글주소  수정/삭제  댓글쓰기

    이게 스트링 보드랑 같은건가요??

  9. 딴또 2013.03.12 16:26  댓글주소  수정/삭제  댓글쓰기

    이미지 확대가 안 되니... 눈이 너무 아프기는 합니다...

    아무튼 좋은 강의 정말 감사합니다.

  10. abcBEAR 2013.09.05 23:47  댓글주소  수정/삭제  댓글쓰기

    안녕하세요,
    항상 강좌 잘 보고 있습니다.

    이번 내용 중에서 추가 되었으면 하는 부분이 있습니다.
    ThirdViewController.xib에서 ScrollView 보다 PageControl이 아래에 위치 해야 됨을 써 주시면 좋을 것 같습니다.
    스크린 샷에 Page Control이 붉은 네모로 표시되어 있긴 한데, 아래 위 순서도 중요한 것 같습니다.
    (제가 이 문제 때문에 헤멨기 때문에 ^^;)

    항상 좋은 강좌 잘 보고 갑니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.09.08 03:23 신고  댓글주소  수정/삭제

      ^^~
      맨 첫줄에 써있는데 아쉽게 놓치신 것 같아요!
      글이 적을 수록 꼭꼭 눌러담아서 한 글자를 놓치면 아쉬울 때가 많죠 :)

  11. myonug 2014.05.12 18:47  댓글주소  수정/삭제  댓글쓰기

    이제막 ios개발을 시작한 초보입니다.
    블로그를 통해 정말 많을 것을 얻고 있습니다.
    정말 감사해요!

    혹시 물어볼 것이 있는데요
    페이징을 위아래로도 지정 해 줄수있나요?

  12. 2017.02.02 14:45  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다



오늘의 주제

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


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

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

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


# 스크롤 뷰 델리게이트

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

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

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

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

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

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

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

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

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

이렇게 로그가 남습니다~

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

잘 생각해 보세요^^*

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




by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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


Posted by yagom

댓글을 달아 주세요

  1. 2012.04.10 15:42  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. Berry 2012.05.02 13:35  댓글주소  수정/삭제  댓글쓰기

    시력이 안좋았는지
    페이지 넘버 매기는 부분을 * 1로 보아 적어놓고 실행하면서 부터
    왜 *1을 하지를 생각하길 반복하며
    결과를 보니 역시나 이상함을 느끼고
    사진을 다시 보았지만
    여전히 *1로 보이는 이 눈을 한탄합니다 ㅠㅠ
    당연히 +1로 생각하고 썼어야하는데
    역시 부족하네요 부족해요 저 자신이 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 14:08 신고  댓글주소  수정/삭제

      ㅠㅠㅠ 확대 안되는 글은 아마 두세개 밖에 없을거예요..
      다시 한 번 죄송합니다.

    • Kimsdn 2012.12.04 23:41  댓글주소  수정/삭제

      *1과 +1 의 차이점 이 단지 1부터 시작하는거와 0부터 시작하는건가요? 몇번해봐도. 둘다 되네요

  3. 초보kay 2012.07.27 02:06  댓글주소  수정/삭제  댓글쓰기

    잘 보았습니다.

    전전강좌에 이어 델리게이트를 두번째로 접하니 개념이 좀 서네요.ㅎㅎㅎ
    그런데 혹시나 해서 ThirdViewController.h파일에서 델리게이트임을 나타내는 <UIScrollViewDelegate>을 지워보았는데도 오유도 없고 실행도 잘되네요.
    다만 달라진건 델리게이트가 지원하는 함수(scrollViewDidEndDecelerating)를 타이핑할때 도움을 주던 힌트같은것이 안보여요.ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 13:10 신고  댓글주소  수정/삭제

      네, 맞습니다.
      꼭 써주지 않아도 상관은 없습니다만, 명시적 의미가 되는 것이죠^^
      또, 명시해 주지 않으면 에러가 아닌 경고를 토해냅니다.ㅎ

  4. wowjam 2013.07.19 08:42  댓글주소  수정/삭제  댓글쓰기

    더하기 1을 해서 사람이 읽기 좋은 페이지 1,2,3 으로 디스플레이하려는게 yagom님의 의도였던것 같습니다. (machine이 인식하는 array 0,1,2 대신에요)

  5. haru 2013.09.17 04:14  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다...

    쉽게 설명을 해주시는데도 아직 따라가기엔 넘 멀다는 걸 느끼네여..ㅠ..ㅠ
    질문이 하나 있는데여..
    이번 포스트에서 델리게이트를 설명하시면서

    NSInteger currentPage = ([scrollView contentOffset].x) / scrollView.frame.size.width +1;

    위의 문장이 좀처럼 해석이 안되서여.. 특히 contentOffset 의 개념이 잘 파악이 안되네여..ㅠ..ㅠ
    위의 문장에 대해 공부를 할려면 어디를 보는게 좋을지 애기좀 해주세여..^^



오늘의 주제

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


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

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

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


# 스크롤 뷰 만들기

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

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


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


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


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


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


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


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

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

빨간 네모를 잘 보세요 ㅎ


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


요렇게 하는거 아시죠?ㅎ


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

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

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

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


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

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

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


그리고 실행~~


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

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

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

사이즈를 411로 해 줍니다.

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


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


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



어때요~ 참 쉽죠잉?ㅎㅎ

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




by yagom

twitter : @yagomsoft

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

RSS Feed 받기   


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


Posted by yagom

댓글을 달아 주세요

  1. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.04.12 20:49 신고  댓글주소  수정/삭제  댓글쓰기

    잘 봤습니다.
    전 스토리보드로 진행해볼려고 했는데 잘 안되네요
    스토리보드 상에서 뷰만 생성하는 방법이 있나요??
    ( 무조건 뷰컨트롤러를 사용해야 하지 않나요??)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.12 21:19 신고  댓글주소  수정/삭제

      ^^* 항상 찾아주셔서 고맙습니다.
      저는 스토리보드를 아직까지 제대로 사용해 본적이 없어서 잘 모르겠네요^^;
      적절한 답변을 드리지 못해 죄송할 따름입니다 ㅠ_ㅠ

  2. 인절미후후 2012.04.19 12:21  댓글주소  수정/삭제  댓글쓰기

    스토리 보드로 만든 어플은 5.0이상만 된다고 하더라구요
    그래서 기존 개발자분들은 잘 사용하지 않는다고..오늘도 열심히 복습 해야겠습니다
    한 열번 보면 야곰님의 글이 제 머리속에 들어오겠죠? ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.19 13:28 신고  댓글주소  수정/삭제

      네 맞습니다~ 스토리보드는 하위 버전과 호환이 되지 않아서 하위호환성을 위하여 제가 사용하지 않아서 사실 아직 잘 모르겠습니다=_=ㅋㅋㅋ

      다음에 짬이 나면 스토리 보드로도 한 번 해보아야 겠습니다..ㅎㅎ

      자주 들러주셔서 고맙습니다^^*

  3. Berry 2012.05.02 13:26  댓글주소  수정/삭제  댓글쓰기

    강좌 잘보고있습니다
    이번에는 사진이 클릭이 안되서
    보고 열심히 따라치는데 힘들었네요 !! ㅠㅠ
    확대하니 글씨가 깨져버려서 ㅠㅠ
    단순한 산수지식이 부족하여
    CGRect하는 부분에서 뭐지뭐지를 한참 처다보고있었던
    저의 모습을 보면서 울분을 터트렸습니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 14:08 신고  댓글주소  수정/삭제

      ㅠㅠ 흑흑 죄송합니다.
      이 글 쓸 때 티스토리 글 작성툴이 버그때문에 사진원본보기가 안돼서요 ㅠ
      그걸 글을 다 쓴 후에야 알았네요...
      흙흙 다시 쓸 엄두가 나질 않아서.. 불편을 드려 죄송합니다..ㅠ

    • Berry 2012.05.02 14:16  댓글주소  수정/삭제

      헉 !! 그냥 넉두리였습니다 ㅠㅠ
      죄송이라고까지 표현을 하시면
      이러한 조크를 할수가없어지는데 말이죠 ㅠㅠ
      저에겐 아주 좋은 강의소와 같은 곳이라
      편하게 말을 적는다는게 !! ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 14:27 신고  댓글주소  수정/삭제

      아녜요 ㅋㅋㅋ 저도 덕분에 이렇게라도 제 하소연 하는거예요 ㅋㅋㅋ

  4. rooney10 2012.06.27 15:38  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 강좌 잘 보고 있습니다. 잘 하고 있는데 소스 삽입하는 부분에서 막히네요..ㅠㅠㅠㅠ

    혹시 소스를 텍스트 파일로 올려주시면 안될까요? 작아서 잘 안보이네요ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.27 17:28 신고  댓글주소  수정/삭제

      죄송합니다 ㅠ_ㅠ
      몇 몇 포스팅이 사진 확대가 되지 않는 티스토리 버그로 인하여 현재 수정이 불가능 합니다 ㅠ_ㅠ
      제가 원본을 가지고 있지 않아서 힘드네요...
      차근차근 한 번 진행해 보시기 바랍니다.
      사진이 확대되지 않는 포스트는 몇 개 없습니다.
      죄송합니다..ㅠ

  5. Sio 2012.07.17 15:07  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎㅎ 100번째 추천을 찍고 갑니다~~!
    잘보고갑니다~!

  6. 초보kay 2012.07.27 10:34  댓글주소  수정/삭제  댓글쓰기

    잘 보았습니다.
    강좌 덕분에 또 한가지 알게 되였네요.

    그런데 스크롤뷰내 컨텐츠의 페이지 수(현재는 3개로 고정)를 정적으로가 아니라 동적으로 변경할수는 없나요?

    그리고 맨첨 강좌제목을 보곤 나름대로 추측하기는 한 페이지내에 배열목록이 현시되며 이 내용물(배열)이
    한 페이지를 넘을때 이 페이지에 자동으로 스크롤이 붙게 하는 내용으루 알았댔는데요.
    한 페이지내에서의 내용물넘침처리를 위한 방법도 있나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 13:15 신고  댓글주소  수정/삭제

      동적으로 변경 가능합니다 ^^*
      kay님이라면 열심히 찾아보시면 충분히 길이 보일것이라 생각이 드네요 ㅎ

      정확히 kay님이 원하는 것이 잘 파악되지 않아 딱 뭐라고 대답을 드리기가 곤란하네용 +_+ㅋ

  7. neoaero 2012.07.31 22:06  댓글주소  수정/삭제  댓글쓰기

    Scroll View를 이용하여 View를 네비게이션처럼 동작할수 있게 만들수도 있군요^^ 감동적입니다. 강좌 계속 열공할게요..^^

  8. 궁금궁금 2012.09.06 01:26  댓글주소  수정/삭제  댓글쓰기

    우와.. 그렇게 여기저기 찾아도 이해하기 어려웠는데, 즐겨찾기 해놓은 이 곳 와서 해결하였습니다. 감사합니다 ^^

  9. asrada 2012.11.03 10:37  댓글주소  수정/삭제  댓글쓰기

    오 스크롤뷰 안드로이드에 비해서는 어렵지만 쉽게쉽게 잘 풀어주셔서 감사합니다~^^
    궁금한게 있어서 하나만 질문할게요~!
    위에서 뷰를 프레임 잡아서 스크롤뷰에 배치하듯이 버튼을 스크롤 뷰에 배치했는데
    그 위에다가 또 버튼을 배치할 수 있을까요?

    즉 스크롤뷰 위에 버튼이 있고 그 버튼 위에다가 버튼을 배치하는 구조입니다.

    이게 가능할까요?? 가능하다면 어떤식으로 구현해야 할까요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.04 23:33 신고  댓글주소  수정/삭제

      안녕하세요 asrada님~
      찾아주셔서 고맙습니다 :)
      스크롤뷰 위에 버튼이 있고, 그 버튼 위에다가 버튼을 배치한다고 말씀하시는 건가요? 으음... Xib나 스토리보드로는 좀 어렵지만 코드로는 쉽게 구현이 가능합니다 ..^^
      버튼 객체를 하나 생성하셔서 올리고 싶은 버튼에다가 addSubview 하시면 쉽게 해결되실 것 같습니다~

      도움이 되었는지 모르겠네요~
      또 찾아주세요 :)

  10. kimsdn 2012.12.03 09:19  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 질문하나드릴께여
    스크롤뷰 옵션에서 size를 freeform으로 변경한뒤
    사이즈를 411로 하라고 하셨는데..

    1. 아이폰5 (ios6)에서는 몇으로 해야하나요??
    2. 사이즈 적는 곳이 정확히 어딘지 ... 알려주세요
    3. 사이즈 411은 높이값을 말하는거 같은데.. 그럼 가로는 몇으로 잡아야하나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.03 09:38 신고  댓글주소  수정/삭제

      1. 아이폰 5와 연동한다고 하신다면... 좀 어렵겠지만
      http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2
      http://www.raywenderlich.com/20897/beginning-auto-layout-part-2-of-2
      를 참고하시면 좋을 것 같구요, 이것과 달리 아예 xib를 따로 만드는 방법도 있습니다.

      2. 질문 전에 다시 한 번 찾아보심이...^^; 화면 우상단쯤 줄자모양의 작은 아이콘이 있습니다.

      3. 아이폰 화면 사이즈는 320*480 입니다. 즉, 가로는 꽉 채울 것이므로 320을 넣어주시면 되겠지요

  11. 초보엑스코더 2012.12.26 09:19  댓글주소  수정/삭제  댓글쓰기

    질문 있습니다~ 스크롤뷰 높이를 411로 지정했는데,

    그럼 그 안에 들어갈 뷰 1,2,3 도 전부 높이를 411로 지정해놓아야 하는 건가요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.26 13:04 신고  댓글주소  수정/삭제

      안녕하세요~ 엑스코더님 :)

      그렇지 않습니다.

      안에 들어갈 뷰는 당연히 크기는 상관이 없지요^^~

      대신에 안에 들어갈 뷰의 크기에 맞게

      스크롤뷰의 contentSize를 조정해 주시면 됩니다~

  12. 여의도 2013.02.08 00:46  댓글주소  수정/삭제  댓글쓰기

    도움이 많이되네요. 감사의 말씀 전합니다.

  13. mmbp 2013.04.12 12:29  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. Xcode 4.6.1에서 해보고 있습니다. 그런데,
    CGSize contentViewSize = CGSizeMake(pagingScrollView.frame.size.width*3, pagingScrollView.height);
    CGSize scrollViewSize = CGSizeMake(pagingScrollView.frame.size.width, pagingScrollView.height);

    이 부분이 에러를 뿜고 있습니다. pagingScrollView는 _pagingScrollView로 고치라길래 고쳤는데,
    width는 No memver named 'width' in 'struct CGRect'라고 하는군요. ...어떻게 수정해야할지 잘 모르겠습니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.12 13:22 신고  댓글주소  수정/삭제

      CGSize contentViewSize = CGSizeMake(pagingScrollView.frame.size.width*3, pagingScrollView.frame.size.height);
      CGSize scrollViewSize = CGSizeMake(pagingScrollView.frame.size.width, pagingScrollView.frame.size.height);

  14. mmbp 2013.04.12 14:15  댓글주소  수정/삭제  댓글쓰기

    빠른 피드백 감사합니다 ^_^;

    꼼꼼하게 본다고 했는데 빼먹은게 많았네요;
    pagingScrollView는 Xcode에서 여전히 _pagingScrollView로 바꾸라고 해서 바꿨습니다.
    다시 한번 좋은 강좌 감사합니다!

  15. 텍쓰트 2013.08.14 15:44  댓글주소  수정/삭제  댓글쓰기

    으아 오랜만에 다시 찾았어요 야곰님!
    이번에 텍스트뷰를 사용해서 텍스트를 입력받게 했는데 영어는입력이 잘되는데 한글입력은
    ㅌㅔㄱㅅㅡㅌㅡ 이런식으로 자음모음이 따로써지는데 이건 맥북자체의 환경설정 문제일까요...?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.08.14 16:21 신고  댓글주소  수정/삭제

      시뮬레이터에 한글자판이 설치되어 있지 않아서 그렇습니다.
      시뮬레이터 자체 설정에 들어가서 다국어 설정에 한글 키보드를 추가해 주세요 :)

    • 텍쓰트 2013.08.16 11:22  댓글주소  수정/삭제

      한국어랑 영어랑 둘다되어있었는데 영어키보드를지우니까 한글이 제대로 써지네요ㅎㅎ
      모르는거 찾아보러 올때마다 정말 큰도움 얻고 갑니다~~
      야곰님수고하세요!

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

한방에 해결해 봅시다 ㅎㅎ

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

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

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

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

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

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




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


Posted by yagom

댓글을 달아 주세요