美文网首页CRAnimationiOS项目
在代码中获取LaunchImage

在代码中获取LaunchImage

作者: Hogantry | 来源:发表于2015-11-27 17:01 被阅读1333次

    转帖自:http://adad184.com/2015/10/15/tips-access-current-launch-image/
    启动图(LaunchImage)的管理其实在iOS开始中算比较简单的了 尤其是Xcode引入了xcassets之后 完全是傻瓜式的操作 但是有的时候我们还是需要在Launch Image上做文章
    LaunchImage在APP初始化完之后会立即消失并显示APP的界面 但是有的时候我们不希望它这么快就消失(比如有的人希望有个过渡效果 有的人希望等某些设置或者数据加载完之后再消失) 这也很简单 我们只要自己把LaunchImage再显示出来并且置顶就OK了
    比如下面这样


    不过我们配置了那么多适用于不同屏幕分辨率的LaunchImage 如何获取适合于当前屏幕分辨率的LaunchImage呢?
    普通的办法是 把所有LaunchImage加入到工程并根据屏幕分辨率来命名 比如(640_960.png 640_1136.png …) 然后在程序中用代码拼接出对应的文件名 并引用
    但是这种办法比较原始 而且万一以后苹果又出了一些其他分辨率的设备 或者启动图发生变化的时候 又需要人工的修改工程配置 不太好 而且还需要多占一份资源(APP的容量又变大啦)
    而stackflow上的Cherpak Evgeny分享了一个更好的办法直接读取NSBundle中的设置 即可获取当前适用的LaunchImage
    我以上面的图为例写了个演示代码
    CGSizeviewSize =self.window.bounds.size;
    NSString*viewOrientation =@"Portrait";//横屏请设置成 @"Landscape"
    NSString*launchImage =nil;
    NSArray* imagesDict = [[[NSBundlemainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
    for(NSDictionary* dictinimagesDict) {
        CGSizeimageSize =CGSizeFromString(dict[@"UILaunchImageSize"]);
        if(CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]]) {
            launchImage = dict[@"UILaunchImageName"];
        }
    }
    UIImageView*launchView = [[UIImageViewalloc] initWithImage:[UIImageimageNamed:launchImage]];
    launchView.frame=self.window.bounds;
    launchView.contentMode=UIViewContentModeScaleAspectFill;
    [self.windowaddSubview:launchView];
    [UIViewanimateWithDuration:2.0f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState
    animations:^{
        launchView.alpha=0.0f;
        launchView.layer.transform=CATransform3DScale(CATransform3DIdentity,1.2,1.2,1);
    }
    completion:^(BOOLfinished) {
        [launchView removeFromSuperview];
    }];
    

    这样就能轻松搞定LaunchImage了~

    相关文章

      网友评论

      本文标题:在代码中获取LaunchImage

      本文链接:https://www.haomeiwen.com/subject/mjvdhttx.html