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. AssetBundle系列——场景资源之打包(一)

    本篇讲解的是3D游戏的场景资源打包方式,首先简单的分析一下场景中所包含的资源的类型. 场景资源一般包含:地表模型(或者是Unity Terrain),非实例化物体(摄像机.空气墙.光源.各种逻辑物体之 ...

  2. ruby -- 基础学习(六)时间计算

    计算下一天的这个时刻, # 比如"2013-8-16 18:45:12" 的下一天的这个时刻 “2013-8-17 18:45:12” Time.now + 1.day 如果想得到 ...

  3. [Math] A love of late toward Mathematics - how to learn it?

    Link: https://www.zhihu.com/question/19556658/answer/26950430     王小龙 ,数学,计算机视觉,图形图像处理 数学系博士怒答! 我想大家 ...

  4. 使用 PSD Validator 在线校验 PSD 文件的质量

     PSD Validator 可以帮助你在线校验 PSD 文件的质量,使用的规则来自 Photoshop Etiquette.Photoshop Etiquette 整理了 PSD 文件的规范,例如删 ...

  5. LeetCode—— Median of Two Sorted Arrays

    Description: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the medi ...

  6. Android学习笔记之布局技巧以及布局中的细节介绍....

    PS:休息两天,放一放手上的东西,做做总结... 学习内容: 1.Android中LinearLayout布局技巧... 2.layout中drawable属性的区别...   先简单的介绍一下dra ...

  7. javascript中&&和||的区别

    javascript中&&和||的区别 &&和||操作符两边不是布尔类型时,系统会转换成布尔类型值再计算(空字符串.null.0都会被转成false),结果本身不变. ...

  8. Sprint2演示分

    团队贡献分: 朱杰:22 蔡京航:21 华子仪:20 甄增文:17

  9. c# 编程语言 编译器 Roslyn

    4 月3日,微软向公众发布了Roslyn编译器项目,该项目采用了Apache开源许可协议.C#的创始人 Anders Hejlsberg在Build大会的第二场主题演讲中将这一令人震惊的消息公之于众. ...

  10. 【jQuery基础学习】09 jQuery与前端(这章很水)

    这章主要是将如何将jQuery应用到网站中,或者说其实就是一些前端知识,对于我这种后端程序来说其实还是蛮有用的. 关于网站结构 文件结构 前端文件分三个文件夹放 images文件夹用来存放将要用到的图 ...