xcode 如何制作“摇晃”动画
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12710630/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to make "shaking" animation
提问by SmartTree
In my xcode project I have an UIImage. I want to make it shaking (animation) from left to right a little bit. I wrote this code, however, its not working.
在我的 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];
}
Could you tell me please, how can I make my image shake ?
你能告诉我,我怎样才能让我的图像抖动?
回答by brynbodayle
Here's the code I use for that effect.
这是我用于该效果的代码。
-(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"];
}
As Jerementioned. Make sure to include the import:
作为Jere提及。确保包括导入:
#import <QuartzCore/QuartzCore.h>
You can also add it as a category on UIView.
您还可以将其添加为 上的类别UIView。
回答by Corona
brynbodayles answer also works under iOS8 for a shake animation in swift.
brynbodayles 的回答也适用于 iOS8 下的快速摇动动画。
With Import of QuartzCore:
随着 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")
}
回答by Arun Kumar Raut
func shakeView(_ view: UIView?) {
let shake = CABasicAnimation(keyPath: "position")
shake.duration = 0.1
shake.repeatCount = 2
shake.autoreverses = true
shake.fromValue = NSValue(cgPoint: CGPoint(x: (view?.center.x)! - 5, y: view?.center.y ?? 0.0))
shake.toValue = NSValue(cgPoint: CGPoint(x: (view?.center.x)! + 5, y: view?.center.y ?? 0.0))
view?.layer.add(shake, forKey: "position")
}
回答by seggy
From Coronaanswer
来自电晕答案
Give shake animation in multiple buttons and also in views SWIFT3
在多个按钮和视图中提供震动动画 SWIFT3
for view animation just change extension UIButton to extension UIView
对于视图动画,只需将扩展 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")
}
}

