iOS개발하기 #15. 화면전환(1)

# 오늘의 주제

1. 뷰 위에 뷰 얹어보기 

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

지난 번까지는 네비게이션 컨트롤러에 대해 알아보고, 주석다는 방법에 대해 좀 알아보았습니다.
요즘들어 너무 바빠서 몸이 다섯개라도 모자랄지경입니다 ㅠㅠ 포스팅도 너무 뜸한거 같아 슬프네요 ㅠㅠㅠ

자 그럼 오늘은 화면을 바꿔보는 방법 중에 하나인 뷰 얹고 없애기를 한 번 해보도록 할게요~
스따뚜~~~~~~~~~~~~

## 새로운 프로젝트 생성

지난 번 까지는 iOS5에는 최적화되지 않은 코드였습니다. 물론 최적화되지 않은 코드들에 대한 설명은 거의 하지 않았으니 헷갈릴까 걱정하실 필요는 없습니다용 ㅎㅎ

일단 새로운 프로젝트를 생성합니다~

Tabbed Application 을 선택합니다~

이 프로젝트로 꽤 오랜시간 포스팅 진행하게 될 듯 합니다 ㅎㅎ


저는 프로덕트 이름을 ChangeViews 라고 해줬습니다!

그리고 여기서 지난번이랑 다른점은 Use Automatic Reference Counting에 체크하는 거예요~ 

짜잔~ 프로젝트가 만들어 졌습니다요 ㅎㅎ

한 번 실행시켜 볼까요?ㅎ

지난 번과 똑같이 두 개의 탭을 가진 탭 기반 애플리케이션이 자동으로 생성되어 있네요 ㅎ

화면 좌측에 네비게이션영역의 ChangViews그룹에서 우클릭 또는 Ctrl+클릭을 하여 New File...을 선택하여 줍니다.

그 후에 ThirdViewController라는 이름의 뷰컨트롤러 하나를 만들어 줍시다.
 


자, 그 후에 FirstViewController.xib 파일로 이동합니다. 그리고 우측 아래쪽에 Objects 중에 View를 살짝 끌어서 First View 위가 아니고 격자모양처럼 표시되어있는 FirstView '바깥'영역으로 끌어옵니다.

그러면 네모칸 안에처럼 view와 view가 서로 포함되지 않게 나오게 됩니다~ 즉, 원래있던 View안에 새로 넣은 View가 포함되지 않게 해야 합니다 ㅎ
그리고 오른쪽 메뉴중에 자 모양으로 생긴 메뉴로 가면 뷰의 크기를 조절할 수 있어요~ 280 * 100으로 만들어줘 봅시다~

속성탭으로 가서 배경색은 검은색으로 바꿔주구요~

Objects에서 Round Rect Button 하나를 쭈욱 끌어옵니다. Title은 Remove로 바꿔보았습니다~ 이 버튼을 누르면 이 뷰가 뿅하고 사라질 때 쓰일거예요 ㅎㅎ

그리고 원래 있던 FirstView쪽에 Add라는 Title을 가진 Round Rect Button 하나를 만듭니다~ 이 버튼은 새로운 뷰를 위에 얹을 때 쓸거구요 ㅎ

이왕 이렇게 된거 숨기기 보이기 버튼도 하나씩 만들어 봅시다~

이제 메서드를 만들어 주어야겠죠?ㅎ
FirstViewController.h 헤더로 옵니다.
아래와 같이 코드를 넣어봅시다~

@property 줄은 새로 만들어진 View랑 연결해 줄 녀석이구요~

그 아래 메서드 네개는 버튼들과 연결해줄 녀석들입니다.

이제 구현파일 FirstViewController.m으로 와서 

@property했으니, @synthesize로 받아주어야겠죠?ㅎ

그 아래 메서드 네개를 구현해 줍니다.

여기서 잠깐! #pragma mark - View Control Methods 라고 써놓은 부분!

이건 말 그대로 마크 해놓는 건데요~

요기 표시해 놓은 부분부터 다음 표시 부분까지는 View Control Method 라고 개발자가 표시해 놓는 겁니다.

요렇게 만들어 놓으면 나중에 코드가 아무리 길어져도 관련 메서드들을 쉽게 찾아 볼 수 있어요^^

어떻게 찾냐구요?

화면 중간 위쪽을 보시면 지금 빨간 네모 만든 부분을 클릭해 보세요~ 다들 눌러보실 것으로 알고 다음 설명은 생략합니다^^ 눌러보시면 답 나오거든요 ㅎ

이제 아까 구현해 놓은 녀석들을 연결해 줄 차례입니다~
File's Owner에서 우클릭 또는 Ctrl+클릭 으로 드래그 앤 드롭으로 새로 만든 View로 끌고옵니다~

Outlets에 onView에 클릭!

정상적으로 연결이 되면 앞에 동그라미가 생겨요~

