IOS最好要设置系统默认启动页面,不然进入应用就会突然闪现黑色画面

下图是我们要实现的效果:

总体思路:设置一个系统默认启动页面,在进入didFinishLaunchingWithOptions时,

给Window添加自定义启动页,其初始画面和系统启动页一样。

可在自定义启动页实现一些动画,动画结束后,将自定义启动页移除。

一.设置系统默认启动页

现在,新建项目会自动生成LaunchScreen.storyboard启动页面文件。

来到项目根目录  点击General  找到以下:

发现除了直接设置Launch Screen File,还能够设置Launch Image Source来实现添加启动页面。

所以我们来使用这种方式来实现吧。使用Assets.xcassets添加图片,

1.LaunchScreen.storyboard我们用不到了,可以将其删除。同时第三行将Launch Screen File设为空。

2.第二行,点击User Asset Cattalog  -> Migrate:  此时Luanch Images Source会变为  Brand Assets

但这不是我们需要的。因此,点击右边的箭头,进入Assets.xcassets, 在AppIcon那边右键,选中

App Icons&Launch Images->New IOS Launch Images,此时在右侧会出现很多可填入图片的框框。

之后返回将第二行选中LuanchImage,设置完成后结果如下图所示。

现在给刚才新建的LaunchImage添加图片就能够展示系统默认的启动画面了。

网上很多教程都是到此为止,到底该如何添加图片却不知道了。如何设置图片请往下看。

(导致的结果就是添加了图片后出现上下都有大块黑边的情况或者没有图片展示)

二.设置系统启动页图片

LaunchImage里面的内容如下,并且我已经把对应的图片分辨率标注出来了。

(为了适配不同大小的屏幕,除了Landscape横屏,总共需要五张不同分辨率的图,已经用颜色区分了)

 iPhone X / iPhone Xs 新增了一张 1125 × 2436 尺寸的

 iPhone Xs Max 新增了 1242 * 2688 尺寸

   iPhone Xr 新增了 828 1792 尺寸

然后是不同尺寸设备所使用的图片(这个名称只是为了更好的对应起来,将图片放入LaunchImage对应位置)

这里的逻辑坐标系(分辨率)大小可以理解为获取到的 [UIScreen mainScreen].bounds.size大小.

所以将上述5种分辨率图片对应放入,就能够实现正常的系统默认启动页了。

(注意:不将这些添加到项目里,直接拖动到LaunchImage的对应位置就可以了,在目录下

Assets.xcassets/LaunchImage.launchimage你能看到自动生成的对应特定名称的图片,共7张)

三.自定义页面UIView

1.设置背景

系统默认启动画面结束之后,显示的就是我们添加在Window上的自定义UIView。

为了画面的流畅性,背景依然需要设置为和启动画面一样的图片。

针对不同的设备,系统默认的启动画面会显示不同的图片,如果我们手动去判断赋值UIView背景,未免有些麻烦。

我们可以通过NSBundle中的infoDictionary的"UILaunchImages"获取当前使用的LaunchImage。

上述获取到的为一个字典数组DicArrays,其数量会随着你添加的LaunchImage图片而改变。

这里我列出适配所有屏幕(DicArrays数量为4)时获取到的DicArays.  如下表格:

因此我们只需遍历出对应大小和方向的UILanuchimageName的值就可以了。

-(NSString *)getCurrentLaunchImageNameForOrientation:(UIInterfaceOrientation)orientation{NSString *currentImageName = nil;CGSize viewSize = self.bounds.size;NSString* viewOrientation = @"Portrait";if(UIInterfaceOrientationIsLandscape(orientation)){viewSize = CGSizeMake(viewSize.height, viewSize.width);viewOrientation = @"Landscape";}NSArray *imageDicts = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];for (NSDictionary * dic in imageDicts) {CGSize imageSize = CGSizeFromString(dic[@"UILaunchImageSize"]);  //将字符串转换为SizeNSString *orientation = dic[@"UILaunchImageOrientation"];  //取得方向if(CGSizeEqualToSize(viewSize, imageSize) && [orientation isEqualToString:viewOrientation]){currentImageName = dic[@"UILaunchImageName"];  }}return currentImageName;
}

