苹果IOS8系统会根据APP的启动图来判断开发者是否对iPhone6和6plus大屏幕进行适配,有两种方法设置启动图:第一:用Xcode生成的LaunchScreen.xib进行启动图设置;第二:将launchImage所需要的各种屏幕启动图进行设置。
iPhone 6+除外,其他所有iPhone的PPI是一致的,都是326,用@2x的素材。
但是6+的实际DPI是401,理论上苹果应该用401/326 * @2x=@2.46x的素材。但是这个奇葩的比例对开发者而言很难切图。所以苹果为方便开发者用的是@3x的素材,然后再缩放到@2.46x上,实际上是缩放到2.46/3=83%。实际上苹果选取了一个接近比例的87%。
这样算下来,物理分辨率和虚拟分比率的比例是87%,也就是1920/0.87=2208,1080/0.87=1242.
好处就是开发者更方便,比如准备素材时,字号可以直接调成3x的。
Iphone 6 PLUS 按照实际的PPI以及物理点尺寸只能显示这么多像素(1920*1080),更准确的应该是 宽度401/163*414=1018.49 高度 401/163*736 = 1810.65
//屏幕宽度
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
//屏幕高度
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
//视图在不同屏幕下宽度放大比率 (以320为基准)
#define WidthRate ((int)ScreenWidth == 320 ? 1.0:(((int)ScreenWidth == 375) ? (750.0/640):(1242.0/640*2.0/3)))
//视图在不同屏幕下高度放大比率 (以568为基准)
#define HeightRate (((int)ScreenHeight == 480 || (int)ScreenHeight == 568) ? 1.0:(((int)ScreenHeight == 667) ? (1334.0/1136):(2208.0/1136*2.0/3)))
//修复视图位置 大小- (void)fixView:(UIView *)view
{
if (view.subviews.count != 0) {
for (UIView *v in view.subviews) {
[self fixView:v];
}
}else{
view.frame = CGRectMake(view.frame.origin.x*WidthRate, view.frame.origin.y*HeightRate, view.frame.size.width*WidthRate, view.frame.size.height*HeightRate);
NSLog(@"修复后 %f %f %f %f", view.frame.origin.x,view.frame.origin.y, view.bounds.size.width,view.bounds.size.height);
}
}
- (float)fixTextSize:(float)size
{
NSLog(@"%f", WidthRate*size);
return WidthRate*size;
}