iOS开发程序员iOS开发

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

2016-09-30  本文已影响806人  月下独酌灬

最近在做个人热点适配,发现在个人热点连接状态下如果导航栏不隐藏,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;
        
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读