如何获取LanuchImage

 

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

说明:

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

 

iOSDisplayImage Name
iOS5,63.5inchLaunchImage
iOS5,63.5inch RetinaLaunchImage@2x
iOS5,64.0inch RetinaLaunchImage-568h@2x
iOS7,83.5inch RetinaLaunchImage-700@2x
iOS7,84.0inch RetinaLaunchImage-700-568h@2x
iOS84.7inch RetinaLaunchImage-800-667h@2x
iOS85.5inch Retina PortraitLaunchImage-800-Portrait-736h@3x
iOS85.5inch Retina LandscapeLaunchImage-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了~

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值