本文的内容主要是在IOS中实现日历翻页的动画,界面简单但效果很好,以后可以运用到app中,下面一起来看看。
本文我主要描述两方面:
1.日历(简单描述原理)
2.翻页动画(重点)
最终的效果如下图:
图中沿四个对角的翻页动画,代表对应方向手势的滑动
1. 日历
要实现一个日历,其实原理很简单,我们只要知道三个数据:
1.今天是哪一天
2.这个月的第一天是星期几(哪天)
3.这个月总共有多少天
根据这个三个数据,就可以把得到的日期显示在日历上了,至于日历用什么来显示,我个人比较喜欢用UICollectionView,一个cell代表一天,当然也可以用很多个label,button来显示。
1.获取今天是哪一天
这个应该是最简单的: NSDate()
, 就可以获取当前的日期
2.获取这个月的第一天是星期几(哪天)
下面的方法都是作为NSDate的extension扩展的
3.获取这个月总共有多少天
根绝上面这些数据,就可以得到日历里面每个格子应该显示的日期,具体的显示和有关日期的三个主要的类: NSDate
, NSCalendar
, NSDateComponents
由于不是本文的重点,我这里就不详细说了,如果有不明白的可以去看一下文档,或者如果我下次写一个详细的关于这三个类的(又挖一个坑。。)。
2. 翻页动画
动画思路:
上面的动画属于转场动画的一种,所以我们可以利用CATrasition
进行动画,CATransition
的使用非常简单,只要设置动画时长,时间函数,fillMode
等,就可以得到想要的动画,CATransition
的type
代表的是过渡时候的动画效果,subType
一般代表动画的方向,但是查看了一下CATransition
的type
属性,官方文档里面只描述了下面四种预定义的转场动画效果:
我们需要的翻页动画并不在里面,在google了一下之后,找到了一个比较理想的效果,通过直接设置CATransition
的type
为"pageCurl
"或"pangeUnCurl
"进行动画,这两个值官方文档没有提供,我也不知道为啥这些大神能找到。。。
但是默认的朝上翻页只有左上角方向的动画,朝下翻页只有右下角方向的动画
做出来的效果如下图:
无法达到四个对角都能进行翻页动画的效果。
为了得到可以沿着四个对角方向翻页的效果,我们可以先在最底部添加一个containerView
,然后在containerView
中添加dayView
(下面提到的dayView
和代码中的dayView
都代表的是作为日历的collectionView
)。
如果要进行朝右上角翻页,我们只要把containerView
的layer
先沿y轴
翻转M_PI
,这样,最开始的右下角就变成左下角了,翻页时就会变成向右上角翻页
但是为了日历显示正确,我们需要把dayView
的layer
重新翻转过来,这样,containerView
是反的,但是我们看到的日期显示是正的
左下角翻页也是同样的道理。
具体代码如下:
动画开始和停止时,进行一些处理:
总结:
这篇文章没有介绍太多详细的内容,其实翻页的动画实现还有别的方法,但是因为我想实现的是可以沿着四个对角进行动画的效果,所以最终选择了这个方法,上面说的好像不是很具体,如果不是很明白,可以先查看一下CATranstion的使用方法。以上就是本文的全部内容,希望对大家开发IOS动画的时候能有所帮助。