zoukankan      html  css  js  c++  java
  • 如何获取LanuchImage

    Images.xcassets是Xcode5之后才开始出现的,当我想从Images.xcassets获取启动图片的时候,图片没有获取到。我在写demo的时候从以前工程中拖动了两个启动页测试,一切正常。当我放在正式工程中去的时候发现图片获取不到了。最后我发现原来是图片命名的问题,我以前老工程图片是LaunchImage-700-568h形式的命名,直接就能取到图片,但是新工程不是这种命名方式了。因此我们可以通过使用以下的名称获取到对应图片。程序的appicon直接获取也是获取不到的。

    说明:

    LaunchImage的名字组成形式是这样的:
    [LaunchImage在Assets Catalog中的注册名字]-[iOS版本]-[屏幕方向]-[屏幕高度][比例].png
    如下:

    iOSDisplayImage Name
    iOS5,6 3.5inch LaunchImage
    iOS5,6 3.5inch Retina LaunchImage@2x
    iOS5,6 4.0inch Retina LaunchImage-568h@2x
    iOS7,8 3.5inch Retina LaunchImage-700@2x
    iOS7,8 4.0inch Retina LaunchImage-700-568h@2x
    iOS8 4.7inch Retina LaunchImage-800-667h@2x
    iOS8 5.5inch Retina Portrait LaunchImage-800-Portrait-736h@3x
    iOS8 5.5inch Retina Landscape LaunchImage-800-Landscape-736h@3x

    build后app包里面有一个info.plist,其中有个UIlaunchImages的array,可以通过遍历匹配屏幕尺寸获得图片名称,然后直接imageNamed:方法取得图片。

    show in fonder  打开包内容,打开info就能找到

    LaunchImage在APP初始化完之后会立即消失并显示APP的界面 但是有的时候我们不希望它这么快就消失(比如有的人希望有个过渡效果 有的人希望等某些设置或者数据加载完之后再消失) 这也很简单 我们只要自己把LaunchImage再显示出来并且置顶就OK了

    比如下面这样

    2015-10-15-tips-access-current-launch-image1.gif

    不过我们配置了那么多适用于不同屏幕分辨率的LaunchImage 如何获取适合于当前屏幕分辨率的LaunchImage呢?

    普通的办法是 把所有LaunchImage加入到工程并根据屏幕分辨率来命名 比如(640_960.png 640_1136.png …) 然后在程序中用代码拼接出对应的文件名 并引用

    但是这种办法比较原始 而且万一以后苹果又出了一些其他分辨率的设备 或者启动图发生变化的时候 又需要人工的修改工程配置 不太好 而且还需要多占一份资源(APP的容量又变大啦)

    而stackflow上的Cherpak Evgeny分享了一个更好的办法 直接读取NSBundle中的设置 即可获取当前适用的LaunchImage

    我以上面的图为例写了个演示代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    CGSize viewSize = self.window.bounds.size;
    NSString *viewOrientation = @"Portrait";    //横屏请设置成 @"Landscape"
    NSString *launchImage = nil;
    NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
    for (NSDictionary* dict in imagesDict)
    {
        CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
         
        if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])
        {
            launchImage = dict[@"UILaunchImageName"];
        }
    }
    UIImageView *launchView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:launchImage]];
    launchView.frame = self.window.bounds;
    launchView.contentMode = UIViewContentModeScaleAspectFill;
    [self.window addSubview:launchView];
    [UIView animateWithDuration:2.0f
                          delay:0.0f
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                          
                         launchView.alpha = 0.0f;
                         launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.2, 1.2, 1);
                          
                     }
                     completion:^(BOOL finished) {
                          
                         [launchView removeFromSuperview];
                          
                     }];

    这样就能轻松搞定LaunchImage了~

  • 相关阅读:
    Linux下运行java项目
    Matlab 绘图完整入门
    Matlab命令合集 妈妈再也不用担心我不会用matlab了
    详尽全面的matlab绘图教程
    拉格朗日乘子法 那些年学过的高数
    【转】几款网络仿真软件的比较
    正则表达式30分钟入门教程 ——堪称网上能找到的最好的正则式入门教程
    并发编程详细整理
    高并发通信模型NIO
    Java并发编程的艺术笔记(九)——FutureTask详解
  • 原文地址:https://www.cnblogs.com/yuwei0911/p/6053438.html
Copyright © 2011-2022 走看看