//
// CoreAnimationEffect.h
// CoreAnimationEffect
//
// Created byVincentXue on 13-1-19.
// Copyright(c) 2013年 VincentXue. All rights reserved.
//
#import
@interfaceCoreAnimationEffect : NSObject
#pragma mark - CustomAnimation
+(void)showAnimationType:(NSString*)type
withSubType:(NSString*)subType
duration:(CFTimeInterval)duration
timingFunction:(NSString*)timingFunction
view:(UIView*)theView;
#pragma mark - PresetAnimation
// reveal
+(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;
// push
+(void)animationPushUp:(UIView*)view;
+(void)animationPushDown:(UIView*)view;
+(void)animationPushLeft:(UIView*)view;
+(void)animationPushRight:(UIView*)view;
// move
+(void)animationMoveUp:(UIView *)viewduration:(CFTimeInterval)duration;
+(void)animationMoveDown:(UIView *)viewduration:(CFTimeInterval)duration;
+(void)animationMoveLeft:(UIView*)view;
+(void)animationMoveRight:(UIView*)view;
// 旋转缩放
//各种旋转缩放效果
+(void)animationRotateAndScaleEffects:(UIView*)view;
//旋转同时缩小放大效果
+(void)animationRotateAndScaleDownUp:(UIView*)view;
#pragma mark - PrivateAPI
+(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
//
// CoreAnimationEffect.m
// CoreAnimationEffect
//
// Created byVincentXue on 13-1-19.
// Copyright(c) 2013年 VincentXue. All rights reserved.
//
#import"CoreAnimationEffect.h"
#import
@implementationCoreAnimationEffect
#pragma mark - CustomAnimation
+(void)showAnimationType:(NSString*)type
withSubType:(NSString*)subType
duration:(CFTimeInterval)duration
timingFunction:(NSString*)timingFunction
view:(UIView*)theView
{
CATransition*animation = [CATransitionanimation];
animation.delegate= self;
animation.duration= duration;
animation.timingFunction= [CAMediaTimingFunctionfunctionWithName:timingFunction];
animation.fillMode= kCAFillModeForwards;
// animation.removedOnCompletion = NO;
animation.type= type;
animation.subtype= subType;
[theView.layeraddAnimation:animationforKey:nil];
}
#pragma mark - PresetAnimation
+(void)animationRevealFromBottom:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetType:kCATransitionReveal];
[animationsetSubtype:kCATransitionFromBottom];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn]];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationRevealFromTop:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetType:kCATransitionReveal];
[animationsetSubtype:kCATransitionFromTop];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationRevealFromLeft:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetType:kCATransitionReveal];
[animationsetSubtype:kCATransitionFromLeft];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationRevealFromRight:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetType:kCATransitionReveal];
[animationsetSubtype:kCATransitionFromRight];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationEaseIn:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetType:kCATransitionFade];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseIn]];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationEaseOut:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetType:kCATransitionFade];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationFlipFromLeft:(UIView*)view
{
[UIViewbeginAnimations:nilcontext:NULL];
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIViewsetAnimationDuration:0.35f];
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromLeftforView:viewcache:NO];
[UIViewcommitAnimations];
}
+(void)animationFlipFromRigh:(UIView*)view
{
[UIViewbeginAnimations:nilcontext:NULL];
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIViewsetAnimationDuration:0.35f];
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromRightforView:viewcache:NO];
[UIViewcommitAnimations];
}
+(void)animationCurlUp:(UIView*)view
{
[UIViewbeginAnimations:nilcontext:NULL];
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseOut];
[UIViewsetAnimationDuration:0.35f];
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlUpforView:viewcache:NO];
[UIViewcommitAnimations];
}
+(void)animationCurlDown:(UIView*)view
{
[UIViewbeginAnimations:nilcontext:NULL];
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseIn];
[UIViewsetAnimationDuration:0.35f];
[UIViewsetAnimationTransition:UIViewAnimationTransitionCurlDownforView:viewcache:NO];
[UIViewcommitAnimations];
}
+(void)animationPushUp:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:kCATransitionPush];
[animationsetSubtype:kCATransitionFromTop];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationPushDown:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:kCATransitionPush];
[animationsetSubtype:kCATransitionFromBottom];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationPushLeft:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:kCATransitionPush];
[animationsetSubtype:kCATransitionFromLeft];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationPushRight:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:kCATransitionPush];
[animationsetSubtype:kCATransitionFromRight];
[view.layeraddAnimation:animationforKey:nil];
}
//presentModalViewController
+(void)animationMoveUp:(UIView *)viewduration:(CFTimeInterval)duration
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:duration];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animationsetType:kCATransitionMoveIn];
[animationsetSubtype:kCATransitionFromTop];
[view.layeraddAnimation:animationforKey:nil];
}
//dissModalViewController
+(void)animationMoveDown:(UIView *)viewduration:(CFTimeInterval)duration
{
CATransition*transition = [CATransitionanimation];
transition.duration=0.4;
transition.timingFunction= [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type= kCATransitionReveal;
transition.subtype= kCATransitionFromBottom;
[view.layeraddAnimation:transitionforKey:nil];
}
+(void)animationMoveLeft:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:kCATransitionMoveIn];
[animationsetSubtype:kCATransitionFromLeft];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationMoveRight:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:kCATransitionMoveIn];
[animationsetSubtype:kCATransitionFromRight];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationRotateAndScaleEffects:(UIView*)view
{
[UIViewanimateWithDuration:0.35fanimations:^
{
view.transform= CGAffineTransformMakeScale(0.001,0.001);
CABasicAnimation*animation = [CABasicAnimationanimationWithKeyPath:@"transform"];
//向右旋转45°缩小到最小,然后再从小到大推出.
animation.toValue= [NSValuevalueWithCATransform3D:CATransform3DMakeRotation(M_PI,0.70, 0.40,0.80)];
animation.duration= 0.45;
animation.repeatCount= 1;
[view.layeraddAnimation:animationforKey:nil];
}
completion:^(BOOLfinished)
{
[UIViewanimateWithDuration:0.35fanimations:^
{
view.transform= CGAffineTransformMakeScale(1.0,1.0);
}];
}];
}
+(void)animationRotateAndScaleDownUp:(UIView*)view
{
CABasicAnimation*rotationAnimation = [CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue= [NSNumbernumberWithFloat:(2 * M_PI) *2];
rotationAnimation.duration= 0.35f;
rotationAnimation.timingFunction= [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
CABasicAnimation*scaleAnimation = [CABasicAnimationanimationWithKeyPath:@"transform.scale"];
scaleAnimation.toValue= [NSNumbernumberWithFloat:0.0];
scaleAnimation.duration= 0.35f;
scaleAnimation.timingFunction= [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
CAAnimationGroup*animationGroup = [CAAnimationGroupanimation];
animationGroup.duration= 0.35f;
animationGroup.autoreverses= YES;
animationGroup.repeatCount= 1;
animationGroup.animations=[NSArrayarrayWithObjects:rotationAnimation, scaleAnimation,nil];
[view.layeraddAnimation:animationGroupforKey:@"animationGroup"];
}
#pragma mark - PrivateAPI
+(void)animationFlipFromTop:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"oglFlip"];
[animationsetSubtype:@"fromTop"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationFlipFromBottom:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"oglFlip"];
[animationsetSubtype:@"fromBottom"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationCubeFromLeft:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"cube"];
[animationsetSubtype:@"fromLeft"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationCubeFromRight:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"cube"];
[animationsetSubtype:@"fromRight"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationCubeFromTop:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"cube"];
[animationsetSubtype:@"fromTop"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationCubeFromBottom:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"cube"];
[animationsetSubtype:@"fromBottom"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationSuckEffect:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"suckEffect"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationRippleEffect:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"rippleEffect"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationCameraOpen:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"cameraIrisHollowOpen"];
[animationsetSubtype:@"fromRight"];
[view.layeraddAnimation:animationforKey:nil];
}
+(void)animationCameraClose:(UIView*)view
{
CATransition*animation = [CATransitionanimation];
[animationsetDuration:0.35f];
[animationsetFillMode:kCAFillModeForwards];
[animationsetTimingFunction:[CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut]];
[animationsetType:@"cameraIrisHollowClose"];
[animationsetSubtype:@"fromRight"];
[view.layeraddAnimation:animationforKey:nil];
}
@end