質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3226閲覧

【Swift】UIViewを1回転させたいです。

RagnAnet1373

総合スコア69

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/04/24 02:17

編集2017/04/24 02:30

###前提・実現したいこと
前回の質問のルーレットのことになりますが、
前回のUIViewで出しているグラフを1回転させたいです。

###発生している問題・エラーメッセージ
エラーはなく動くのですが、
問題として1回転させたい時、Double.piを使って行なっているのですが、
どうしても180度回転しかできないです・・・。

###該当のソースコード

swift

1func spin() 2 { 3 // 初期化. 4 self.transform = CGAffineTransform(rotationAngle: 0) 5 6 // radianで回転角度を指定. 7 let angle:CGFloat = CGFloat(Double.pi) 8 9 // アニメーションの秒数を設定. 10 UIView.animate(withDuration: 3.0, 11 12 animations: { () -> Void in 13 14 // 回転用のアフィン行列を生成. 15 self.transform = CGAffineTransform(rotationAngle: angle) 16 }, 17 completion: { (Bool) -> Void in 18 }) 19 }

###試したこと
Double.pi/2で90度が出るということでしたので、* 2すればいいのかと単純に考えて
行なったらできず、サイトを使ってどうすればいいかと探したのですが、
M_PIを使ったものしか出て来ず、使用しても警告文が出てきて
うまく動かないという状態になりました。

こちらのサイトの
回転アニメーションをUIView自身を回転させるために使いたいです。

###補足情報(言語/FW/ツール等のバージョンなど)
Swift3,Xcode8.3です。
質問ばかりで申し訳ございません。

ヒントや参考になるサイトを教えていただけると非常にありがたいです・・・。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

swift

1//class roulettecontroller 2 @IBAction func spinButton(_ sender: Any) { 3 if(flag == false) 4 { 5 flag = true 6 self.pieChartView.spinAnim(self.pieChartView) 7 } 8 else if(flag == true) 9 { 10 flag = false 11 self.pieChartView.spinStop(self.pieChartView) 12 } 13 } 14 15 16//class rouletteview 17 18 //CABasicAnimationのtransform.zを使用する 19 let rotationAnimation = CABasicAnimation(keyPath:"transform.rotation.z") 20 21 22 func spinAnim(_ sender: UIView) 23 { 24 rotationAnimation.toValue = CGFloat(Double.pi / 180) * 360//回転角度 25 rotationAnimation.duration = 0.8//アニメーションにかかる時間 26 rotationAnimation.repeatCount = .infinity//何回繰り返すか(MAXFLOATを修正) 27 28 //アニメーションさせたいものにaddする 29 sender.layer.add(rotationAnimation, forKey: "rotationAnimation") 30 } 31 32 func spinStop(_ sender: UIView) 33 { 34 sender.layer.removeAnimation(forKey:"rotationAnimation") 35 } 36

このようにして回転と停止を実装することができました。
fuzzballさんありがとうございます!

ただ、この状態ですと始める時、止める時に一番最初の状態に戻ってしまうので、
そこはまた調べながら開発をしていき、
うまくできなかったら再び質問するかもしれません・・・。

其の時はまた宜しくお願い致します!

投稿2017/04/25 00:11

編集2017/04/25 00:33
RagnAnet1373

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/04/25 00:24

ちょっとしたことですが、repeatCountのところは、 rotationAnimation.repeatCount = .infinity とした方がいいと思います。
RagnAnet1373

2017/04/25 00:30

わかりました、そのように修正しますね!
guest

0

ベストアンサー

Double.pi/2で90度が出るということでしたので、* 2すればいいのかと単純に考えて

2倍だと180度なので、

どうしても180度回転しかできないです・・・。

これは当たり前では?
360度回転させたいなら4倍のです。

が、

やってみれば分かりますが、360度=0度と見なされるので回転しません。
180度ずつ2回に分ければ(一応)360度回転します。(出来れば一度試してみて下さい)

で、

「CABasicAnimation 360」でググって下さい。

投稿2017/04/24 02:50

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RagnAnet1373

2017/04/24 02:52

回答ありがとうございます。 参考にしてみます。
RagnAnet1373

2017/04/25 00:12

実装ができました!ありがとうございます! ただ、まだ理想となるところまでは行けていないので、 そこを頑張っていきたいと思います!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問