获取到名称后,就可以直接通过该名称给UIImage赋值了。

2.设置图标和名称

有没有注意到上面的示意图里,"抽屉新热榜"的图标和文字是一直存在的,之后背景色改变为其他图片。

我的想法是将抽屉新热榜的图标和文字覆盖在最上层。在系统默认启动图完成后,视图的结构如图所示。

(红圈内,从左到右分别是顶层的图片+文字,进行动画的UIImageView, UIView本身的背景图片)

由此可知,我们需在默认的UIVIew最顶端添加和背景图片离位置一模一样的图标和文字,以保证从系统的LaunchImage跳转到自定义页面,其中的内容是不会变化的。然而启动画面有多种尺寸,所以需要将图标按照一定的比例添加到UIView上。所以启动画面最好也要以某一比例来进行内部的图标、文字设计。

但是由于没有美工,我想到了一个办法。直接先将图标、文字、背景按照一定比例布局到UIView上,然后给不同模拟器截图。

(我的布局:  正方形图标宽度、高度均为屏幕宽度的1/6    图标y值为屏幕高度1/7)

在4、4.7、5、5.5英寸模拟器上,切换到最大窗口(Command+1)后  截图(Command+S)就能够获取想要的比例

在3.5英寸模拟器上,Command+ 1 为: 640 * 960        Command+3 为:  320*480

这样不但得到了启动图片,你也有了最上层图片和文字的布局。

3.网络请求和沙盒保存

现在整体做好了,还有一个功能,是在客户端内可更换网络图片,在下次重新进入应用后生效。

所以涉及到了网络请求NSURLSession和沙盒,这里省略并作一些记录。

使用TaskDownloadSession等相关对象

a.实现了block,就无法进入协议中,而delegate的协议可以进行恢复下载、实时进度等控制.

b.实现进度控制的协议里 totalBytesExpectedToWrite为-1 解决办法:

NSMutableURLRequest *request;

[request setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];

见StackOverFlow : MBProgressHUD with NSURLConnection

源码以及说明详见GitHub: YFSplashScreen

转载于:https://www.cnblogs.com/yffswyf/p/5585157.html

