標籤:
方式一
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 }
iOS CALayer 抖動效果