以前对转场的概念有点笼统,对 ViewController 层次的转场和 View 的转场(过渡)老是混淆,区分一下此处先对 View 转场 用 CATransition 实现动画,进行一个笔记。
对 CATransition 进行了解,它是CAAnimation的子类,用于做过渡动画或者转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。 其中最主要的就是 type
和 subType
这两个属性。
@property(copy) NSString *type;
@property(nullable, copy) NSString *subtype;
然后根据具体的类型展示我们要的效果。
-
Type: 动画的类型
- 公共Type(官方的SDK其实只提供了四种过渡效果)
CA_EXTERN NSString * const kCATransitionFade; CA_EXTERN NSString * const kCATransitionMoveIn; CA_EXTERN NSString * const kCATransitionPush; CA_EXTERN NSString * const kCATransitionReveal;
- 私有的Type (私有API提供了其他很多非常炫的过渡动画),需要自己额外写的
NSString *const kCATransitionCube = @"cube"; NSString *const kCATransitionSuckEffect = @"suckEffect"; NSString *const kCATransitionOglFlip = @"oglFlip"; NSString *const kCATransitionRippleEffect = @"rippleEffect"; NSString *const kCATransitionPageCurl = @"pageCurl"; NSString *const kCATransitionPageUnCurl = @"pageUnCurl"; NSString *const kCATransitionCameraIrisHollowOpen = @"cameraIrisHollowOpen"; NSString *const kCATransitionCameraIrisHollowClose = @"cameraIrisHollowClose";
- 公共Type(官方的SDK其实只提供了四种过渡效果)
-
SubType: 动画类型的方向
CA_EXTERN NSString * const kCATransitionFromRight; CA_EXTERN NSString * const kCATransitionFromLeft; CA_EXTERN NSString * const kCATransitionFromTop; CA_EXTERN NSString * const kCATransitionFromBottom;
为了加深印象,对 Type 的类型一一进行尝试, 只是将 type 的方式替换而已。
CATransition *animation = [CATransition animation];
animation.type = kCATransitionPush;//设置动画的类型
animation.subtype = kCATransitionFromRight; //设置动画的方向
animation.duration = 1.0f;
[testView.layer addAnimation:animation forKey:@"pushAnimation"];
- kCATransitionFade;
![](https://i-blog.csdnimg.cn/blog_migrate/cba77a784e562bf7c52351ef77ff7062.webp?x-image-process=image/format,png)
kCATransitionFade.gif
- kCATransitionMoveIn;
![](https://i-blog.csdnimg.cn/blog_migrate/604da28e43a2a73df96909986ea735b2.webp?x-image-process=image/format,png)
kCATransitionMoveIn.gif
- kCATransitionPush;
![](https://i-blog.csdnimg.cn/blog_migrate/26b038a03db8d2f35906c84a3acf1366.webp?x-image-process=image/format,png)
kCATransitionPush.gif
- kCATransitionReveal;
![](https://i-blog.csdnimg.cn/blog_migrate/3a647a56390797b2adbcc5be32579d55.webp?x-image-process=image/format,png)
kCATransitionReveal.gif
- kCATransitionCube;
![](https://i-blog.csdnimg.cn/blog_migrate/e095b2dc02209058c27ed8f2920bf6e6.webp?x-image-process=image/format,png)
@"cube".gif
- kCATransitionSuckEffect;
![](https://i-blog.csdnimg.cn/blog_migrate/0ea69d8d352aec1b8915d5cd185fd8df.webp?x-image-process=image/format,png)
@"suckEffect".gif
- kCATransitionOglFlip;
![](https://i-blog.csdnimg.cn/blog_migrate/78abdcf7e2f37a32f25c447ea858f3f7.webp?x-image-process=image/format,png)
@"oglFlip".gif
- kCATransitionRippleEffect;
![](https://i-blog.csdnimg.cn/blog_migrate/737588b4c49867b92bf11b34d6f97962.webp?x-image-process=image/format,png)
@"rippleEffect".gif
- kCATransitionPageCurl;
![](https://i-blog.csdnimg.cn/blog_migrate/4d01dad84050bf0d4ff09b42b20b3444.webp?x-image-process=image/format,png)
@"pageCurl".gif
- kCATransitionPageUnCurl;
![](https://i-blog.csdnimg.cn/blog_migrate/769ea2495dd38760c049456f3fb31239.webp?x-image-process=image/format,png)
@"pageUnCurl".gif
- kCATransitionCameraIrisHollowOpen;
![](https://i-blog.csdnimg.cn/blog_migrate/4e473f87871065bbef9566daee15bfdc.webp?x-image-process=image/format,png)
@"cameraIrisHollowOpen".gif
- kCATransitionCameraIrisHollowClose;
![](https://i-blog.csdnimg.cn/blog_migrate/7686948e3495334bb9f932e8426bddd1.webp?x-image-process=image/format,png)
@"cameraIrisHollowClose".gif
特别是 私有 API 中的 动画效果还是很炫的,可以一一尝试,还是蛮有意思的。
疑惑点,对于私有Type,审核的时候到底会不会被拒绝呢,官方肯定是说拒绝的,但是我看到网友说也有人成功啦,总的说来对私有 API 这块还是谨慎。
原文链接:http://www.jianshu.com/p/239cf81eb1eb