如何从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的,依次类推

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

时间: 2024-09-29 21:31:14

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

修正iOS从照相机和相册中获取的图片 方向

修正iOS从照相机和相册中获取的图片 方向 修正iOS从照相机和相册中获取的图片 方向 使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrientationLeft,在使用的时候会出现图片顺时针偏转90°.使用fixOrientation方法修正这个问题. - (UIImage *)fixOrientation { // No-op if the orientation is already correct if (self.imageOri

Android中获取选择图片与获取拍照返回结果差异

导语: 如今的安卓应用在选择图片的处理上大多合并使用拍照和从相册中选择这两种方式(当然这是产品dog的事,开篇跑题...) 今天在写一个这样的功能模块遇到一个尴尬的问题,同样是拍照获取图片功能,在同事的三星上跑没问题,但是在我的手机上一跑就崩(吐槽一下国产厂商对android的系统级改造真是太大,连错误日志都打不出来,还有老板啥时候给我配个测试机呗),下面是在某型手机上测试的报错结果 错误报告: 10-21 17:41:43.634: E/AndroidRuntime(32683): FATAL

C# 从类库中获取资源图片,把图片资源保存到类库中

/// <summary> /// 获取资源图片 /// </summary> public class AssemblyHelper { #region 常量 /// <summary> /// 程序集名称 /// </summary> private static string CurrentAssemblyName = Assembly.GetExecutingAssembly().GetName().Name; #endregion #region

Swift中获取相册图片与保存到相册

关于这个网上目前位置记录的资料比较少,记录一下这个坑 获取相册图片 1: var iPC = UIImagePickerController() 2: iPC.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum 3: iPC.delegate = self 4: presentViewController(iPC, animated: true) { () -> Void in 5: print("complete

Java实现正则匹配HTML中获取的图片链接

package demo; import java.io.File; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo {

系统相册中获取gif图片 保证取到的图片不会改变

NSURL *imageRefURL = [info valueForKey:UIImagePickerControllerReferenceURL];                                        ALAssetsLibrary* assetLibrary = [[ALAssetsLibrary alloc] init];                    void (^ALAssetsLibraryAssetForURLResultBlock)(ALAss

Ios 应用的启动图片该怎么做

从App Store创建伊始,苹果就一直在推广一个观念:iOS app上架后,它的应用的启动图片(你打开应用第一眼看到的)应该仅仅是一个中间屏幕,仅此而已.引用苹果的人机界面指南如下: "一个启动文件或启动图片的作用是,当应用启动时提供给iOS系统的一个简单的图片占位符.这个图片占位符给用户一个印象:你的应用是快速的.有反应的,因为一点开应用它会立即展现,且很快被应用的第一屏替换." 问题是,相当多的人(包括我自己)忽略了这条准则.如果你对此感到好奇,可以看看上面的封面图,或者把所有运

android 获取本地图片(二)

链接上一篇博文 本篇博文接着讲述本地图片的获取. 下面给出获取本地图片的异步线程类LoadLoacalPhotoCursorTask的代码: /** * 获取本地图片的异步线程类 */ public class LoadLoacalPhotoCursorTask extends AsyncTask<Object, Object, Object> { private Context mContext; private final ContentResolver mContentResolver;

分分钟解决iOS开发中App启动广告的功能

前不久有朋友需要一个启动广告的功能,我说网上有挺多的,他说,看的不是很理想.想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏广告,另一种是下面露logo的,类似网页新闻的启动广告.依赖SDWebImage主要用来下载网络的广告图片,一般项目里面网络图片都用的这个框架,所以在此不做过多的阐述.下面让我们来看看我封装的过程,对于新手来说,可以学习一下这种封装的思想. 1.首先建一个继承View的LBLaunchImageAd