iOS-CoreAnimation 核心动画
前提
说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) {
}];