iOS个人热点下启动图片显示Bug

最近在做个人热点适配,发现在个人热点连接状态下如果导航栏不隐藏,App启动图会有一个Bug,看了看现在流行的应用,发现好多都有这个问题,虽然只是一闪而过用户很可能都发现不了,但是我感觉还是处理一下比较好。大家还是看看效果吧。

淘宝

京东

饿了么

简书

从这几个应用来看启动图的中心像是被折叠起来了,这个算是苹果的Bug。解决这个问题只让App启动时隐藏状态栏就行了。

隐藏状态栏

但是这样还是有一个问题,拿滴滴出行举个例子

滴滴出行1.png
滴滴出行2.png

滴滴出行在没有广告界面的时候,启动应用会从图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;
        
    }
}

如果你有更好的办法一定要分享给大家哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容