2012-10-03 13 views
16

In meinem xcode Projekt habe ich ein UIImage. Ich möchte es von links nach rechts ein wenig schütteln (Animation). Ich habe diesen Code geschrieben, funktioniert aber nicht.Wie man "Schütteln" Animation macht

-(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]; 
} 

Können Sie mir bitte sagen, wie kann ich mein Bild schütteln?

Antwort

45

Hier ist der Code, den ich für diesen Effekt verwende.

-(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"]; 
    } 

Als Jere erwähnt. Achten Sie darauf, um den Import enthalten:

#import <QuartzCore/QuartzCore.h> 

Sie es auch als Kategorie auf UIView hinzufügen können.

+0

Danke! Aber muss ich dem Projekt ein Framework/eine Bibliothek hinzufügen? Xcode gibt einen Fehler wegen der ersten Zeile. – SmartTree

+2

fügen Sie Ihrem Projekt das 'QuartzCore'-Framework hinzu! Fügen Sie auch '#import ' in die Datei ein, in der Sie die Animation verwenden möchten, oder besser noch in der Präfix-Header-Datei von Apps, damit Sie sie von jeder Klasse aus sehen können. – jere

+0

Wunderbar! Und noch eine Frage: Was ist [Self-Center]? – SmartTree

11

Brynbodylles Antwort funktioniert auch unter iOS8 für eine Shake-Animation in swift.

Mit Import von Quartz:

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") 
} 
+0

Wie man diese Animation zwischendurch stoppt, während sich der Shake wiederholt –

-1

Von Corona Antwort

Geben Shake Animation in mehrere Schaltflächen und auch in Ansichten swift3

für Animation ansehen gerade Verlängerung UIButton auf Verlängerung UIView ändern

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") 
    } 
}