블로그 이미지
안녕하세요~ iolate(a.k.a. isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (171)
Server, Cloud (7)
끄적끄적 (6)
Linux, Ubuntu (26)
개발개발 (45)
Mac, iOS (41)
Embedded (19)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (8)
비공개글 (0)
Total637,442
Today142
Yesterday92

'window'에 해당되는 글 1건

  1. 2011.12.03 Window 띄우기 (3)

Window 띄우기

개발개발/iOS / 2011.12.03 23:12

원래 앱 개발시, 개발자 레퍼런스나 기타 강좌들을 통해 이런 말을 보게 될 것이다.
"아이폰엔 하나의 윈도우(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 님이 써주시거나 내가 곧 쓸 수도 있다.... 




내가 잘못했다거나, 더 좋은 방법이 있지만 몰라서 못 적은 거일 수도 있다. 
혹시나 더 좋은 방법, 혹은 다른 팁 등이 있다면 댓글로 살포시........ㅎㅎ 돕고 삽시다 좀!!! ㅋ 



Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함