最近在做个人热点适配,发现在个人热点连接状态下如果导航栏不隐藏,App启动图会有一个Bug,看了看现在流行的应用,发现好多都有这个问题,虽然只是一闪而过用户很可能都发现不了,但是我感觉还是处理一下比较好。大家还是看看效果吧。
从这几个应用来看启动图的中心像是被折叠起来了,这个算是苹果的Bug。解决这个问题只让App启动时隐藏状态栏就行了。
但是这样还是有一个问题,拿滴滴出行举个例子
滴滴出行在没有广告界面的时候,启动应用会从图1的状态变为图2的状态,时间很短,但是还是感觉用户体验不好。以下是我个人的解决办法。
首先我们需要获取启动图片,给UIImage添加一个分类方法
/*
* 获取App启动图片
*/
+ (instancetype)getLauchImage {
NSString *launchImage = nil;
NSArray *imageDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
for (NSDictionary * dict in imageDict) {
launchImage = dict[@"UILaunchImageName"];
}
return [UIImage imageNamed:launchImage];
}
然后在viewDidAppear中present一个控制器,_isHotSpot是防止死循环的,并且是在热点连接的状态下才present(实际上是通过用启动图片挡住这种从图1转换成图2的视觉效果,说白了就是欺骗用户,哈哈)。
/*
* 只能在viewDidAppear执行才有效果
*/
- (void)viewDidAppear:(BOOL)animated {
if (_isHotSpot == NO && [UIApplication sharedApplication].statusBarFrame.size.height == 40) {
BWV *vc = [[BWV alloc] init];
[self presentViewController:vc animated:NO completion:^{
UIImageView *imgview = [[UIImageView alloc] initWithFrame:self.view.bounds];
imgview.image = [UIImage getLauchImage];
[vc.view addSubview:imgview];
[vc.view bringSubviewToFront:imgview];
}];
dispatch_async(dispatch_get_global_queue(0, 0), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[vc dismissViewControllerAnimated:NO completion:nil];
});
});
_isHotSpot = YES;
}
}
如果你有更好的办法一定要分享给大家哦!