1.使用CAReplicatorLayer制作等待动画

CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABasicAnimation制作的等待转圈动画,还有一个是利用CAShapeLayer制作的随移动距离而渐变的按钮动画,而这次要制作的圆点缩放动画用到的是CAReplicatorLayer,CAShapeLayer与CAReplicatorLayer都是CAlLayer的子类,根据不同应用场景,可以使用不同的layer来满足要求。

动画效果如图:

实现过程,画一个圆,复制三份,添加动画效果即可

(1)CAReplicatorLayer之anchorPoint与position之间的关系

在制作动画前,需要弄清楚anchorPoint与position之间的关系,对最终将动画渲染在屏幕上的位置至关重要。

①position:CAReplicatorLayer的position决定了其在父视图中位置坐标。

②anchorPoint:CAReplicatorLayer的anchorPoint决定了其position的位置。

anchorPoint的默认值为(0.5, 0.5),此时CAReplicatorLayer在父视图中坐标位置对应其中心点的坐标。

而如果想使用父视图一样坐标系标准,即像添加普通的view一样设置坐标,而不用去考虑计算position在CAReplicatorLayer中心点带来的影响,将anchorPoint设置为(0, 0)即可,此时position的位置在CAReplicatorLayer的左上角顶点

(2)CAReplicatorLayer的相关重要参数

①instanceCount,CAReplicatorLayer中子元素的份数,

②instanceDelay,CAReplicatorLayer中子元素动画执行时延迟时间,

③instanceTransform,CAReplicatorLayer中子元素形变方式,本例中主要就是X轴方向平移复制。

(3)初始化CAReplicatorLayer

如图所示进行相关初始化,animationDuration为动画执行一次的总时间,animationInstanceCount为拷贝后子元素的个数, instanceDelay = animationDuration / animationInstanceCount 是为了让动画看起来具有连续性

circle为动画中的小圆点,anchorPoint采用默认值,小圆点的中心刚好在animationContainerView的边界上,由于需要和animationContainerView边界左对齐,所以把圆点circle往右移动了一个半径的距离,如下图所示,左图为不设置偏移的情况,右图为设置偏移后的情况。

(4)添加和移除动画效果

autoreverses这个参数默认为NO,这里设置为YES,目的是重复执行动画时,一次动画执行完毕后,下一次动画执行相反的效果,即这一次圆点执行缩小的动画效果,下一次执行放大的动画效果,这样循环往复,让动画更具连续性,而不是缩小后突兀的就恢复原来大小。

2.强制更新

苹果审核时不允许带有版本检测强制更新功能,如果需要加上强制更新功能以备不时之需,就需要提前设置好。

方法之一是:在某一时刻请求后台接口,检测是否需要强制更新,例如applicationDidBecomeActive的时候,接口中约定好一个关于开启强制更新的变量以及相关版本号,当需要强制更新时,通过检测该变量及比较版本号即可通过弹框方式提醒甚至强制用户去升级,当然这不是一个好的体验。

3.远程推送加语音提醒

之前博客记录了关于远程消息推送的东西,这次要在远程消息推送基础上加语音提示,语音提示主要是为了更方便的提示用户接收推送信息,例如商家收到美团外卖订单时,店内会听到新订单的语音提示,提醒商家接单。加语音提示主要有以下几个关键点:

(1)工程相关准备,音频文件及相关类库

在工程里预先存放语音提示的音频文件,供接收消息时播放,文件格式必须为aiff、wav或caf之一,这里将音频文件存为了wav格式使用,且音频文件播放时长需要控制在30秒以内,否则将自动被替换为默认语音提示。

本例中使用AVAudioPlayer播放音频文件,所以需要引入AVFoundation.framework

(2)后台推送消息格式

在aps信息里的sound对应工程里存放的音频文件名,注意后缀,本例中sound对应的文件名没有加入后缀,而是在代码中给音频文件添加后缀。

(3)注意将AVAudioPlayer实例以属性方式声明

之前在函数中以临时变量方式声明AVAudioPlayer并播放音频文件,一直没有声音,后来发现是还没有来得及播放,AVAudioPlayer实例就已经被释放了,以属性方式声明后解决此问题,相关代码如下

(4)音量

仔细辨认可以发现,app在前台运行时收到推送消息播放语音提示的声音是要略大于app在后台运行时收到推送消息播放语音提示的声音,因为AVAudioPlayer控制的音量是在系统音量的级别上来进行调整,无法调节系统音量,如果要调节系统音量,需要再单独处理,并且注意播放音频文件后将系统音量恢复成原来大小。具体参考:iOS编程修改系统音量

4.UIView截屏

相关代码如下所示:

5.参考

Core Animation Programming Guide--Core Animation Basics

CALayer Animation - Replicator Animation

MP3 playing using AVAudioPlayer not working on device

iOS开发-音频播放

iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏的更多相关文章

  1. 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue

    原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...

  2. iOS开发检测是否开启定位、是否允许消息推送等权限

    1.iOS开发检测是否开启定位: 需要导入: #import <CoreLocation/CoreLocation.h> 代码如下: + (void)openLocationService ...

  3. iOS开发笔记7:Text、UI交互细节、两个动画效果等

    Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...

  4. 【Swift】iOS开发笔记(二)

    前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯 ...

  5. 菜鸟手下的iOS开发笔记(swift)

    在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...

  6. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法   单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...

  7. iOS开发笔记--什么时候调用layoutSubviews

    iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...

  8. IOS开发笔记(4)数据离线缓存与读取

    IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...

  9. IOS开发笔记 IOS如何访问通讯录

    IOS开发笔记  IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...

随机推荐

  1. DDD:小议 BoundexContext 设计

    背景 看了这篇文章:Coding for Domain-Driven Design: Tips for Data-Focused Devs,对 BoundedContext 的设计有了一点新的体会,记 ...

  2. 彻底搞定 C/C++ 指针

    1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 ...

  3. Most middleware (like favicon) is no longer bundled with Express

    Error: Most middleware (like favicon) is no longer bundled with Express and must be installed separa ...

  4. Mysql学习笔记(六)增删改查

    PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values(" ...

  5. PHP如何将进程作为守护进程

    看了这篇:http://blog.codinglabs.org/articles/write-daemon-with-php.html 对里面的posix_setsid()不解 文档解释是" ...

  6. ASP.NET MVC 在控制器中接收视图表单POST过来的数据方法

    方法一:通过Request.Form [HttpPost]        public ActionResult Test()        {            string id=Reques ...

  7. EncryptTransform

    internal class EncryptTransform { //private const int c_MaxLengthOf_IV_DES = 4; //private const int ...

  8. Sprint第三个冲刺(第五天)

    一.Sprint介绍 实验截图: 任务进度: 二.Sprint周期 看板: 燃尽图:

  9. 点餐APP 冲刺三总结

    一转眼所有的冲刺都完成了,而今次的冲刺主要是完善数据库,而我们 也成功地实现了,虽然过程很艰辛,但是我们每一个人都学习到了很多新 知识,这是最好的收获.因为今学期没有软件工程的课程,所以大家都是 利用 ...

  10. 关于重装系统与Visual Studio 2015

    开始入坑  ... 9.25左右,由于本人电脑上同时安装了社区版vs2013与社区版vs2015,.无奈天公不作美,vs2015我每次一点击右上角的“登录”,马上就白屏,并弹窗提示,停止运行(忘了截屏 ...