最近遇到了两个开屏图开发的小小问题。记录下来,方便自己以后查看回顾,也方便可能会遇到的朋友。
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];
}
}