Window 띄우기
원래 앱 개발시, 개발자 레퍼런스나 기타 강좌들을 통해 이런 말을 보게 될 것이다.
"아이폰엔 하나의 윈도우(UIWindow) 만 존재 할 수 있다."
뭐 정확하진 않아도 대강 저런 어조였는데 저건 앱스토어 "앱" 이야기 이고
트윅에선 임의로 여러가지의 윈도우를 띄울 수 있다.
최근에 내가 만들었던 앱다이얼러라던가.. SBSettings 의 설정 화면 등이 UIWindow 를 더 띄운 예이고
추가로 Activator 의 제스쳐 감지도 보이지 않는 최상위 윈도우를 Activator 에서 만들어서 감지한다.
만드는 법은 간단하다.
아! 그리고 일단 UIWindow 는 UIView 의 하위객체란건 알아두자..ㅋㅋ
UIWindow* aWindow = [[UIWindow alloc] initWithFrame:CGRect];
aWindow.windowLevel = 1500;
aWindow.hidden = FALSE;
그냥 저렇게 하면 나타난다...ㅋㅋㅋ
[aWindow makeKeyAndVisible]; 등으로도 나타나게 할 순 있지만 keyWindow 로 만들 것이 아니니까
그냥 hidden값만 바꿔주면 된다. (keyWindow 는 아이폰이든 맥이든 하나만 존재 가능.. 이라곤 하던데 예전에 makeKey 를 남발해도 크게 문제는 없더라.. 단지 자잘한 오류를 경험했기에 비추....)
크기를 전체화면이 아니게 할 경우 윈도우 이 외 부분은 원래 그대로 터치가 되니 윈도우를 하나 더 만들어서 막거나, 애초에 전체화면으로 만들거나 등등 알아서 머리 잘 쓰자..
숨기기와 관련해서.. hidden =TRUE; 가 아니라 alpha 를 0으로 줘서 숨길 경우 잠금화면->홈 화면 으로 갈때 등 특정 상황에서 숨겨뒀던 윈도우 잔상이 나타나는 버그가 있으니 참고.
여기서 끝내긴 아쉬우니, 내가 좀 삽질했던 회전 관련 팁..
View 도 아니고, 애플이 제공하는 틀 안도 아니기에 화면 회전 관련이 좀 불편하다..
기기 방향을 알기 위해서 [[UIApplication sharedApplication] statusBarOrientation] 를 호출 하면 된다.
주석 달아놨으니 참고하자.
반환값은 int 인데
1: 세로 2: 180도 회전 3: 반시계 방향 90도 4: 시계방향 90도
로 기억한다... (3,4 가 바뀔 수 있으니 구분하는게 중요하다면 확인해 볼것. 단지 화면 돌리기만 할 것이라면 밑에 알아서 되어 있으니 신경 안써도 된다.)
그러고 나서 값에 맞게 WIndow 를 돌려줘야 한다.
1,2,3,4 가 각각 어떤 방위인지는 5줄 위에 적어둔 걸로 기억한다. 주석따윈 귀찮으니 알아서 보자..
윈도우는 이렇게 돌려주면 되는데..........................
이게 X 같은게 돌리고 나면 Window 하위로 붙이는 뷰는 회전된 윈도우의 해당 방위에 맞게 알아서 잘 되는데 문제는 Window 자신의 좌표가 좀 꼬인다..
화면을 돌리더라도, 기기 내부 앱이든 뭐든이 회전하더라도 좌표의 기준점, 즉 (0,0) 의 위치가 변하지 않는다! 게다가 x축 y축 방향도 변하지 않는다!!
즉, 90도를 돌린 경우에 사용자가 보는 세로가 그대로 x축이고 가로는 y축.....
좀 다르게 말하자면,, 방위에 따라서 화면 좌측 상단의 좌표(3Gs 기준)가 (0,0) (320,0) (0, 480) (320, 480) 으로 제각각이다.. 크게 상관 없는 사람들도 있겠지만 나의 경우 이 좌표 떄문에 매우 곤란 했었다..
지금 와서 생각해보면 상위에 전체 화면의 윈도우를 하나 더 띄우고 내부에 뷰로 작업하는 것도 괜찮을 것이라는 생각이 든다.. 필요한 사람은 어떻게든 알아서 해보셔~
아 빼먹을 뻔 했다. 화면 회전 이벤트 감지는
SpringBoard 의 noteInterfaceOrientationChanged 이벤트를 체크하면 된다. 이 부분은 알아서..
한참 트윅제작 강의를 하고 계신 deVbug 님이 써주시거나 내가 곧 쓸 수도 있다....
내가 잘못했다거나, 더 좋은 방법이 있지만 몰라서 못 적은 거일 수도 있다.
혹시나 더 좋은 방법, 혹은 다른 팁 등이 있다면 댓글로 살포시........ㅎㅎ 돕고 삽시다 좀!!! ㅋ