티스토리 뷰

iOS

iOS ) windowLevel

Zedd0202 2018. 7. 28. 14:15
반응형

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

오늘은 windowLevel이란걸 들어서...! 공부해보려고 해요.

windowLevel이라는게 있는지도 몰랐다는 ^_ㅠ.....



windowLevle은 UIWindow의 인스턴스 프로퍼티인데요,

windowLevel을 알려면, UIWindow를 아셔야합니다.

UIWindow에 대해서는, UIWindow. 그리고 UIView라는 글에서 공부를 했었는데요. UIWindow에 대해서 잘 모르시는 분들은 Apple공식 문서나 저 글을 참고하셔서 알고오시길 바랍니다.


간단하게 UIWindow에 대해서 요약하자면, 


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

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

새로운 프로젝트에는 컨텐츠를 표시할 수 있는 메인 Window가 있습니다. (AppDelegate.swift에 있음)

Window는 "액자". View는 그 액자에 끼워넣는 사진. -> 이라고 저 글에 적아놨는데, 음.. 하나의 앱에서 여러개의 window를 가질 수 있으니 이 예는 적절하지 않을 수도 있겠네요. 


정도..?


이 window에, level이 있는 것 같은데...그것이 바로 오늘 공부할 windowLevel입니다.

layer의 zposition같은 느낌인가? 

windowLevel의 정의는 "window의 z축 위치"라고 하네요.


widowLevel은 z축을 따라 window를 상대적으로 그룹화(relative grouping)를 제공합니다. 동일한 windowLevel에 할당된 모든 window는, 다른 windowLevel에 할당된 모든 window 앞(또는 뒤)에 나타납니다. 주어진 windowLevel내에서 window를 정렬하는 것은 보장되지 않습니다.

이 프로퍼티의 기본값은 normal입니다. 가능한 다른 windowLevel의 목록은  UIWindow.Level를 참고하세요.


그렇다면..또...UIWindow.Level에 대해서 공부를 해야겠네요.

UIWindow.Level은 window간의 상대적인 위치를 나타내는 "위치"를 나타내는데요,

level의 stacking(레벨이 쌓이는거..?)은 각 level내에 window를 stacking하는 것보다 우선시합니다. 즉, level의 맨 아래에 있는 window조차도 다른 level의 맨 위에 있는 window를 가립니다. level은 가장 낮은 것 부터 높은 것 순으로 나열됩니다.


이 구조체의 타입 프로퍼티로는 normal, statusBar, alert가 있네요.

- normal : 기본값. 앱의 기본 window를 포함하여 대부분의 콘텐츠가 이 level을 사용합니다. 

- statusBar : status window의 레벨. 이 level의 window는 앱의 기본 window상단에 표시되지만, alert아래에 표시됩니다.

- alert : alert view의 레벨. 이 level의 window는 status Bar 위에 나타납니다.


헉................지금 프로젝트 하나 만들었는데, Xcode 10으로..





이게 안생기네요...???....

이렇게 늦게 알다니;;;;;;ㅎ

신기해ㅔ서 말해봐씀ㅎ


암튼 한번 봅시다. 


print(self.window?.windowLevel)


AppDelegate.swift의 didFinishLaunchingWithOptions에서 windowLevel을 출력해봤습니다.

그러면..!

0.0이 나오게됨. 엥 왜 갑자기 소수점;;?


typealias UIWindowLevel = CGFloat


이기 때문.

아까 기본이 normal이라고 했으니..normal이 0.0인가보네요.

사실 이걸로 뭐 엄청난거..!!!!!를 할 수 있는건 아니고...

저도 잘 모름 ㅎㅎ..


뭐 예를들어 아까 UIWindow.Level에 있는 타입 프로퍼티의 정의?들을 보고 뭐 한가지는 할 수 있을 것 같네요.

alert가 statusBar보다 windowLevel이 "위"에 있다고 그랬죠? 

그렇다면 만약에 statusBar "위"에 어떤 View가 오게 하고 싶ㅇ다!!!

그러면



self.window?.windowLevel = UIWindowLevelAlert


이렇게 해주면??


이게 지금 무슨소리일까요. 내 window의 windowLevel을 alert로 만들어주겠다는 소리죠?



그러며는 이렇게 statusBar가 없어짐 ㅎㅎ..

이것도 windowLevel을 출력해보면zzz뭔가 저는 normal이 0.0이니까 statusBar가 1.0이고 alert가 2.0뭐 그런건줄 알았는데..

alert는 2000.0이 나오네요.

statusBar는 1000.0입니다.


self.window?.windowLevel = UIWindowLevelStatusBar


그리고 이렇게 하면, statusBar랑 level이 똑같게 하는거니까 statusBar가 나올 줄 알았는데,

그리고 위 alert로 지정해줬을 때랑 똑같은 결과가 나오네요. (statusBar가 안나온다는 말.)

왜지..!!^_ㅠ..

"동일한 windowLevel에 할당된 모든 window는, 다른 windowLevel에 할당된 모든 window 앞(또는 뒤)에 나타납니다. 주어진 windowLevel내에서 window를 정렬하는 것은 보장되지 않습니다."

-> 이것때문인가




아무튼..windowLevel이 있는지도 몰랐는데...ㅎㅎ

어떤 것을 의미하고 정말 별거 아니긴 하지만..이걸로 뭘 할 수 있는지..!! 알게 되었네요 :)

도움이 되었길 바랍니다 XD..

반응형

'iOS' 카테고리의 다른 글

iOS 12 Beta 설치 방법  (0) 2018.07.31
iOS ) UIStatusBar  (5) 2018.07.28
iOS ) StoreKit  (10) 2018.06.25
iOS ) hitTest  (16) 2018.06.13
iOS ) UIApplication  (3) 2018.05.27