12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #import "CALayer+Transition.h"
- @implementation CALayer (Transition)
- /**
- * 转场动画
- * @param animType 转场动画类型
- * @param subtype 转动动画方向
- * @param curve 转动动画曲线
- * @param duration 转动动画时长
- * @return 转场动画实例
- */
- -(CATransition *)transitionWithAnimType:(TransitionAnimType)animType subType:(TransitionSubType)subType curve:(TransitionCurve)curve duration:(CGFloat)duration{
-
- NSString *key = @"transition";
-
- if([self animationForKey:key]!=nil){
- [self removeAnimationForKey:key];
- }
-
-
- CATransition *transition=[CATransition animation];
-
- //动画时长
- transition.duration=duration;
-
- //动画类型
- transition.type=[self animaTypeWithTransitionType:animType];
-
- //动画方向
- transition.subtype=[self animaSubtype:subType];
-
- //缓动函数
- transition.timingFunction=[CAMediaTimingFunction functionWithName:[self curve:curve]];
-
- //完成动画删除
- transition.removedOnCompletion = YES;
-
- [self addAnimation:transition forKey:key];
-
- return transition;
- }
- // 返回动画曲线
- -(NSString *)curve:(TransitionCurve)curve{
-
- //曲线数组
- NSArray *funcNames=@[kCAMediaTimingFunctionDefault,kCAMediaTimingFunctionEaseIn,kCAMediaTimingFunctionEaseInEaseOut,kCAMediaTimingFunctionEaseOut,kCAMediaTimingFunctionLinear];
-
- return [self objFromArray:funcNames index:curve isRamdom:(TransitionCurveRamdom == curve)];
- }
- /*
- * 返回动画方向
- */
- -(NSString *)animaSubtype:(TransitionSubType)subType{
-
- //设置转场动画的方向
- NSArray *subtypes=@[kCATransitionFromTop,kCATransitionFromLeft,kCATransitionFromBottom,kCATransitionFromRight];
-
- return [self objFromArray:subtypes index:subType isRamdom:(TransitionSubtypesFromRamdom == subType)];
- }
- /*
- * 返回动画类型
- */
- -(NSString *)animaTypeWithTransitionType:(TransitionAnimType)type{
-
- //设置转场动画的类型
- NSArray *animArray=@[@"rippleEffect",@"suckEffect",@"pageCurl",@"oglFlip",@"cube",@"reveal",@"pageUnCurl"];
-
- return [self objFromArray:animArray index:type isRamdom:(TransitionAnimTypeRamdom == type)];
- }
- // 统一从数据返回对象
- -(id)objFromArray:(NSArray *)array index:(NSUInteger)index isRamdom:(BOOL)isRamdom{
- NSUInteger count = array.count;
-
- NSUInteger i = isRamdom?arc4random_uniform((u_int32_t)count) : index;
- return array[i];
- }
- @end
|