如何从Images.xcassets中获取启动图片,导致模拟器上下有黑色缺失的原因

之前没有在意过这个问题,一直接手的都是老项目,最近开了新项目,要求:

启动图片加载完成之后,会有一个loading页面,loading页面跟启动页面的情况相同

因为要适配7,8 所以就放到了Images.xcassets中的LaunchImage

写了一个工具类去判断屏幕尺寸而加载不同的图片

+ (UIImage*)lanuchImageWith:(NSString*)imageName
{
  NSString* newImageName = nil;
  if (kIPHONE5) {
    newImageName = [imageName stringByAppendingString:@"-568h"];
  }
  else if(kIPHONE6){
    newImageName = [imageName stringByAppendingString:@"-667h"];
  }
  else if (kIPHONE6_PLUS){
    newImageName = [imageName stringByAppendingString:@"-736h"];
  }
  else{
    newImageName = imageName;
  }
  
  return [UIImage imageNamed:newImageName];
}

通过方法调用

UIImage *image = [CZLanuchTool lanuchImageWith:@"Default"];

因为我的图片命名都是以Default开头的

但是通过这个方法返回的图片却为nil, 查看到newImage 确实有名字,但却无法加载到图片

但是把图片放到Image.xcassets外部却可以得到,搞了半天还是没能找出原因,后来在官方文档中找到了原因 

如果你想要访问Image.xcassets中的启动图片必须要用下面的命名方式:

if (kIPHONE5) {
 newImageName = [imageName stringByAppendingString:@"-700-568h"];
 }
 else if(kIPHONE6){
 newImageName = [imageName stringByAppendingString:@"-700-667h"];
 }
 else if (kIPHONE6_PLUS){
 newImageName = [imageName stringByAppendingString:@"-800-Portraint-736h"];
 }
 else{
 newImageName = [imageName stringByAppendingString:@"-700"];
 }
 
 return [UIImage imageNamed:newImageName];

在前面方法调用的时候只能使用LaunchImage

UIImage *image = [CZLanuchTool lanuchImageWith:@"LaunchImage"];

也就是说,只要你在Image.xcassets放入了启动图片,不管你的命名方式是怎么来的,都要按照: LaunchImage-700 / LanuchImage-800-Portraint- 这种方式进行拼接之后才能取得到 启动图片

 

启动图片我是是直接放到了Image.xcassts中的,那么在启动的时候系统会自动的去加载相对应尺寸的图片,但如果缺失了呢,那么就会依照这样的原则:

如果4s的启动图片没了,那么启动图片也就没了,是黑色的

如果5的启动图片没了,启动的时候会去寻找4s的启动图片

如果6的启动图片没了,启动的时候就会去寻找5的,如果5也没,那就去找4s的,依次类推 

大的分辨率使用小分辨率的图片,就会导致上下会有黑色的部分缺失

posted @ 2015-06-03 14:12  痘印子  阅读(269)  评论(0编辑  收藏  举报