Ответ Винциуса очень классный. Однако колебание вращается только от 0 радиан до 0,08. Таким образом, колебание может выглядеть немного неуравновешенным. Если вы столкнулись с этой же проблемой, вы можете добавить как отрицательный, так и положительный поворот, используя CAKeyframeAnimation вместо CABasicRotation:
- (CAAnimation*)getShakeAnimation
{
CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
CGFloat wobbleAngle = 0.06f;
NSValue* valLeft = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(wobbleAngle, 0.0f, 0.0f, 1.0f)];
NSValue* valRight = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(-wobbleAngle, 0.0f, 0.0f, 1.0f)];
animation.values = [NSArray arrayWithObjects:valLeft, valRight, nil];
animation.autoreverses = YES;
animation.duration = 0.125;
animation.repeatCount = HUGE_VALF;
return animation;
}
Вы можете использовать этот метод анимации для вида или кнопки, как эта.
[self.yourbutton.layer addAnimation:[self getShakeAnimation] forKey:@""];