iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏
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开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏的更多相关文章
- 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue
原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...
- iOS开发检测是否开启定位、是否允许消息推送等权限
1.iOS开发检测是否开启定位: 需要导入: #import <CoreLocation/CoreLocation.h> 代码如下: + (void)openLocationService ...
- iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- 菜鸟手下的iOS开发笔记(swift)
在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- iOS开发笔记--什么时候调用layoutSubviews
iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- IOS开发笔记 IOS如何访问通讯录
IOS开发笔记 IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...
随机推荐
- Maven进价:Maven构建系列文章
Maven:基于Java平台的项目构建.依赖管理和项目信息管理. 1.构建 Maven标准化了构建过程 构建过程:编译.运行单元测试.生成文档.打包和部署 避免重复:设计.编码.文档.构建 2.依赖管 ...
- VirtualBox Bridged 无线网卡
启动虚拟机后选择右键单击右下角的网络链接图标, 弹出的窗口中选择Bridged Adapter, wlan0 然后选择OK 查看virtual Box主页面中setting中网络的配置是否和刚才一 ...
- codeforces Restore Cube(暴力枚举)
/* 题意:给出立方体的每个顶点的坐标(是由源坐标三个数某几个数被交换之后得到的!), 问是否可以还原出一个立方体的坐标,注意这一句话: The numbers in the i-th output ...
- ruby -- 进阶学习(九)定制错误跳转404和500
在开发阶段,如果发生错误时,都会出现错误提示页面,比如:RecordNotFound之类的,虽然这些错误方便开发进行debug,但是等产品上线时,如果还是出现这些页面,对于用户来说是很不友好的. 所以 ...
- 当他们也换成了Linux OS
近期,斯诺登的事闹得沸沸扬扬,美帝损失了公信.又有传言说Win8给美帝安全局留了后门?XP依旧是生命力旺盛. 还不就是因为那点事儿,看不到人家的源代码? 斗胆提一个问题,如果公务员们或者是一部分,开始 ...
- android resources使用总结
http://developer.android.com/guide/topics/resources/more-resources.html http://developer.android.com ...
- React中的PropTypes详解
propTypes用来规范props必须满足的类型,如果验证不通过将会有warn提示. React PropTypes的种类有: React.PropTypes.array // 队列 React.P ...
- API Design
REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1 简介 本文档旨在规范REST API的 ...
- ref和out 传递参数(C#)
1.参数传递默认都是传递栈空间里面存储的内容 2.如果添加了ref那么传递的都是栈空间地址,而不再是栈空间里面的内容 3.如果添加了out,那么传递的也是栈空间的地址 //写一个方法计算一个int类型 ...
- Python基础:模块
一.概述 二.导入语句 1.基本语法 2.推荐风格 三.模块 1.模块名 2.模块属性 3.可导出的公有属性 4.直接执行 四.包 1.包名 2.包属性 3.可导出的公有属性 4.其他 五.导入原理 ...