ボタンを取得し、その中の画像を回転させたい:
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);
ユーザーがクリックした後の画像は上矢印から下矢印ですボタンをもう一度クリックすると、下矢印を上矢印にもう一度回転させたいのですが、同じ反時計回りの回転ですが、矢印を逆に戻したいだけです上矢印に
コードをローテーションバック:
_self.DashButton.imageView.transform = CGAffineTransformIdentity;
_
私は試した
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(-M_PI);
私が欲しいのは、完全な円を回転させることではなく、360度完全に回転させるのではなく、180回転と-180回転させることです。
-M_PIの代わりに、-3.14159を使用します。ちょっとしたトリックですが、以下のコードは私の一日を救いました。
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI - 3.14159);
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(0);
必要なのは、反対方向に回転させるための負の角度です
CGAffineTransformMakeRotation(180 * CGFloat(M_PI/180))
CGAffineTransformMakeRotation(-1 * CGFloat(M_PI/180))
説明のためにこの答えを見てください CGAffineTransformMakeRotationの回転方向について?
@MariaワーキングアンサーのSwift4バージョン
反時計回りに180度回転します。
let transform = CGAffineTransform.identity
UIView.animate(withDuration: 0.3, animations: {
// to rotate counterclockwise set both of these in this exact order
self.button.transform = transform.rotated(by: 180 * CGFloat(Double.pi))
self.button.transform = transform.rotated(by: -1 * CGFloat(Double.pi))
}
時計回りに180度回転します。
UIView.animate(withDuration: 0.3, animations: {
self.button.transform = CGAffineTransform.identity
}
これを試して
arrowLeft.transform = CGAffineTransformMakeRotation(180 *M_PI / 180.0);
arrowLeft.transform = CGAffineTransformMakeRotation(0*M_PI/180);
使用することもできます
imageView.image = UIImage(cgImage: imageView.image!.cgImage! , scale: 1.0, orientation: .down)
Swift 3:
CABasicAnimation
の使用
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
関数は次のとおりです。
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
}
これはどう?
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI * 2);
それは私のコードで動作します:)