关于开屏图LaunchImage的坑

最近遇到了两个开屏图开发的小小问题。记录下来,方便自己以后查看回顾,也方便可能会遇到的朋友。

1.开屏图必须按机型放置对应尺寸的LaunchImage

因为在launchImage展示期间会获取屏幕分辨率,所以错误的尺寸会导致获取屏幕分辨率错误,从而导致所有字体变大/播放器获取宽高错误等问题。所以如果遇到类似问题,代码层面没有问题的时候,可以查看launchImage的尺寸是否有错误。

2.弱网环境下开屏广告展示在首页出现之后

开屏广告通常是一张添加在window上的imageView,弱网环境下因为图片下载慢就有可能出现开屏广告展示在首页出现之后的情况。
这种情况下,可以把LauncImage作为背景图建一个viewcontroller,先用这个viewcontroller作为首页,广告展示完成后再替换为真正的首页。这种情况下一定要注意亮点

·避免因广告图片下载不成功导致卡死在LaunchImage,所以出了要在图片下载完成展示的回调中更改首页,还要设置一个超时时间,超过某个时间就要强制进入首页。
·如果app的首页是禁止横屏的,那要注意这个LauncImage作为背景图的viewcontrolle也要禁止横屏,否则在启动的时候横置手机,首页就会横屏显示,如果没有适配,就会导致UI错乱。

LaunchViewController.m

@implementation YSLaunchViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UIImageView *lauchImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, YSAppScreenWidth, YSAppScreenHeight)];
    lauchImage.image = [UIImage imageNamed:@"home_launch"];
    [self.view addSubview:lauchImage];
}

// 如果没有设置整个app禁止横屏,一定要在这里设置改VC禁止横屏,否则进入首页会导致首页横屏
- (BOOL)shouldAutorotate{
    return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
// 可以通过发送通知或者其他方式更改rootViewController
[[NSNotificationCenter defaultCenter] postNotificationName:@"NeedChangeHomePage" object:nil];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 在didFinishLaunchingWithOptions中接收更改rootViewController的通知(已省略其他无关代码)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showHomePage:) name:@"NeedChangeHomePage" object:nil];

    // 设置rootViewController为LaunchImage
    LaunchViewController *lauchVC = [[LaunchViewController alloc] init]; // LaunchImage为背景的VC
    self.window.rootViewController = lauchVC;
    return YES;
}

-(void)showHomePage:(NSNotification *)notifa {
// 如果rootViewController不是首页,进行替换
    if (![self.window.rootViewController isKindOfClass:[MainViewController class]]) {
        self.window.rootViewController = [[MainViewController alloc] init];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从事移动广告商业变现多年,总是觉得产品与商务的同事是一对“欢喜冤家”。站在开发者的角度,关注用户体验最优是无可厚非...
    游社长阅读 8,726评论 2 78
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,252评论 4 61
  • 简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于Chrome Jav...
    张鸽阅读 231评论 0 2
  • “咚咚咚!” “啊啊啊谁啊(睡眼朦胧)” “妈呀8:26了!!!” “真的假的.” “真的呀!!!” “啊啊啊啊啊...
    xiaoNancy阅读 229评论 0 1
  • 宝贝!活在当下觉知每一个当下的发生,负荷就在消融,灵魂就在提升。我们过去老是无意识,其实修行特别简单,就是变得有意...
    李嘉睿阅读 518评论 0 0