web-dev-qa-db-ja.com

UIImageViewの場合は180度回転し、同じルートで元に戻します

ボタンを取得し、その中の画像を回転させたい:

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

ユーザーがクリックした後の画像は上矢印から下矢印ですボタンをもう一度クリックすると、下矢印を上矢印にもう一度回転させたいのですが、同じ反時計回りの回転ですが、矢印を逆に戻したいだけです上矢印に

コードをローテーションバック:

_self.DashButton.imageView.transform = CGAffineTransformIdentity;_

私は試した

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

私が欲しいのは、完全な円を回転させることではなく、360度完全に回転させるのではなく、180回転と-180回転させることです。

12
Wingzero

-M_PIの代わりに、-3.14159を使用します。ちょっとしたトリックですが、以下のコードは私の一日を救いました。

self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI - 3.14159);
17
Wingzero
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(M_PI);
self.DashButton.imageView.transform = CGAffineTransformMakeRotation(0);
6
Si Fisher

必要なのは、反対方向に回転させるための負の角度です

CGAffineTransformMakeRotation(180 * CGFloat(M_PI/180))

CGAffineTransformMakeRotation(-1 * CGFloat(M_PI/180))

説明のためにこの答えを見てください CGAffineTransformMakeRotationの回転方向について?

6
Maria

@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
}
2
Lance Samaria

これを試して

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

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

使用することもできます

imageView.image = UIImage(cgImage: imageView.image!.cgImage! , scale: 1.0, orientation: .down)
0
Carien van Zyl

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 
}
0
Krunal

これはどう?

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

それは私のコードで動作します:)

0
wsnjy