【IOS】模仿抽屉新热榜动态启动页YFSplashScreen相关推荐

  1. 动态启动页用gif能实现吗_[前沿科技] 微信启动页变脸的背后,你可知背后的秘密?...

    日前,为庆祝"风云四号"正式交付用户投入使用,微信启动页开始"变脸",由此前的JPG静态图换成了GIF动态图片,这也是微信6年来首次"换脸" ...

  2. iOS APP项目图片尺寸大全(启动页、icon、App Store展示图片)

    iOS项目开发中需要用到很多的项目图片其中启动页.icon.App Store展示图等的尺寸较多一下我会汇总出来各种尺寸 1.启动页尺寸 以上红圈里面是首页版APP启动页的尺寸大全,iPad不需要支持 ...

  3. 动态启动页用gif能实现吗_GIF制作工具|手机制作GIF

    点击蓝字 关注我们 你们还在为斗图时没有表情包而发愁吗? 你们还在局限于手机里的表情包吗? 那今天我们就来看看制作GIF的软件吧! 一起来制作属于你的专属GIF动图吧! 话不多说,咋们一起来看看吧! ...

  4. 全网首发 自媒体人的秘密武器——即时热榜上线

    在自媒体行业高温不减的当下,热点就是流量.效率就是金钱,如果你真的想要做好自媒体,那么,即时热榜--这个追热点的绝密武器,你必须要知道. 第一,聚合100+平台.1000+热门榜单 作为一个聚合类资讯 ...

  5. NLP 实战 (7) | 热榜算法更新

    更新日志 2022/09/15 热榜 v3.7.3.8 上线: 增加文章因为分享带来的站外访客因子: 加入新增的前沿技术相关标签,并设置权重. 贡献者:@卢昕 2022/09/08 热榜 v3.7.3 ...

  6. 使用webmagic爬取新浪微博热榜

    这里没用用新浪微博给的官方api,直接使用webmagic爬取,网页版的有反爬虫策略,爬起来困难,这里爬取的是移动版本. 经过分析微博的请求找到请求进行爬取. 这里写的爬取热榜前30页的数据. pac ...

  7. android dialog 隐藏状态栏_Flutter-最近搞了个项目-启动页Splash,Navigator.pop无法关闭Dialog...

    上一篇做了个总体简单记录总结 MonkeyLei:Flutter-最近搞了个项目(常用控件,第三方基本库)-底部导航,登录,启动画面,webview等 . 完事了后以为没什么事情,然后点击登录会显示加 ...

  8. 快手616战报首发,次抛精华引新浪潮,快品牌跃入热榜top3

    2022年快手616实在购物节圆满收官.据悉,本次616实在购物节品牌商家GMV同比去年616增长达到515%,美妆.生鲜.数码家电打破新的日销记录. 飞瓜快数将从10大垂直品类出发,分别挖掘此次爆款 ...

  9. 这一年人们都在搜索什么?谷歌发布2020年度搜索热榜,「新冠病毒」高居榜首

    CDA数据分析师 出品 编译:Mika [导读]谷歌发布2020年的搜索热榜!来看看今年大家都在关心什么吧. 当感到疑惑.不确定时,人们就会去寻找答案.如今遇到这种情况,只需将问题输入搜索引擎即可. ...

  10. 2021年三季度中国生物制品行业A股上市企业营收排行榜:智飞生物业绩突出,8家企业新上榜(附热榜TOP42详单)

        榜单解读: 2021年三季度中国生物制品行业共有42家(截至2022年1月22日)A股上市企业披露三季报,总计营收986.9亿元,同比增长7.52%(2020Q3共有45家生物制品上市企业), ...

最新文章

  1. Bellman-Ford 算法
  2. tim指定保存云服务器_阿里云发布 Cloud Toolkit for VS Code 新版本!一键打包部署,开发提速 8 倍...
  3. 很多人都不知道的小秘密,c++中拷贝分为两种
  4. 2张表,轻松搞定你的收入问题
  5. 并不是所有SAP产品的UX,都得遵循Fiori UX风格
  6. 中英翻译(基于百度翻译)
  7. 数组 spark_结合实例理解Spark中的cache()
  8. Tomcat是如何将请求一步步传递到我们编写的HttpServlet类中的
  9. 【业务建模_5】数据分析师技能梳理
  10. 参数编码 完全解决方案 (转)
  11. Python之print语句
  12. H5点击复制到剪贴板
  13. linux源码编译ipk,OpenWrt-SDK-编译生成ipk软件包
  14. windows环境下布置定时任务
  15. H3CNE、H3CSE考试总结
  16. 《窈窕绅士》里的诗句
  17. 黑苹果的开机开不起来的解决方法
  18. 构建技术影响力 5.0
  19. 面向集团客户云计算运营平台的市场情况及产品发展——之云计算运营平台方案(二)
  20. Ubuntu安装eclipse

热门文章

  1. Matlab建的模型如何导入MS中,lammps输出的模型如何导入MS中建模
  2. 敲笨钟 分数 20作者 陈越单位 浙江大学
  3. 从PCC到MIC(2)
  4. THE TWENTY-EIGHTH DAY
  5. 【PSO三维路径规划】基于matlab球面矢量粒子群算法无人机三维路径规划【含Matlab源码 1682期】
  6. 计算机如何安装cpu风扇,从零开始学装机 教你如何安装CPU风扇
  7. java 判断是否夏令时_Java日期夏令时的问题
  8. Apache架设代理服务器
  9. 域名解析、域名转向的作用
  10. Listener-session的钝化与活化