개발개발/Mac, iOS

화면 회전 감지하기

iolate 2013. 3. 24. 16:05

보통은 UIViewController 안에서의 메서드나, 따로 노티를 등록해서 감지하지만,

트윅에선 여의치 않거나 저 방법을 쓰기 싫을때가 있다.


각 앱에선 뭘 후킹해야 할지 잘 모르겠고 SpringBoard 에서 후킹해서 노티를 날려주는 방법으로 사용하고 있음.


출처는 MouseSupport 의 소스...ㅋㅋㅋ


%hook SpringBoard

iOS3.2~5

-(void)frontDisplayDidChange

-(void)noteInterfaceOrientationChanged:(int)orientation


iOS6

-(void)noteInterfaceOrientationChanged:(int)orientation duration:(double)duration



iOS6 의 경우 화면회전 되기 전에 호출되는 듯.(아닐 수도 있고)

orientation 인자를 받거나 0.2 초 정도 후에 회전값을 받아오면 된다.


그리고 화면 값 자체는 UIApp([UIApplication sharedApplication]) 의 statusBarOrientation 를 받아왔었는데 원래 그랬는지

iOS6 이후 바뀌었는지 SpringBoard 의 화면회전 상태만을 기억하고 받아오지, 현재 실행중인 앱의 회전 값은 받아오지 않음.

마찬가지로 UIApp의 activeInterfaceOrientation 메서드를 사용하면 정상적으로 받아올 수 있다.

만약 SpringBoard 가 아니라 각 앱에서 노티를 받는다면 크게 상관없을 거고...


iOS6 이전에도 존재했는지는 확실치 안아서 그냥 respondsToSelector 로 넘겼음.