iOS精华实例之App启动插画的自定义过度

简介: 转载请注明出处,保留原帖地址及作者署名. Url:http://blog.csdn.net/ysy441088327/article/details/8852304 Author:余书懿 引言: 精华实例是博主我新开设的一个专题,这个专题主要介绍一些在iOS应用中非常值得实践的例子.

转载请注明出处,保留原帖地址及作者署名.

Url:http://blog.csdn.net/ysy441088327/article/details/8852304

Author:余书懿



引言:

精华实例是博主我新开设的一个专题,这个专题主要介绍一些在iOS应用中非常值得实践的例子.

欢迎大家转载和传播,但请保留原著出处.因为我随时可能会更新以及纠错.

我希望每一个阅读精华实例的开发者能够从中受益,并且熟练的运用这些技巧. 

那么作为你们呢,在阅读完这篇文章以后,请尽量留下你的建议和看法. 这是我持续改进文章的一个主要方式.

精华实例的章节到底会有多少篇,这个我也很难预料,不过只要是我认为值得写的,我都会写出来. 让大家共同学习和成长!

开篇的废话比较多,下面开始进入正文:



什么是App启动插画的自定义过度?

我们都知道,App在启动的时候,会展示一张App启动插画来保证App程序加载的等待体验,让用户欣赏美丽的插画时,App真正默默的努力加载着相关资源,

App自动调用main函数,接着是:didFinishLaunchingWithOptions

当UIWindow执行makeKeyAndVisible时,那么这张启动插图就会自动消失了.但却是瞬间消失的.

而所谓的自定义过度就是让启动插图更加友好的消失(而不是瞬间没了),相信在很多主流App产品中已经看到不少这样的效果.

那么这个实现方式就是本文要讨论的重点!


程序原理是?

程序有时也会有点魔术的感觉,在你不知道原理的时候总感觉它很神秘!


App启动插画我们通过工程设置-targets-Summary-Launch Images 来设定.


但是这个启动插画的指针我们是获取不到的.(要是获取到了,这篇文章估计很短,甚至没有.)

那怎么办呢? 我们肯定要有这个指针,才能去实现自定义的过度,例如一点一点的消失啊,翻一页书那样的效果等等.

出于我们的目的,我们只有自己alloc一个UIImageView了,其加载的图片就是我们启动插画的图片.

但是要保证一点:启动插画展示的是什么样子,我们自己alloc 的UIImageView也应该是什么样子, 不然,这个体验就大打折扣了 你说呢?

而这个UIImageView我们到底应该addSubview在哪里是本实例的一个技术难点.

那答案是什么?

是UIWindow!却不是keyWindow.而是一个需要我们自己allocUIWindow!   但是它的windowLevel要比keyWindow高一级!

也就是说,为了让UIImageView顺利的展示出来并保证与启动插画的样子一摸一样,我们需要有一个UIWindow的容器.代码如下:


UIWindow是一个很神奇的类,当你alloc出来并把windowLevel设置比keyWindowlevel高以后,此时不再需要额外的执行makeKeyAndVisible或者addSubview来让这个UIWindow显示出来. 但是这个UIWindow的hidden属性却默认是YES, 所以我们需要将hidden设置为NO! 让UIWindow真正显示出来.

那么接下来把我们的UIImageView调用addSubview到这个UIWindow上面.

而alloc UIImageView时 有一点我们需要注意一下:

不要通过imageNamed的方式去获得UIImage, 大家都应该知道imageNamed是会自动把加载过的图片资源缓存起来,如果下次再调用同名称的图片,是直接从内存中获得,而我们的这个UIImageView只使用一次,当插画隐藏以后不再需要重复使用. 


那正确的获取方式是什么?

绝对路径的方式获得这张图片资源,就像下面这样:


imageWithContentsOfFile是符合我们现在使用图片资源的需求,因为它在使用完成以后会自动清理掉(ARC)

到此,我们的伪装版启动插图已经部署完成.


何时调用呢?

在第一个启动的ViewController中的viewWillAppear执行这些代码.那么不出意外的话,启动插画永远的显示了出来.

但是我们不是要一直显示啊,差不多它就应该消失了,只是说消失的时候更加友好一些!

因为我们已经有了UIImageView的指针了,接下来我们可以随意控制这个UIImageView消失的方式.


也就达到了本文的目的:

App启动插画的自定义过度


而博主我对于这项实例功能封装了一个类来方便调用! 已经上传到Github上. 欢迎大家使用并反馈问题.

它的名字叫:SYAppStart

SYAppStart的API很简单,

提供一套默认的显示和隐藏方法

核心在于hideWithCustomBlock来自定义更多隐藏插画的方式.

希望有人能够pull request 很棒的自定义隐藏代码!




小技巧:

1.如何全屏展示启动插画(隐藏状态栏那种)?


勾上即可!

2.如何在展示完成以后又立刻恢复状态栏的显示?



总结:

博主本人已对此功能进行封装,基本上不需要关心核心功能的实现,那为什么还要费一大半劲去阐述原理?

因为该功能在于如何利用UIWindow去实现,或者说我们想把顶部状态栏更好的掌控在手中,那么理解UIWindow是首当其冲!

阅读完本文以后有任何疑问,都务必说出来,不想注册csdn账号的,可以通过微博私信我,这是我持续改进文章内容的主要方式. 谢谢!



目录
相关文章
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
164 3
|
2月前
|
iOS开发 UED
实现一个自定义的iOS动画效果
【4月更文挑战第9天】本文将详细介绍如何在iOS平台上实现一个自定义的动画效果。我们将通过使用Core Animation框架来实现这个动画效果,并展示如何在不同的场景中使用它。文章的目标是帮助读者理解如何使用Core Animation框架来创建自定义动画,并提供一个简单的示例代码。
26 1
|
2月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
243 0
|
2月前
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
37 0
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
|
2月前
|
大数据 测试技术 数据库
ios app性能分析
ios app性能分析
22 2
|
2月前
|
移动开发 网络协议 Linux
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
38 0
|
2月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
26 0
|
2月前
|
定位技术
如何让app多个页面只用一个地图实例
如何让app多个页面只用一个地图实例
15 0
|
2月前
|
iOS开发 网络架构 UED
ios app的分类与本质,感想
ios app的分类与本质,感想
26 0
|
2月前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
48 0

相关实验场景

更多