2015-02-11 119 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 
}