오늘의 주제

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로 똑같이 진행하시면 될 것 같아요... 'ㅁ'