iOS-CoreAnimation 核心动画

2018-01-02  本文已影响12人  Fat_L

前提

说coreAnimation动画前,先说下UIView动画

UIView动画实质上是对Core Animation的封装,提供简洁的动画接口。

UIView动画可以设置的动画属性有:

1、大小变化(frame)

2、拉伸变化(bounds)

3、中心位置(center)

4、旋转(transform)

5、透明度(alpha)

6、背景颜色(backgroundColor)

7、拉伸内容(contentStretch)

实行方式

1.block动画

2.Spring动画

3.Keyframes动画

4.转场动画

4.1 单个视图的过渡效果

[UIView transitionWithView:self.centerShow         

             duration:1.0

             options:UIViewAnimationOptionTransitionCrossDissolve

             animations:^{self.centerShow.image = [UIImageimageNamed:@"Service"];  

} completion:^(BOOLfinished) {

              NSLog(@"动画结束");  
}];

UIImageView* newCenterShow = [[UIImageView alloc]initWithFrame:self.centerShow.frame];    newCenterShow.image = [UIImage imageNamed:@"Service"];   

[UIView transitionFromView:self.centerShow

              toView:newCenterShow

              duration:1.0

              options:UIViewAnimationOptionTransitionFlipFromLeft

              completion:^(BOOLfinished) {

              NSLog(@"动画结束");   

}];

4.2 从旧视图转到新视图的动画效果

UIImageView* newCenterShow = [[UIImageView alloc]initWithFrame:self.centerShow.frame];    newCenterShow.image = [UIImage imageNamed:@"Service"];  

[UIView transitionFromView:self.centerShow

              toView:newCenterShow duration:1.0

              options:UIViewAnimationOptionTransitionFlipFromLeft

completion:^(BOOLfinished) {

        NSLog(@"动画结束");   

}];

内存管理

UIView执行动画不会引起内存泄漏,因为UIView是一个类,没有被引用动画的self持有。

Core Animation 核心动画 

Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程.

core Animation层级结构:

核心动画作用在CALayer(Core animation layer)上

核心动画位于UIKit的下一层,相比UIView动画,它可以实现更复杂的动画效果。

核心动画和UIView动画的对比:UIView动画可以看成是对核心动画的封装,和UIView动画不同的是,通过核心动画改变layer的状态(比如position),动画执行完毕后实际上是没有改变的(表面上看起来已改变)。

总体来说核心动画的优点有:

1)性能强大,使用硬件加速,可以同时向多个图层添加不同的动画效果

2)接口易用,只需要少量的代码就可以实现复杂的动画效果。

3)运行在后台线程中,在动画过程中可以响应交互事件(UIView动画默认动画过程中不响应交互事件)。

Core Animation是一组非常强大的动画处理API,简单分为以下几类:

       CABasicAnimation               基础动画

       CAKeyframeAnimation        帧动画

       CATransition 转场动画

  CAAnimationGroup           组动画,组中动画一起执行

  CASpringAnimation          弹簧动画

继承关系:

       CATransition > CAAnimation

       CABasicAnimation > CAPropertyAnimation > CAAnimation

       CAKeyframeAnimation > CAPropertyAnimation > CAAnimation

常用KeyPath总结

常用属性

fromValue byValue toValue

repeatDuration: 动画的持续时间

beginTime : 动画的开始时间

repeatCount : 动画的重复次数

autoreverses : 执行的动画按照原动画返回执行

timingFunction : 控制动画的显示节奏系统提供五种值选择

delegate : 动画代理。能够检测动画的执行和结束。

@interface NSObject (CAAnimationDelegate)

 - (void)animationDidStart:(CAAnimation *)anim;

 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

@end

path:关键帧动画中的执行路径

type:过渡动画的动画类型,系统提供了四种过渡动画。

最后如果是用约束布局,动画可以用如下方法实现:

[UIView animateWithDuration:0.5 animations:^{

        self.tableViewTop.constant = 100;

        [self.view layoutIfNeeded];

}completion:^(BOOL finished) {

}];

上一篇下一篇

猜你喜欢

热点阅读