手工设置iphone5的屏幕方向

场景:对于具体一款应用,我希望一次设置屏幕方向,以后不用再设置了,我个人都是锁定系统屏幕方向设置,自动对我来说,不是最好,相信很多人都一样.找了下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





你可能感兴趣的:(手工设置iphone5的屏幕方向)