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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

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

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

1286閲覧

Swift: Firebase Realtime Database で取り込んだ値分だけ画像を移動させたい

kimkim

総合スコア142

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Xcode

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

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

1グッド

0クリップ

投稿2017/12/18 06:39

タイトル通り、他の端末(端末A)でドラッグしたときの位置をDatabaseに保存して、それをリアルタイムでもう一方の端末(端末B)で取り込んで端末Aでドラッグした分だけ端末B上の画像を移動させたいです。
今のところ端末Aでドラッグした位置をDatabaseに保存しその値を端末Bでリアルタイムに取り込むところまではできました。

端末Aでの値の保存は以下のように記述しています

swift

1 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 2//画像の移動などのコードは省略しています 3 //x方向、y方向の移動分がdx,dyに入ってます 4// タッチイベントを取得 5 let touchEvent = touches.first! 6 7 // ドラッグ前の座標, Swift 1.2 から 8 let preDx = touchEvent.previousLocation(in: self.view).x 9 let preDy = touchEvent.previousLocation(in: self.view).y 10 11 // ドラッグ後の座標 12 let newDx = touchEvent.location(in: self.view).x 13 let newDy = touchEvent.location(in: self.view).y 14 15 // ドラッグしたx座標の移動距離 16 let dx = newDx - preDx 17 18 // ドラッグしたy座標の移動距離 19 let dy = newDy - preDy 20 21    //移動分をFirebaseに保存 22 self.ref.child("1").child("1").updateChildValues(["tapLocation_x": Int(dx)]) 23 self.ref.child("1").child("1")).updateChildValues(["tapLocation_y": Int(dy)]) 24}

Firebase上では以下のように保存されています。イメージ説明

このdx,dyをfired,firedyという変数に入れてその値分だけ端末Bでの画像を移動させようと以下のようにコードを書いたのですが下記のエラー箇所でエラーが出てしまいます。

swift

1override func viewDidAppear(_ animated: Bool) { 2 super.viewDidAppear(animated) 3 var AimageView : UIImageView! 4 var AFrame: CGRect = AimageView.frame 5 //firedxは上記の"tapLocation"のvalueをfirebaseから受け取った変数です 6 AFrame.origin.x += NumberFormatter().number(from: firedx) as! CGFloat//←エラー箇所 7 AFrame.origin.y += NumberFormatter().number(from: firedy) as! CGFloat 8 9 AimageView.frame = AFrame 10 11 self.view.addSubview(AimageView) 12}

とすると

Unexpectedly found nil while unwrapping an Optional value

というエラーが出てしまいます。

どのようにすれば出来るでしょうか。
情報など足りないところあるかもしれませんがご教授いただけませんでしょうか?

hude02👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

NumberFormatter().number(from: String)を使って、firedxを処理されようとしていると思いますが、firedxをString型として扱っているのではないでしょうか?

snapshotから取り出す際にInt型で取り出せば、NumberFormatterを使わなくても良くなると思います。

投稿2018/01/06 06:57

kanemotos

総合スコア163

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問