方式一
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 }
时间: 2024-11-07 11:21:03