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

说明:

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

iOS Display Image 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了

比如下面这样

不过我们配置了那么多适用于不同屏幕分辨率的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了~

转载于:https://www.cnblogs.com/yuwei0911/p/6053438.html

如何获取LanuchImage相关推荐

  1. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  2. 淘宝获取单笔订单信息服务端调用API及流程

    淘宝获取单笔交易接口(文档地址):https://open.taobao.com/api.htm?docId=54&docType=2 调用接口所需依赖(文档地址):https://devel ...

  3. 使用ajax不刷新页面获取、操作数据

    在使用jsp或html时,利用ajax达到不刷新页面就可以获取.操作数据. 首先上代码 (html+js) 在此处需要引入jquery插件 <!-- 这是页面部分 html--> < ...

  4. Go 学习笔记(79)— Go 标准库 net(获取本机IP地址)

    1. 获取本机 IP 地址 package mainimport ("fmt""net" )// 获取本机网卡IP func getLocalIP() (ipv ...

  5. Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)

    1. 示例 1 package main import ("context""fmt""go.etcd.io/etcd/clientv3"& ...

  6. Redis 笔记(06)— set 类型(向集合添加元素、获取集合元素个数、判断集合中是否包含某个元素、删除给定元素、返回集合中所有元素、计算集合的交集、并集、差集)

    Redis 的 set 集合内部的键值对是无序的唯一的.它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL .当集合中最后一个元素移除之后,数据结构自动删除,内存被回收. ...

  7. Redis 笔记(05)— hash 类型(设置获取单个hash值、判断hash键是否存在、设置获取多个hash值、获取所有hash的键、获取所有hash的值、删除hash指定键)

    Redis 的字典是无序字典.Redis 的字典的值只能是字符串,当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收. hash 结构也可以用来存储用户信息,不同于字符串一次性需要 ...

  8. Redis 笔记(04)— list类型(作为消息队列使用、在列表头部添加元素、尾部删除元素、查看列表长度、遍历指定列表区间元素、获取指定区间列表元素、阻塞式获取列表元素)

    Redis 的列表是链表而不是数组.这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n). 当列表弹出了最后一个元素之后,该数据结构自动被删除, ...

  9. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)

    字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...

最新文章

  1. 用Python发一个高逼格的朋友圈
  2. 《ANTLR 4权威指南》——2.1节从ANTLR元语言开始
  3. centos6.8 安装mysql_Centos6.8通过yum安装mysql5.7
  4. Windows 安装android studio的完整教程
  5. DAZ studio 4.9基础
  6. MySQL数据类型之BLOB与TEXT及其最大存储限制
  7. PickerView
  8. 仓库管理软件中的账套是什么意思
  9. WINDOWS2008 SERVER服务器上网实战
  10. 华硕win10键盘失灵_win10笔记本键盘失灵
  11. HDLBITS笔记32:有限状态机二(Fsm3comb、Fsm3onehot、Fsm3、Fsm3s)
  12. 二叉查找树(BST)专题
  13. 黑客突破防火墙常用的几种技术(转)
  14. MySQL之SELECT函数
  15. 个人免签收款系统-支付宝,直接入账到个人账号,没第三方
  16. 老人智能手表方案/案列/APP/小程序/网站
  17. 用MATLAB画nyquist图时,怎样只花出一半的图?
  18. 石化能源行业工业互联网智能工厂解决方案
  19. 编辑为什么建议转投_sci编辑建议转投应该接受吗
  20. 社区发现-Fast Unfolding

热门文章

  1. 海信计算机怎么开机,将海信电视连接到计算机的步骤_计算机的基本知识_IT /计算机_信息...
  2. SpringBoot项目在Gitee的控管步骤
  3. [过年菜谱之]清蒸鲍鱼
  4. c语言 syn扫描,syn flooder*** (C语言)
  5. Mysql Docker 主从配置
  6. mysql做wp网站_mysql做wp网站
  7. cmd对应linux sleep命令,linux的sleep命令
  8. oracle 循环select查询的结构集,执行insert到指定表保存
  9. 冷热分离和直接使用大数据库_「系统架构」如何通过分离冷热数据提升系统性能?...
  10. php隔行符,PHP PHP_EOL 换行符