本文共 21762 字,大约阅读时间需要 72 分钟。
-
-
-
-
-
-
-
-
- #import <Foundation/Foundation.h>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- @interface CoreAnimationEffect : NSObject
-
- #pragma mark - Custom Animation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- + (void)showAnimationType:(NSString *)type
- withSubType:(NSString *)subType
- duration:(CFTimeInterval)duration
- timingFunction:(NSString *)timingFunction
- view:(UIView *)theView;
-
- #pragma mark - Preset Animation
-
-
-
-
-
-
- + (void)animationRevealFromBottom:(UIView *)view;
- + (void)animationRevealFromTop:(UIView *)view;
- + (void)animationRevealFromLeft:(UIView *)view;
- + (void)animationRevealFromRight:(UIView *)view;
-
-
- + (void)animationEaseIn:(UIView *)view;
- + (void)animationEaseOut:(UIView *)view;
-
-
- + (void)animationFlipFromLeft:(UIView *)view;
- + (void)animationFlipFromRigh:(UIView *)view;
-
-
- + (void)animationCurlUp:(UIView *)view;
- + (void)animationCurlDown:(UIView *)view;
-
-
- + (void)animationPushUp:(UIView *)view;
- + (void)animationPushDown:(UIView *)view;
- + (void)animationPushLeft:(UIView *)view;
- + (void)animationPushRight:(UIView *)view;
-
-
- + (void)animationMoveUp:(UIView *)view duration:(CFTimeInterval)duration;
- + (void)animationMoveDown:(UIView *)view duration:(CFTimeInterval)duration;
- + (void)animationMoveLeft:(UIView *)view;
- + (void)animationMoveRight:(UIView *)view;
-
-
-
-
- + (void)animationRotateAndScaleEffects:(UIView *)view;
-
-
- + (void)animationRotateAndScaleDownUp:(UIView *)view;
-
-
-
- #pragma mark - Private API
-
-
-
-
-
- + (void)animationFlipFromTop:(UIView *)view;
- + (void)animationFlipFromBottom:(UIView *)view;
-
- + (void)animationCubeFromLeft:(UIView *)view;
- + (void)animationCubeFromRight:(UIView *)view;
- + (void)animationCubeFromTop:(UIView *)view;
- + (void)animationCubeFromBottom:(UIView *)view;
-
- + (void)animationSuckEffect:(UIView *)view;
-
- + (void)animationRippleEffect:(UIView *)view;
-
- + (void)animationCameraOpen:(UIView *)view;
- + (void)animationCameraClose:(UIView *)view;
-
- @end
-
-
-
-
-
-
-
-
-
-
-
- #import "CoreAnimationEffect.h"
-
- #import <QuartzCore/QuartzCore.h>
-
- @implementation CoreAnimationEffect
-
-
-
-
-
- #pragma mark - Custom Animation
-
- + (void)showAnimationType:(NSString *)type
- withSubType:(NSString *)subType
- duration:(CFTimeInterval)duration
- timingFunction:(NSString *)timingFunction
- view:(UIView *)theView
- {
-
-
-
-
-
-
-
-
- CATransition *animation = [CATransition animation];
-
-
-
-
-
-
-
-
- animation.delegate = self;
-
-
-
-
-
-
- animation.duration = duration;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- animation.timingFunction = [CAMediaTimingFunction functionWithName:timingFunction];
-
-
-
-
-
-
-
-
-
-
-
- animation.fillMode = kCAFillModeForwards;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- animation.type = type;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- animation.subtype = subType;
-
-
-
-
-
-
- [theView.layer addAnimation:animation forKey:nil];
- }
-
- #pragma mark - Preset Animation
-
-
- + (void)animationRevealFromBottom:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setType:kCATransitionReveal];
- [animation setSubtype:kCATransitionFromBottom];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationRevealFromTop:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setType:kCATransitionReveal];
- [animation setSubtype:kCATransitionFromTop];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationRevealFromLeft:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setType:kCATransitionReveal];
- [animation setSubtype:kCATransitionFromLeft];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationRevealFromRight:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setType:kCATransitionReveal];
- [animation setSubtype:kCATransitionFromRight];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
-
- + (void)animationEaseIn:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setType:kCATransitionFade];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationEaseOut:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setType:kCATransitionFade];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- + (void)animationFlipFromLeft:(UIView *)view
- {
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:0.35f];
- [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
- forView:view cache:NO];
- [UIView commitAnimations];
- }
-
- + (void)animationFlipFromRigh:(UIView *)view
- {
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
- [UIView setAnimationDuration:0.35f];
- [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
- forView:view cache:NO];
- [UIView commitAnimations];
- }
-
-
- + (void)animationCurlUp:(UIView *)view
- {
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
- [UIView setAnimationDuration:0.35f];
- [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
- forView:view cache:NO];
- [UIView commitAnimations];
- }
-
- + (void)animationCurlDown:(UIView *)view
- {
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
- [UIView setAnimationDuration:0.35f];
- [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
- forView:view cache:NO];
- [UIView commitAnimations];
- }
-
- + (void)animationPushUp:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:kCATransitionPush];
- [animation setSubtype:kCATransitionFromTop];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationPushDown:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:kCATransitionPush];
- [animation setSubtype:kCATransitionFromBottom];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationPushLeft:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:kCATransitionPush];
- [animation setSubtype:kCATransitionFromLeft];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationPushRight:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:kCATransitionPush];
- [animation setSubtype:kCATransitionFromRight];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
-
- + (void)animationMoveUp:(UIView *)view duration:(CFTimeInterval)duration
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:duration];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
- [animation setType:kCATransitionMoveIn];
- [animation setSubtype:kCATransitionFromTop];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
-
- + (void)animationMoveDown:(UIView *)view duration:(CFTimeInterval)duration
- {
- CATransition *transition = [CATransition animation];
- transition.duration =0.4;
- transition.timingFunction = [CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
- transition.type = kCATransitionReveal;
- transition.subtype = kCATransitionFromBottom;
- [view.layer addAnimation:transition forKey:nil];
- }
-
- + (void)animationMoveLeft:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:kCATransitionMoveIn];
- [animation setSubtype:kCATransitionFromLeft];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationMoveRight:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction
- functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:kCATransitionMoveIn];
- [animation setSubtype:kCATransitionFromRight];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- +(void)animationRotateAndScaleEffects:(UIView *)view
- {
- [UIView animateWithDuration:0.35f animations:^
- {
-
-
-
-
-
-
-
-
-
-
-
- view.transform = CGAffineTransformMakeScale(0.001, 0.001);
-
- CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
-
-
- animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0.70, 0.40, 0.80)];
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- animation.duration = 0.45;
- animation.repeatCount = 1;
- [view.layer addAnimation:animation forKey:nil];
-
- }
- completion:^(BOOL finished)
- {
- [UIView animateWithDuration:0.35f animations:^
- {
- view.transform = CGAffineTransformMakeScale(1.0, 1.0);
- }];
- }];
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- + (void)animationRotateAndScaleDownUp:(UIView *)view
- {
- CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
- rotationAnimation.toValue = [NSNumber numberWithFloat:(2 * M_PI) * 2];
- rotationAnimation.duration = 0.35f;
- rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
-
- CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- scaleAnimation.toValue = [NSNumber numberWithFloat:0.0];
- scaleAnimation.duration = 0.35f;
- scaleAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
-
- CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
- animationGroup.duration = 0.35f;
- animationGroup.autoreverses = YES;
- animationGroup.repeatCount = 1;
- animationGroup.animations =[NSArray arrayWithObjects:rotationAnimation, scaleAnimation, nil];
- [view.layer addAnimation:animationGroup forKey:@"animationGroup"];
- }
-
-
-
- #pragma mark - Private API
-
- + (void)animationFlipFromTop:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"oglFlip"];
- [animation setSubtype:@"fromTop"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationFlipFromBottom:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"oglFlip"];
- [animation setSubtype:@"fromBottom"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationCubeFromLeft:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"cube"];
- [animation setSubtype:@"fromLeft"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationCubeFromRight:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"cube"];
- [animation setSubtype:@"fromRight"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationCubeFromTop:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"cube"];
- [animation setSubtype:@"fromTop"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationCubeFromBottom:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"cube"];
- [animation setSubtype:@"fromBottom"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationSuckEffect:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"suckEffect"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationRippleEffect:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"rippleEffect"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationCameraOpen:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"cameraIrisHollowOpen"];
- [animation setSubtype:@"fromRight"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
-
- + (void)animationCameraClose:(UIView *)view
- {
- CATransition *animation = [CATransition animation];
- [animation setDuration:0.35f];
- [animation setFillMode:kCAFillModeForwards];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
- [animation setType:@"cameraIrisHollowClose"];
- [animation setSubtype:@"fromRight"];
-
- [view.layer addAnimation:animation forKey:nil];
- }
- @end