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

本文介绍如何在iOS应用中实现App启动插画的自定义过渡效果,通过创建自定义UIImageView并将其添加到UIWindow中,使得启动插画可以以更友好的方式消失。

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

Url:http://blog.youkuaiyun.com/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账号的,可以通过微博私信我,这是我持续改进文章内容的主要方式. 谢谢!

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值