场景:对于具体一款应用,我希望一次设置屏幕方向,以后不用再设置了,我个人都是锁定系统屏幕方向设置,自动对我来说,不是最好,相信很多人都一样.找了下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];
}
提供界面设置,肯定是用 User Default存比较合适,这里就不写了.想人性化一点,提供自动检查:如果是iPhone5,弹出对话框确认翻转.
#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