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

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

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

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

Q&A

解決済

1回答

1441閲覧

表示したビューをボタンを押すたびにx軸方向へ10ピクセルずつ動かしたい

silva

総合スコア13

Swift

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

0グッド

0クリップ

投稿2019/04/02 08:08

編集2019/04/02 08:19

前提・実現したいこと

初学者です。スーパービュー上に表示したイメージビューmyCarを、設置した右へボタンを押すたびにx軸方向へ10ポイントづつ動かしたいです。ソースコードはテキストに記載のものをそのまま転記しており、エラーは出ないのですがうまく動きません。

発生している問題・エラーメッセージ

ボタンを押すたびに10ピクセルつつ右に移動するはずなのですが、ボタンを1回押す時のみ10ポイント右に動くものの、2回目以降は動きません。エラーは出ていません。

エラーメッセージ

該当のソースコード

Swift5

1 2import UIKit 3 4class ViewController: UIViewController { 5 6 //myCarをOutlet接続 7 @IBOutlet weak var myCar: UIImageView! 8 //ホーム座標を決める 9 let homePoint = CGPoint(x: 100, y: 150) 10 11 //ホームに戻るボタン 12 @IBAction func goHome(_ sender: Any) { 13 myCar.center = homePoint 14 } 15 //右へ進むボタン 16 @IBAction func move(_ sender: Any) { 17 myCar.center.x += 10 18 } 19 20 //開始時にホームへ移動する 21 override func viewDidLayoutSubviews() { 22 myCar.center = homePoint 23 } 24 25 override func viewDidLoad() { 26 super.viewDidLoad() 27 // Do any additional setup after loading the view. 28 29 } 30}

試したこと

myCar.center.x += 10 の後にprintでプロパティを確認したところ、myCar.center.xの値が何回ボタンを押しても110になっているようです(本来は10づつ増えていかなければならない)。ですので代入演算子の"+="がうまく動作していないように思えるのですが、解決法が思い浮かびません。

初学者の上、初めての投稿で不足な点もあるかと思いますが、ご回答いただけると大変助かります。

補足情報(FW/ツールのバージョンなど)

xcode: ver.10.2
swift5.0

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

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

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

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

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

silva

2019/04/02 08:20

ご指摘すみません。```で囲いました。 制約についてですが、特につけていません。もしかしてそれが原因でしょうか??
guest

回答1

0

ベストアンサー

提示された情報からは特に原因が見つからないので妄想ですが、ボタンのアクションがgoHome(_:)にも繋がっていないでしょうか?


以下、質問と関係のない話。

viewDidLayoutSubviews()は開始時だけ呼ばれるわけではなく、レイアウトが変更された場合などに何度でも呼ばれます。(例えば画面を回転させたとき)
開始時だけに行いたい処理はviewDidLoad()に書いて下さい。

また、viewDidLayoutSubviews()を使う場合はsuperの呼び出しを行って下さい。

swift

1override func viewDidLayoutSubviews() { 2 super.viewDidLayoutSubviews() //※これ 3 myCar.center = homePoint 4}

投稿2019/04/02 09:06

fuzzball

総合スコア16731

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

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

silva

2019/04/02 09:20

ご回答ありがとうございます。確認したところ、まさにおっしゃる通り、ボタンアクションがなぜか`goHome(_:)`にも繋がっていました。これで10ピクセル進んだ分がリセットされていたようです。稚拙なミスでお恥ずかしい限りです。大変助かりました! また、`viewDidLayoutSubviews()`についてもアドバイスありがとうございます。書き直して色々試して見ようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問