coreAnimation简介数组
Core Animation是一组很是强大的动画处理API,使用它能作出很是炫丽的动画效果,并且每每是事半功倍!Core Animation是全部动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它具体的子类缓存
使用它须要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h>并发
相关属性说明:属性说明:(红色表明来自CAMediaTiming协议的属性)框架
duration:动画的持续时间函数
开发步骤:动画
一、初始化一个动画对象(CAAnimation)并设置一些动画相关属性。url
二、CALayer中可动画属性均可以经过CAAnimation实现动画效果,包括:opacity、position、transform、bounds、contents等(能够在API文档中搜索:CALayer Animatable Properties)spa
三、添加动画对象到层(CALayer)中,开始执行动画线程
四、经过调用CALayer的addAnimation:forKey增长动画到层(CALayer)中,这样就能触发动画了。经过调用removeAnimationForKey能够中止层中的动画代理
五、Core Animation的动画执行过程都是在后台操做的,不会阻塞主线程
coreAnimation的继承结构
动画暂停
1 #pragma mark 暂停CALayer的动画 2 -(void)pauseLayer:(CALayer*)layer 3 { 4 CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 5 6 // 让CALayer的时间中止走动 7 layer.speed = 0.0; 8 // 让CALayer的时间停留在pausedTime这个时刻 9 layer.timeOffset = pausedTime; 10 }
动画的恢复
1 #pragma mark 恢复CALayer的动画 2 -(void)resumeLayer:(CALayer*)layer 3 { 4 CFTimeInterval pausedTime = layer.timeOffset; 5 // 1. 让CALayer的时间继续行走 6 layer.speed = 1.0; 7 // 2. 取消上次记录的停留时刻 8 layer.timeOffset = 0.0; 9 // 3. 取消上次设置的时间 10 layer.beginTime = 0.0; 11 // 4. 计算暂停的时间(这里也能够用CACurrentMediaTime()-pausedTime) 12 CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 13 // 5. 设置相对于父坐标系的开始时间(日后退timeSincePause) 14 layer.beginTime = timeSincePause; 15 }
CABasicAnimation——基本动画
1 /** 2 * beginAnimations 开始动画 3 * 4 * @param animationID 动画名称 5 * @param context 动画上下文 6 */ 7 + (void)beginAnimations:(NSString *)animationID context:(void *)context; 8 + (void)commitAnimations; //提交动画 9 10 11 + (void)setAnimationDelegate:(id)delegate; // 设置动画代理 12 + (void)setAnimationWillStartSelector:(SEL)selector; // 当将要动画的时候会调用(selector)方法 13 + (void)setAnimationDidStopSelector:(SEL)selector; // 当动画中止的时候会调用(selector)方法 14 + (void)setAnimationDuration:(NSTimeInterval)duration; // 设置动画持续时间 15 + (void)setAnimationDelay:(NSTimeInterval)delay; // delay延迟执行动画 16 + (void)setAnimationStartDate:(NSDate *)startDate; // startDate动画启动时间 17 + (void)setAnimationCurve:(UIViewAnimationCurve)curve; // 设置动画趋势(线性,中间快速头尾慢等) 18 + (void)setAnimationRepeatCount:(float)repeatCount; // 动画执行次数 19 + (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses; // 动画执行完毕以后,YES -- 自动动画恢复 ,默认为NO 20 21 /** 22 * Transition -- 转场 -- Abel's Den 23 * 24 UIViewAnimationTransitionNone, -- 空 25 UIViewAnimationTransitionFlipFromLeft, -- 左边开始转场 26 UIViewAnimationTransitionFlipFromRight, -- 右边开始转场 27 UIViewAnimationTransitionCurlUp, -- 相似翻页效果 28 UIViewAnimationTransitionCurlDown, -- 向下转场 29 * @param transition 转场参数 30 * @param view 哪一个视图 31 * @param cache 是否开启缓存 32 */ 33 + (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache; 34 /** 35 * 这个属性在动画块外没有任何做用。使用beginAnimations:context:类方法来开始一个动画块并用commitAnimations类方法来结束。默认动画不循环。 36 * 37 * @param enabled 激活动画 38 */ 39 + (void)setAnimationsEnabled:(BOOL)enabled; 40 41 + (BOOL)areAnimationsEnabled; 42 + (void)performWithoutAnimation:(void (^)(void))actionsWithoutAnimation -- 将不想执行动画的操做放在这里 43 44 @end 45 46 @interface UIView(UIViewAnimationWithBlocks) --- block 动画 47 48 /** 49 * block 动画 50 * 51 * @param duration 持续时间 52 * @param delay 延迟时间 53 * @param options 选项 54 * @param animations 动画操做 55 */ 56 + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 57 58 + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(4_0); 59 60 + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations 61 62 63 64 + (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 65 66 //过分动画 -- 转场 67 + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 68 69 + (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion 70 71 72 73 74 75 + (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray *)views options:(UIViewAnimationOptions)options animations:(void (^)(void))parallelAnimations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0); 76 77 78 UIView (UIViewKeyframeAnimations) 关键帧动画的API。 79 80 + (void)animateKeyframesWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 81 82 /** 83 * /指定一个关键帧的单个贞的时间和动画,从IOS7开始使用 84 //这里说一下参数,第一个frameStartTime实际上是个倍数从0到1,假设一个动画持续的时间是2秒 85 //设置frameStartTime为0.5,那么后面设置的动画,将会在总体动画执行1秒后开始执行 86 //第二个参数frameDuration同第一个,是指动画持续时间 87 //第三个是一个block对象,里面就是你设置的所要执行的动画,无参数和返回值 88 */ 89 90 + (void)addKeyframeWithRelativeStartTime:(double)frameStartTime relativeDuration:(double)frameDuration animations:(void (^)(void))animations NS_AVAILABLE_IOS(7_0);
push 转场动画 - (void)moreBtnClick { // // CA_EXTERN NSString * const kCATransitionFade ---- // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCATransitionMoveIn ----- // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCATransitionPush ----- // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCATransitionReveal ------- // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // // /* Common transition subtypes. */ // // CA_EXTERN NSString * const kCATransitionFromRight ---- // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCATransitionFromLeft // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCATransitionFromTop // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCATransitionFromBottom // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCAMediaTimingFunctionLinear // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCAMediaTimingFunctionEaseIn // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCAMediaTimingFunctionEaseOut // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCAMediaTimingFunctionEaseInEaseOut // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCAMediaTimingFunctionDefault // __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_3_0); // // /* `rotationMode' strings. */ // // CA_EXTERN NSString * const kCAAnimationRotateAuto // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); // CA_EXTERN NSString * const kCAAnimationRotateAutoReverse // __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); /** transition.type fade 交叉淡化过渡 push 新视图把旧视图推出去 moveIn 新视图移到旧视图上面 reveal 将旧视图移开,显示下面的新视图 cube 立方体翻滚效果 oglFlip 上下左右翻转效果 suckEffect 收缩效果,如一块布被抽走 rippleEffect 水滴效果 pageCurl 向上翻页效果 pageUnCurl 向下翻页效果 cameraIrisHollowOpen 相机镜头打开效果 cameraIrisHollowClose 相机镜头关闭效果 */ NSLog(@"更多"); SDViewController *vc = [[SDViewController alloc] init]; CATransition *transition = [CATransition animation]; transition.duration = 0.618f; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = @"fade"; //@"push"; //@"cube"; transition.subtype = kCATransitionFromBottom; transition.delegate = self; [self.navigationController.view.layer addAnimation:transition forKey:nil]; // [self.navigationController pushViewController: firstViewController animated:YES]; [self.navigationController pushViewController:vc animated:YES]; // [self presentViewController:vc animated:YES completion:^{ // // }]; // [UIView animateWithDuration:1 animations:^{ // self.sdVC.view.transform = CGAffineTransformMakeTranslation(0, self.view.frame.size.height); // //// self.tableView.scrollEnabled = NO; // self.navigationController.navigationBarHidden = YES; // }]; }