今天研究了下iOS的一些页面翻转动画,即CATransition,特此记录。
CATransition是转场动画,主要是页面、图片切换时的一些动画效果(个人理解)
CATransition的属性:CATransition继承自CAAnimation,所以CAAnimation的属性都有,特有的属性有5个
(1)@property(copy) NSString *type;//类别,转场动画的名称,系统公有apiyou4个:
/* Common transition types. */
CA_EXTERN NSString * const kCATransitionFade
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionMoveIn
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionPush
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionReveal
还有一些是私有api,自己也不知道私有api查看方法,只是从网上找的,效果不错,不过上架有可能被拒,慎用
Cube, //立方体
SuckEffect, //吮吸
OglFlip, //翻转
RippleEffect, //波纹
PageCurl, //翻页
PageUnCurl, //反翻页
CameraIrisHollowOpen, //开镜头
CameraIrisHollowClose, //关镜头
(2)@property(nullable, copy) NSString *subtype; //方向种类,就是页面从哪个方向显示和消失
/* Common transition subtypes. */
CA_EXTERN NSString * const kCATransitionFromRight
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromLeft
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromTop
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
CA_EXTERN NSString * const kCATransitionFromBottom
__OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0);
(3)@property float startProgress;
(4)@property float endProgress;
startProgress和endProgress是关联属性,是设置动画的开始进度和结束进度,默认的是startProgress=0,endProgress=1,是显示完整的动画,如果endProgress=0.5只显示前一半的动画了,两个值的范围都是0-1,并且endProgress必须大于等于startProgress,当然等于的话就不显示动画了
(5)@property(nullable, strong) id filter; //这个是滤镜的效果,使用后type和subtype都无效,默认为nil,我自己也没研究清楚,就不说了
动画的实现:
CATransition *pushTS = [CATransition animation];
pushTS.duration = 0.5;
pushTS.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
pushTS.type = @"cube";
pushTS.subtype = kCATransitionFromRight;
[ self . navigationController . view . layer addAnimation :pushTS forKey : @"navigation" ];
[self.tabBarController.view.layer addAnimation:pushTS forKey:@"tabbar"];
这样在跳转页面的时候就有动画效果了,需要在点击方法里面设置,如果直接在viewdidload中设置无效
如果是每次进入这个页面都需要动画,可以在第二页的viewwillappear中设置,如果跳出页面都需要相同动画,也可以在第一页的viewwilldisappear中设置,
由于第二个页面的viewwillappear后执行,第一个页面的viewwillappear先执行,所有同时有的话会执行第二个页面的viewwillappear中的
同样,在其它view的layer上添加也能实现动画效果