2015-02-11 233 views
4

我有一個按鈕,要旋轉它裏面的圖片:旋轉180度的的UIImageView和旋轉回來原路

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);

的圖像是一個向上箭頭,之後向下箭頭用戶點擊它 當再次點擊按鈕時,我想再次向下箭頭旋轉向上箭頭,但它是相同的逆時針旋轉,但我只是想要箭頭反轉回向上箭頭

向後旋轉代碼:

self.DashButton.imageView.transform = CGAffineTransformIdentity;

我試圖

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(-M_PI);

我想是不是旋轉了一圈,僅有180旋轉和旋轉-180,而不是一個完整的360旋轉

+0

'CGAffineTransformMakeRotation(-O);'? – Larme 2015-02-11 09:04:41

+0

我已經完成了我的答案。一探究竟。 -0沒有幫助 – Wingzero 2015-02-11 09:26:57

回答

16

而不是-M_PI,使用-3.14159。一種伎倆,但下面的代碼保存了我的一天。

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI); 
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI - 3.14159); 
+0

CoreAnimation可用於計算最短變換,因此使用圓角pi時,最短變換將使旋轉反向。然而,實際上旋轉似乎與使用pi無法區分。 – Johan 2017-01-24 16:05:34

0

試試這個

arrowLeft.transform = CGAffineTransformMakeRotation(180 *M_PI/180.0); 

arrowLeft.transform = CGAffineTransformMakeRotation(0*M_PI/180); 
+0

不,它和我的代碼一樣。你試過了嗎?我想要的不是旋轉整個圓,只是180旋轉和-180旋轉,不是360全旋轉 – Wingzero 2015-02-11 06:38:36

+0

這個想法沒有錯,但旋轉0仍然沿着順時針方向走,我想要相反的時鐘。 – Wingzero 2015-02-11 07:03:35

+0

@Wingzero你想讓動畫變化動畫嗎? – 2015-02-11 07:04:20

2
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI); 
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(0); 
+1

歡迎來到Stack Overflow!雖然這段代碼可能有助於解決這個問題,但它並沒有解釋_why_和/或_how_它是如何回答這個問題的。提供這種附加背景將顯着提高其長期價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 – 2016-08-11 16:38:48

0

你也可以使用

imageView.image = UIImage(cgImage: imageView.image!.cgImage! , scale: 1.0, orientation: .down) 
1

這個怎麼樣?

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI); 
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI * 2); 

它適用於我的代碼:)

0

斯威夫特3:

var rotationAnimation = CABasicAnimation() 
rotationAnimation = CABasicAnimation.init(keyPath: "transform.rotation.z") 
rotationAnimation.toValue = NSNumber(value: (Double.pi)) 
rotationAnimation.duration = 1.0 
rotationAnimation.isCumulative = true 
rotationAnimation.repeatCount = 100.0 
view.layer.add(rotationAnimation, forKey: "rotationAnimation") 


這裏是UIView的一個擴展功能,處理開始&停止旋轉操作:

extension UIView { 

    func startRotation() { 
     let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") 
     rotation.fromValue = 0 
     rotation.toValue = NSNumber(value: Double.pi) 
     rotation.duration = 1.0 
     rotation.isCumulative = true 
     rotation.repeatCount = FLT_MAX 
     self.layer.add(rotation, forKey: "rotationAnimation") 
    } 

    func stopRotation() { 
     self.layer.removeAnimation(forKey: "rotationAnimation") 
    } 
} 


現在使用,UIView.animation閉合:

UIView.animate(withDuration: 0.5, animations: { 
     button.transform = CGAffineTransform(rotationAngle: (CGFloat(Double.pi)) 
}) { (isAnimationComplete) in 
    // Animation completed 
}