이제는 반대로 File's Owner에서 오는게 아니라 버튼을 오른쪽버튼 드래그 앤 드롭 합니다. 또는 Ctrl키를 누른 상태에서 드래그 앤 드롭!
 

Add버튼이니까 addView와 이벤트를 연결합니다.

자, 그런데 이 방법 말고 또 다른 방법들을 소개합니다!
이벤트를 연결하기를 원하는 버튼에서 우클릭! 또는 Ctrl+클릭!
하게되면 아래 그림과 같이 Event와 Outlet 등을 연결할 수 있는 참이 똻!!!!!!!!!!

그러면 자신이 원하는 이벤트 또는 아울렛의 오른편에 보이는 빈 동그라이 있지요?
거기서 누르고 File's Owner쪽으로 드래그 앤 드롭 해봅니다~  버튼은 통사아Touch Up Inside 이벤트를 주로 사용합니다.

그 반대로 File's Owner쪽에서 우클릭 또는 컨트롤 클릭하여 연결해 주는 방법도 있습니다!

이벤트는 Touch Up Inside로! 물론 다른거 해보셔도 됩니다 ㅎㅎ 어떤 결과가 나오는지 직접 해보세요^^
이렇게 세가지 방법을 소개해 드렸습니다~ 이 세 방법중에 편한 방법을 골라서 쓰시면 될 것 같네요 ㅎ

자, 정상적으로 다 연결되고 난 후에 File's Owner를 우클릭 했을 때 뜨는 창의 모습니다.
전부 잘 연결 되셨나요?^^


자, 제대로 다 되셨으면 실행시켜 봅시다~

과감히 Add버튼을 클릭!!
 
오이잉??
창이 지멋대로 이상한데 붙어버리네요 ㅎㅎ
제대로 잘 붙도록 조정해 줘야겠네요~

자 FirstViewController.m 구현파일로 이동합니다~

addView 메서드에서 한 줄을 더 추가해 줍니다~

자~ 다시 실행~~

이쁘게 잘 나오나요?ㅎㅎ

자, 그럼 여기서 동작을 잘 살펴봅니다!

Add버튼으로 화면 위에 붙인 녀석은 Remove로도 화면에서 없어지고, Hide로도 없어집니다! 그쵸?

그런데 Hide로 없어진 녀석은 Add해도 다시 나타나질 않습니다~

그리고 Remove로 없애고 나서 Show해도 안나타 납니다!!

오이잉??? 도대체 왜 이런일이???

똑같이 화면에서 없어지고 나타났는데, 동작이 될때가 있고 안될때가 있다???

애매~~~~~~합니다잉~~~~~~

자, 잘 생각해 봅시다용 ㅎㅎ

아까 작성해둔 코드를 보게 되면

addView: 메서드 안에는

addSubview: 라는 메서드가 들어가 있습니다.

이말인 즉슨, 어떠한 view위에 sub(하위) view를 추가하겠다.

말 그대로 '새로운 하위 뷰를 얹어넣겠다' 라는 뜻이겠죠?

하지만 showView: 메서드 안에는 setHidden: 이라는 메서드가 사용된 것을 보게 됩니다.

말 그대로 '숨기지 않겠다!' 이런 뜻이겠죠? 

자, 다시 생각해 봅니다!

addSubView는 원래 없는 녀석이 새롭게 뷰 위로 얹혀진다는 것을 알게 됩니다!
하지만, Hidden은 말 그대로 투명으로 없어져 있어서 눈으로만 안보일뿐 원래 있는 녀석이 보이게 되는 것 뿐입니다!

그 반대로 생각해 봅니다~

removeFromSuperview메서드는 있던 녀석을 뷰 위에서 아예 없애버는 것이구요,

hidden해버리면 우리 눈에만 안보이고 뷰 위에 계속 얹혀있는 상태가 되는 겁니다.

그렇기 때문에 add버튼보다 show버튼을 먼저 누르게 되면, 새로운 뷰가 얹혀져 있지 않은 상태이기 때문에 화면에 나타나지 않게 되는 것이고,

hidden으로 숨겨놓고 add해버리면, 이미 화면위에 얹혀져 있기 때문에 프로그램은 이미 얹혀져 있고 보이지만 않는 것을 다시 얹을 필요가 없으므로, 그상태 그래도 놔두게 됩니다. 즉, 우리 눈에는 보이지 않아도 컴퓨터는 위에 얹혀져 있다는 것을 알기 때문에 동작하지 않는 것입니다.

이해 가시나요?

여튼, 상황과 때에 따라서 이렇게 뷰를 얹고 없애고 보이게 하고 안보이게 하고... 이런식으로 컨트롤 할 수 있다는 것을 간략히 보여드렸습니다!

다음 번에는... 또 뭘 해볼까요?ㅋㅋ

아직 할것은 태산인데 말이죠 ㅎㅎㅎ

댓글 남겨주세요!

by yagom

---

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

RSS Feed 받기   

댓글 남기기

Close