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

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

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

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

Q&A

解決済

1回答

2615閲覧

CGAffineTransForm・拡大縮小の仕方

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2017/08/20 23:43

###前提・実現したいこと
ボタンをはなした時にプルンプルンさせたい。

###該当のソースコード
func onDownButton(sender: UIButton) {
UIView.animate(withDuration: 0.1, animations: { () -> Void in

self.myButton.transform = CGAffineTransform(scaleX: 0.6, y: 0.6) self.myButton.backgroundColor = UIColor.blue }) } func onChangeColor(sender: UIButton) { self.view.backgroundColor = UIColor.white } func onChangeColor2(sender: UIButton) { self.view.backgroundColor = UIColor.black } //ボタンイベント(アップ) func onUpButton(sender: UIButton) { UIView.animate(withDuration: 1, animations: { () -> Void in self.myButton.transform = CGAffineTransform(scaleX: 0.2, y: 0.2) self.myButton.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) // self.myButton.backgroundColor = UIColor.green }) { (Bool) -> Void in } }

###scalex,yを0.2にしているのに、ボタンは大きくなります。
1未満に設定しているのだから、ボタンは小さくなるのでは?

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

scaleを0.2にしているのにボタンが大きくなるのは、ただの誤動作だと思います。

現在の値からアニメーション・ブロック内に書いた値に向かって(デフォルトでは)直線的なカーブで値が変化するのが、暗黙的アニメーションの基本仕様です。
アニメーション・ブロック内で2回値を変更しても複雑なカーブを描くことはできません。

CAKeyframeAnimationクラスで明示的アニメーションを使用してください。

swift

1func onUpButton(sender: UIButton) { 2 UIView.animate(withDuration: 1, animations: { () -> Void in 3 4 let animation = CAKeyframeAnimation() 5 animation.values = [0.6, 0.2, 1.0] 6 animation.keyTimes = [0.0, 0.5, 1.0] 7 animation.duration = 1.0 8 self.myButton.layer.add(animation, forKey: "transform.scale.x") 9 self.myButton.layer.add(animation, forKey: "transform.scale.y") 10 11 self.myButton.backgroundColor = UIColor.green 12 13 }) { (Bool) -> Void in 14 self.myButton.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) 15 } 16}

投稿2017/08/22 14:58

Stripe

総合スコア2183

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

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

退会済みユーザー

退会済みユーザー

2017/08/22 23:24

ありがとうございました。Void inの意味が理解できていないので勉強したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問