2015-07-17 11 views
11

Ich versuche, eine Drehung von 180 Grad eineine UIImageView in Swiftbelebte Rotation UIImageView in schnellen

gar
UIView.animateWithDuration(1.0, animations: {() -> Void in 
     self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(180 * M_PI)) 
    }) { (succeed) -> Void in 

    } 

Aber sind nicht belebende zu animieren. Ich möchte animateWithDuration verwenden, weil ich es mit CGAffineTransformMakeIdentity

mit UIView Animationen wiederherstellen will.

UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(1) 
    UIView.setAnimationCurve(UIViewAnimationCurve.EaseIn) 
    let radians = CGFloat(180 * M_PI/180) 
    arrowImageView.transform = CGAffineTransformMakeRotation(radians) 
    UIView.commitAnimations() 
+0

siehe https://stackoverflow.com/a/48838627/7576100 – Jack

Antwort

-2

Versuchen Aufruf arrowImageView.layoutSubviews() finden Sie unter:

UIView.animateWithDuration(1.0, animations: {() -> Void in 
     self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(180 * M_PI)) 
     self.arrowImageView.layoutSubviews() 
    }) { (succeed) -> Void in 

    } 
7

Vor allem, wenn Sie sich um 180 Grad gedreht werden soll, die in Radiant zu übersetzen hat. 180 Grad im Bogenmaß ist pi. 360 Grad wäre 2 * pi. 180 * pi würde Ihre Animation 90 Mal in einer Sekunde drehen und mit der ursprünglichen Ausrichtung enden.

Zweitens, ich bin nicht sicher, warum Ihr Code nicht funktioniert, aber ich weiß, dass der folgende Code funktioniert:

let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation") 
rotationAnimation.fromValue = 0.0 
rotationAnimation.toValue = M_PI 
rotationAnimation.duration = 1.0 

self.arrowImageView.layer.addAnimation(rotationAnimation, forKey: nil) 
3

Sie den „/ 180“ links heraus „CGFloat (180 * M_PI) ". Versuchen Sie:

 UIView.animateWithDuration(1.0, animations: { 
      self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI)) 
     }) 
8

Hier ist Code zum Drehen von Imageview. swift 3,0

UIView.animate(withDuration:2.0, animations: { 
      self.dropDownImage.transform = CGAffineTransform(rotationAngle: CGFloat(imageRotation)) 
     }) 
3

Seien Sie sicher, in der Haupt-Thread

DispatchQueue.main.async { 
    UIView.animateWithDuration(1.0, animations: {() -> Void in 
    self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(180 * M_PI)) 
    }) { (succeed) -> Void in 

    } 
} 
1

ich aus dem Internet diese Antwort zu finden, und ich es testen, arbeiten völlig in Ordnung. Hoffe, dass dies zu einem helfen wird, sondern nur den UIView, um Ihren Bedarf zu ändern, wie UIView, UIButton, UIImageView etc. und Zugang mit der myUIView.rotate() Funktion, hier myUIViewsein sollte Ersetzen Sie durch Ihren Ansichtsnamen (IBOutlet -> name) mit dem korrekten Ansichtstyp für die Erweiterung. Dies ist die link, die ich diese Antwort gefunden habe. Und diese Methode ist eazy und arbeitet!

extension UIView{ 
    func rotate() { 
     let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") 
     rotation.toValue = NSNumber(double: M_PI * 2) 
     rotation.duration = 1 
     rotation.cumulative = true 
     rotation.repeatCount = FLT_MAX 
     self.layer.addAnimation(rotation, forKey: "rotationAnimation") 
    } 
} 
+0

in schnellen 4 ** ** M_PI wurde ersetzen ** Double.pi ** und ** ** FLT_MAX ersetzen ** Float.greatestFiniteMagnitude ** und ** kumulativ ** mit ** isCumulative ** :) –