http://www.jianshu.com/p/02c341c748f9
Core Animation 后台执行不会阻塞主线程直接作用在CALayer上而不是UIView
CALayer *layer = [CALayerlayer];
layer.position =CGPointMake(100,100);
layer.bounds =CGRectMake(0,0,100,100);
layer.backgroundColor = [UIColorredColor].CGColor;
layer.contents = (id)[UIImageimageNamed:@"imageName"].CGImage;
[self.view.layeraddSublayer:layer];
_layer = layer;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//创建动画对象
CABasicAnimation *anim = [CABasicAnimationanimation];
//设置动画的属性
anim.keyPath =@"transform.scale";
//设置属性改变的值
anim.toValue =@0.5;
//设置动画时长
anim.duration =0.25;
//取消反弹
//动画执行完毕之后不要把动画移除
anim.removedOnCompletion =NO;
//保持最新的位置
anim.fillMode =kCAFillModeForwards;
//重复动画的次数
anim.repeatCount =MAXFLOAT;
//给图层添加了动画
[_layeraddAnimation:animforKey:nil];
}
- (void)position
{
//创建动画对象
CABasicAnimation *anim = [CABasicAnimationanimation];
//设置动画的属性 平移position 旋转transform.rotation缩放transform.scale
anim.keyPath =@"position";
//设置属性改变的值
anim.toValue = [NSValuevalueWithCGPoint:CGPointMake(200,200)];
//设置动画时长
anim.duration =2;
//取消反弹
//动画执行完毕之后不要把动画移除
anim.removedOnCompletion =NO;
//保持最新的位置
anim.fillMode =kCAFillModeForwards;
//给图层添加了动画
[_layeraddAnimation:animforKey:nil];
}
动画组 多动画同时执行
CABasicAnimation *rotation = [CABasicAnimation animation];
rotation.keyPath = @"transform.rotation";
rotation.toValue = @M_PI_2;
CABasicAnimation *position = [CABasicAnimation animation];
position.keyPath = @"position";
position.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 250)];
CABasicAnimation *scale = [CABasicAnimation animation];
scale.keyPath = @"transform.scale";
scale.toValue = @0.5;
CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = @[rotation,position,scale];
group.duration = 2;
// 取消反弹
group.removedOnCompletion = NO;
group.fillMode = kCAFillModeForwards;
[_redView.layer addAnimation:group forKey:nil];
简单的转场动画
NSString *fileName = [NSStringstringWithFormat:@"%d",_index];
_imageView.image = [UIImageimageNamed:fileName];
CATransition *anim = [CATransitionanimation];
//设置转换的动画效果/* The name of the transition. Current legal transition types include
* `fade', `moveIn', `push' and `reveal' “rippleEffect”. Defaults to `fade'. */
//翻页方式anim.type =@"pageCurl";
//左起翻动
anim.subtype =kCATransitionFromLeft;
/* The amount of progress through to the transition at which to begin
* and end execution. Legal values are numbers in the range [0,1].
* `endProgress' must be greater than or equal to `startProgress'.
* Default values are 0 and 1 respectively. */
// anim.startProgress = 0.5;
anim.duration =2;
[_imageView.layeraddAnimation:animforKey:nil];