场景:对于具体一款应用,我希望一次设置屏幕方向,以后不用再设置了,我个人都是锁定系统屏幕方向设置,自动对我来说,不是最好,相信很多人都一样.找了下API和GOOGLE,好像api也没有很好的方法,UIDevice的orientation是readonly,但有人认为私有的,可以去set.那我就不用你吧.因为iphone5的耳机插孔是向下的,我必须将我的应用翻个180度...
设计:设置状态条的方向和使用transform旋转一下window.不翻状态条的方向,会出现键盘也不会跟着翻.如果只是翻了某个view,那么会出现其它view不会翻.对于我的具体情况,翻window最简单.
代码简单,几行:
UIApplication *application=[UIApplication sharedApplication]; [application setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown]; application.keyWindow.transform=CGAffineTransformMakeRotation(M_PI);
恢复:
UIApplication *application=[UIApplication sharedApplication]; [application setStatusBarOrientation:UIInterfaceOrientationPortrait]; application.keyWindow.transform=CGAffineTransformIdentity;
值得注意的是:app退回后台再进入app前台,状态条的方向不是app退出后台前的方向,也就是此时状态条改回了portrait时的状态.所以应在- (void)applicationDidBecomeActive:(UIApplication *)application要验证一下当前状态是否要反向
if (isUpsideDown) { [application setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown]; }
#import "LKDevice.h" #include <sys/types.h> #include <sys/sysctl.h> @implementation LKDevice + (NSString *)platform{ size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *str = [NSString stringWithUTF8String:machine]; free(machine); return str; } +(NSUInteger)iPhoneVersion{ NSString *platform=[LKDevice platform]; if ([platform hasPrefix:@"iPhone5"]) { return 5; }else{ return 0; } } @end