以前對轉場的概念有點籠統,對 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;
- kCATransitionMoveIn;
- kCATransitionPush;
- kCATransitionReveal;
- kCATransitionCube;
- kCATransitionSuckEffect;
- kCATransitionOglFlip;
- kCATransitionRippleEffect;
- kCATransitionPageCurl;
- kCATransitionPageUnCurl;
- kCATransitionCameraIrisHollowOpen;
- kCATransitionCameraIrisHollowClose;
特別是 私有 API 中的 動畫效果還是很炫的,可以一一嘗試,還是蠻有意思的。
疑惑點,對於私有Type,審覈的時候到底會不會被拒絕呢,官方肯定是說拒絕的,但是我看到網友說也有人成功啦,總的說來對私有 API 這塊還是謹慎。
原文鏈接:http://www.jianshu.com/p/239cf81eb1eb