Как сделать "трясущуюся" анимацию
В моем проекте xcode у меня есть UIImage. Я хочу немного встряхнуть (анимацию) слева направо. Я написал этот код, однако, он не работает.
-(void)errorShake
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[lockImage setTransform:CGAffineTransformMakeRotation(-5 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(-10 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(-15 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(-20 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(-15 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(-10 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(-5 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(0 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(5 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(10 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(15 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(20 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(15 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(10 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(5 * M_PI / 180.0)];
[lockImage setTransform:CGAffineTransformMakeRotation(0 * M_PI / 180.0)];
[UIView commitAnimations];
}
Не могли бы вы рассказать мне, пожалуйста, как я могу сотрясать изображение?
Ответы
Ответ 1
Здесь код, который я использую для этого эффекта.
-(void)shakeView {
CABasicAnimation *shake = [CABasicAnimation animationWithKeyPath:@"position"];
[shake setDuration:0.1];
[shake setRepeatCount:2];
[shake setAutoreverses:YES];
[shake setFromValue:[NSValue valueWithCGPoint:
CGPointMake(lockImage.center.x - 5,lockImage.center.y)]];
[shake setToValue:[NSValue valueWithCGPoint:
CGPointMake(lockImage.center.x + 5, lockImage.center.y)]];
[lockImage.layer addAnimation:shake forKey:@"position"];
}
Как указано Jere
. Обязательно укажите импорт:
#import <QuartzCore/QuartzCore.h>
Вы также можете добавить его как категорию в UIView
.
Ответ 2
brynbodayles отвечает также работает под iOS8 для анимации встряхивания в swift.
С импортом QuartzCore:
func shakeView(){
var shake:CABasicAnimation = CABasicAnimation(keyPath: "position")
shake.duration = 0.1
shake.repeatCount = 2
shake.autoreverses = true
var from_point:CGPoint = CGPointMake(LoginField.center.x - 5, LoginField.center.y)
var from_value:NSValue = NSValue(CGPoint: from_point)
var to_point:CGPoint = CGPointMake(LoginField.center.x + 5, LoginField.center.y)
var to_value:NSValue = NSValue(CGPoint: to_point)
shake.fromValue = from_value
shake.toValue = to_value
LoginField.layer.addAnimation(shake, forKey: "position")
}
Ответ 3
От Корона ответ
Дайте анимацию встряски в нескольких кнопках, а также в представлениях SWIFT3
для анимации просмотра просто измените расширение UIButton на расширение UIView
extension UIButton
{
func shakeAnim ()
{
let shake:CABasicAnimation = CABasicAnimation(keyPath: "position")
shake.duration = 0.1
shake.repeatCount = 2
shake.autoreverses = true
let from_point:CGPoint = CGPoint(x:self.center.x - 5,y: self.center.y)
let from_value:NSValue = NSValue(cgPoint: from_point)
let to_point:CGPoint = CGPoint(x:self.center.x + 5,y: self.center.y)
let to_value:NSValue = NSValue(cgPoint: to_point)
shake.fromValue = from_value
shake.toValue = to_value
self.layer.add(shake, forKey: "position")
}
}