if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = orientation;
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
這段代碼可以用來(lái)在用戶已經(jīng)鎖定屏幕旋轉(zhuǎn)的情況下, 進(jìn)行強(qiáng)制旋轉(zhuǎn)屏幕, 雖然這樣用并不明智, 但是為了滿足需求, 確實(shí)需要使用這樣的方法, 在近期開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)了這樣的問(wèn)題, 在APP從后臺(tái)切入前臺(tái)后的這個(gè)方法中:
- (void)applicationDidBecomeActive:(UIApplication *)application
進(jìn)行強(qiáng)制屏幕旋轉(zhuǎn)會(huì)造成
- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;
- (void)applicationWillEnterForeground:(UIApplication *)application;
會(huì)造成這幾個(gè)方法再執(zhí)行一遍;
最終的現(xiàn)象就是前后臺(tái)通知回調(diào)走了兩次, 從而造成各種莫名其妙的bug, 所以建議這種調(diào)用蘋果私有API的情況盡量不要出現(xiàn)