티스토리 뷰

iOS

iOS ) UIWindow. 그리고 UIView

Zedd0202 2017. 11. 8. 13:07
반응형

안녕하세요 :) Zedd입니다.

오늘은 UIWindow와 UIView에 대해서 공부를 해볼거에요.



위 사진들은 UIWindow, UIView라고 검색하면 바로 볼 수 있는 사진들이에요. UIWindow위에 UIView가 올라가 있는 모습을 볼 수 있죠. 

프로젝트를 새로 하나 만들어볼까요?

Single View Application으로 하나 만들면, 메인 스토리보드에 Viewcontroller가 딱 하나가 있죠?



바로 이렇게요.

이거는 어떻게 구성되어 있나 볼까요? 



자. 저~기 위에 사진처럼 UIWindow위에 UIView가 있는 것을 볼 수 있네요.

그럼 이것만 보면..

아..! UIWindow가 UIView의 부모구나..!!!라는 생각이 들 수 있습니다.




..는 정말 오해입니다. 

은근히 많은 분들이 착각하고 계실 것 같아요.

UIWindow가 UIView의 부모라구요.

하지만..

오히려 UIView가 UIWindow의 부모입니다.


그럼 UIWindow는 뭐하는 녀석이지?

한번 보겠습니다.



UIWindow




UIWindow는 사용자 인터페이스에 배경(backdrop)을 제공하고, 중요한 이벤트 처리 행동(behaviors)을 제공하는 객체입니다.

Windows는 자신의 시각적 모습(visual appearance)을 가지고 있지 않지만, 앱 View의 프레젠테이션에 중요합니다.

스크린에 나타나는 모든 View는 Window로 묶여 있으며, 각 Window는 앱의 다른 View와 독립적입니다. 

앱에서 받은 이벤트는 처음에는 해당 View개체로 라우팅되고, 해당 이벤트는 해당 View로 전달됩니다. 

Windows는 Viewcontroller를 사용하여 방향 변경을 구현하고, 앱 작동의 기본요소인 다른 많은 작업을 수행합니다. 

Windows는 앱의 기본요소이지만, 코드에서 최소한의 방식으로 상호작용합니다.

UIKit는 대부분의 Window관련 상호작용을 처리하며, 필요한 경우 다른객체를 사용하여 많은 앱의 행동(behaviors)을 구현합니다.

그러나 앱에서 다음을 수행해야합니다.


1. 앱의 콘텐츠를 표시할 기본 Window를 제공해야합니다.

2 .(필요한경우) 추가 콘텐츠를 표시하기 위해 추가 View를 만드십시오.




Xcode가 대신 앱의 기본 Window를 제공합니다. 새로운 iOS프로젝트는 스토리보드를 사용하여 앱의 View들을 정의합니다.

스토리보드는 Xcode템플릿이 자동으로 제공하는 app delegate객체에 window속성이 있어야 합니다. 



따라서 사용자의 노력없이 새로운 프로젝트에는 컨텐츠를 표시할 수 있는 메인 Window가 있습니다


대부분의 앱은 기기의 기본화면에 앱의 콘텐츠를 표시하는 하나의 Window만 있으면 됩니다. 추가 Window를 만들어 기기의 기본화면에 표시할 수 있지만, 추가 Window는 연결된 외부 디스플레이에 콘텐츠를 표시하는데 더 일반적으로 사용됩니다. 

앱의 콘텐츠를 위한 Window객체를 제공하는 것 이외에도 다음과 같은 몇가지 작업을 위해 Window객체를 사용합니다.


1. Window의 z축 레벨을 설정합니다. 이는 다른 Window와 관련된 Window가시성(visibility)에 영향을 미칩니다. 

2. Window를 표시하고 키보드 이벤트의 대상으로 지정합니다.

3. 좌표값을 Window좌표계로 변환하거나, Window좌표계에서 변환합니다.

4. Window의 root Viewcontroller변경하기

5. Window가 표시되는 스크린 변경하기


UIWindow를 하위 클래스로 만들 필요는 거의 없습니다.

Window에서 구현할 수 있는 행동(behaviors)타입은 일반적으로 상위 레벨 Viewcontroller에서 보다 쉽게 구현할 수 있습니다.

하위클래스로 만들려는 몇가지 경우 중 하나는 becomeKey()또는 resignKey()메소드를 재정의하여 Window의 Key상태가 변경될 때 사용자 정의 행동(behaviors)을 구현하는 것입니다. 






이까지가 UIWindow의 정의와 간단한 Overview였는데요, 조금 이해가 가시나요? 더 간단하게 설명드리면, iOS앱은 모든 View들의 컨테이너 역할을 하는 UIWindow인스턴스를 하나 가지는데,(app delegate에 정의되어있죠?) UIWindow는 UIView의 하위클래스 이므로 Window는 그 자체가 View라고 할 수 있어요. 

Window는 눈에 보이는 내용은 없지만, 앱의 View에 기본 컨테이너를 제공해요. 

Window에 추가한 View를 Window의 하위View(subView)라고 하는데, 또 이 Window의 하위View 또한 하위View를 가질 수 있어요. 

좋은 예시를 봤는데, Window는 "액자"라고 할 수 있어요. View는 그 액자에 끼워넣는 사진을 생각하시면 될 것 같아요. 


사실 길게 설명했지만, 오늘은 딱 하나만 알면됩니다. UIWindow는 UIView의 하위클래스이다. 

헷갈리지맙시다. 이제!!!

UIWindow와 UIView를 헷갈리는 사람들에게 도움이 되었으면 하네요 :)


반응형