CABasicAnimation
当有多个动画时,区分动画的方式:
- 如果添加动画的视图图层是全局的,
//添加动画是设置key
[self.view.layer addAnimation:animation forKey:@"animationKey"];
//在代理中,通过animationForKey:进行比较
[anim isEqual:[self.view.layer animationForKey:@"animationKey"]]
*CAAnimation实现了KVC协议,可以通过key-value为动画添加标识
//添加key-value
[animation setValue:@"animation" forKey:@"animationKey"];
//在代理中,进行比较
[[anim valueForKey:@"animationKey"] isEqualToString:@"animation"]
CAKeyframeAnimation - 关键帧动画
*可以设置一连串个随意的值做动画(values)
-
关键帧动画
在动画开始的时候回突然调转到第一针
,在结束的时候突然恢复到原始的值
,所以为了动画的平滑,我们通常在动画的开始和结束的关键帧
设置为当前属性的值
。 - 如果设置结束和开始值不同的动画,需要在动画启动之前手动更新属性和最后一帧保持一致。
- 使用CGPath设置动画
-
animation.rotationMode = kCAAnimationRotateAuto
根据切线方向自动旋转
CAAnimationGroup - 动画组
一个继承于CAAnimation的子类,添加了一个
animations
数组的属性,用来组合其他的动画。
CATransition - 过渡
- 对于单独存在的图层,我们可以通过实现图层的
actionForLayer:forKey:
委托方法,或者提供一个actions
字典来控制隐式动画 - 对于UIView的跟图层,因为禁用了隐式动画,所以我们可以使用
CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
[self.imageView.layer addAnimation:transition forKey:nil];
UIImage *currentImage = self.imageView.image;
NSUInteger index = [self.images indexOfObject:currentImage];
index = (index + 1) % [self.images count];
self.imageView.image = self.images[index];
- 过渡动画和之前的属性动画或者动画组添加到图层上的方式一致,都是通过
-addAnimation:forKey:
方法。但是和属性动画不同的是,对指定的图层一次只能使用一次CATransition
。无论你对动画的键设置成什么值,过渡动画都会对它的键设置成"transition" -
CATransition
并不作用于指定的图层属性,这就是说你可以在即使不能准确得知改变了什么的情况下对图层做动画,例如,在不知道UITableView哪一行被添加或者删除的情况下,直接就可以平滑地刷新它
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
[self.tabBarController.view.layer addAnimation:transition forKey:nil];
}
- CATransition是一种对那些不太好做平滑动画属性的强大工具
自定义动画
+ (void)transitionWithView: duration: options:animations: completion:
+ (void)transitionFromView: toView: duration: options: completion:
动画过程中取消动画
通过
-addAnimation: forKey:
中的key
来移除动画,-removeAnimationForKey:
简单记录
实现动画的方式
- CATransaction: begin,commit
- UIView : [UIView beginAnimations:nil context:nil];
- UIView: animateWithDuration,transitionWithView,transitionFromView等对图层树的动画
- CATransition: 两种:1:actions字典 2:addAnimation:forKey:
- CABasicAnimation:keyPath 属性动画
- CAKeyframeAnimation:values 一连串动画,数组的初始和结束 ,注意动画衔接平滑; path可以绘制一段动画路径
- CAAnimationGroup: animations组合动画