iOS CALayer 抖动效果

方式一

 1 - (void)shakeAnimationForView:(UIView *)view
 2 {
 3     CALayer *layer = [view layer];
 4     CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
 5     animation.keyPath = @"position.x";
 6     animation.values = @[ @0, @5, @10, @-10, @10, @5, @0 ];
 7     animation.keyTimes = @[ @0, @(1 / 6.0),@(2 / 6.0), @(3 / 6.0), @(5 / 6.0),@(2 / 6.0), @1 ];
 8     animation.duration = 0.4;
 9     
10     animation.additive = YES;
11     
12     [layer addAnimation:animation forKey:@"shake"];
13 }

 

方式二

 1 - (void)shakeAnimationForView:(UIView *) view
 2 
 3 {   
 4     //获取到当前View的layer
 5     CALayer *viewLayer = view.layer;
 6     
 7     //获取当前View的位置
 8     CGPoint position = viewLayer.position;
 9 
10     //移动的两个终点位置
11     CGFloat scale = 5.0f;
12     CGPoint beginPosition = CGPointMake(position.x + scale, position.y);
13     CGPoint endPosition = CGPointMake(position.x - scale, position.y);
14     
15     //设置动画
16     CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
17     
18     //设置运动形式
19     [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
20     
21     //设置开始位置
22     [animation setFromValue:[NSValue valueWithCGPoint:beginPosition]];
23     
24     //设置结束位置
25     [animation setToValue:[NSValue valueWithCGPoint:endPosition]];
26     
27     //设置自动反转
28     [animation setAutoreverses:YES];
29     
30     //设置时间
31     [animation setDuration:0.1];
32     
33     //设置次数
34     [animation setRepeatCount:3];
35     
36     //添加上动画
37     [viewLayer addAnimation:animation forKey:nil];
38     
39 }

 

posted on 2015-06-25 11:54  airy99  阅读(614)  评论(0编辑  收藏  举报