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

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

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

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

Q&A

1回答

634閲覧

swiftマップにピンを表示できない

hayati

総合スコア7

Swift

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

0グッド

0クリップ

投稿2020/04/18 07:28

swiftマップにピンを表示できず困っています。
printなどで値が渡っているかを確かめたのですが、print自体が表示されませんでした。

コード import UIKit import Firebase import MapKit class ViewController: UIViewController { var Address = "addressPoint" @IBOutlet weak var mapview: MKMapView! @IBOutlet weak var search1: UIButton! @IBOutlet weak var holding: UIButton! @IBOutlet weak var compass: UIButton! override func viewDidLoad() { super.viewDidLoad() search1.layer.cornerRadius = 5.0 // 影の方向(width=右方向、height=下方向、CGSize.zero=方向指定なし) search1.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) // 影の色 search1.layer.shadowColor = UIColor.black.cgColor // 影の濃さ search1.layer.shadowOpacity = 0.6 // 影をぼかし search1.layer.shadowRadius = 4 holding.layer.cornerRadius = 20.0 // 影の方向(width=右方向、height=下方向、CGSize.zero=方向指定なし) holding.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) // 影の色 holding.layer.shadowColor = UIColor.black.cgColor // 影の濃さ holding.layer.shadowOpacity = 0.6 // 影をぼかし holding.layer.shadowRadius = 4 // 影の方向(width=右方向、height=下方向、CGSize.zero=方向指定なし) compass.layer.shadowOffset = CGSize(width: 0.0, height: 2.0) // 影の色 compass.layer.shadowColor = UIColor.black.cgColor // 影の濃さ compass.layer.shadowOpacity = 0.6 // 影をぼかし compass.layer.shadowRadius = 4 } //HoldingViewControllarから持ってきたaddressの値を入れ、MAPにピンを立てる。 @IBAction func pin(_ sender: Any){ self.view.endEditing(true) let myGeocoder:CLGeocoder = CLGeocoder() //住所 let searchStr = Address //住所を座標に変換する。 myGeocoder.geocodeAddressString(searchStr, completionHandler: {(placemarks, error) in if(error == nil) { for placemark in placemarks! { let location:CLLocation = placemark.location! //中心座標 let center = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) //表示範囲 let span = MKCoordinateSpan(latitudeDelta: 0.001, longitudeDelta: 0.001) //中心座標と表示範囲をマップに登録する。 let region = MKCoordinateRegion(center: center, span: span) self.mapview.setRegion(region, animated: true) //地図にピンを立てる。 let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) self.mapview.addAnnotation(annotation) } } else { print("検索できませんでした。") } }) //改行を入れない。 print(Error.self) } }//

import UIKit
import Firebase

class HoldingViewController: UIViewController {

@IBOutlet weak var cyphertext: UITextField! @IBOutlet weak var addresstext: UITextField! @IBOutlet weak var daystext: UITextField! @IBOutlet weak var timetext: UITextField! @IBOutlet weak var HowManytext: UITextField! @IBOutlet weak var commenttext: UITextField! @IBOutlet weak var decide: UIButton! let db = Firestore.firestore() var addressValue = String?.self override func viewDidLoad() { super.viewDidLoad() decide.layer.cornerRadius = 20.0 } @IBAction func decideButton(_ sender: Any) { //書き込まれた情報をfirebaseに保存する db.collection("users").document("user").setData([ "CypherName": cyphertext.text as Any, "day": daystext.text as Any, "address": addresstext.text as Any, "time": timetext.text as Any, "HowMany": HowManytext.text as Any, "comment": commenttext.text as Any ]) { err in if let err = err { print("Error writing document: (err)") } else { print("ドキュメントに保存されたよ!") //保存したデータを取り出す。 let docRef = self.db.collection("users").document("user") docRef.getDocument { (document, error) in if let document = document, document.exists { let dataDescription = document.data().map(String.init(describing:)) ?? "nil" print("Document data: (dataDescription)") //画面遷移と値渡し let VC = self.storyboard?.instantiateViewController(withIdentifier: "View") as! ViewController var addressPoint = "address" self.present(VC, animated: true, completion: nil) self.dismiss(animated: true, completion: nil)

// self.performSegue(withIdentifier: "home", sender: nil)

} else { print("ドキュメントが取得できませんでした。") } } } } //取り出した"address"(住所)をViewControllarに渡す

// prepare(for: UIStoryboardSegue, sender: Any?)
//
// let VC = segue.destination as! ViewController
//
// VC.addressValue = "address"
//
}

@IBAction func back(_ sender: Any) { dismiss(animated: true, completion: nil) }

}//

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

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

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

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

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

guest

回答1

0

丁寧にコードを見たわけではありませんが、前回のご質問の流れから考えると

swift

1 var Address = "addressPoint"

ここには実在する住所を入れなければジオコーディング(住所から緯度経度を求めること)はできません。


念のため、質問者さんのコードから、地図を表示させるだけの最小限のコードを取り出して実行してみました。
ボタンを押すとレバレジーズ(teratailの運営会社)にズームします。
住所はAddressという変数に入れています(質問者さんのオリジナルではaddressPointとなっていました)。

StoryBoard でMapViewとボタンに関連づける必要はありますが、住所を正しく設定するだけできちんと目的地にズームして表示できるようになっていたので、それ以外のところに間違いはありません。

もし、動作に疑いがあるのであれば、まずこのような感じで最低限の動作を確認できるコードを書いてみるといいと思います。

swift

1import UIKit 2import MapKit 3 4class ViewController: UIViewController { 5 var Address = "東京都渋谷区渋谷2丁目24−12" 6 7 @IBOutlet weak var mapview: MKMapView! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 } 12 13 @IBAction func pin(_ sender: Any){ 14 15 self.view.endEditing(true) 16 17 let myGeocoder:CLGeocoder = CLGeocoder() 18 19 //住所 20 let searchStr = Address 21 22 //住所を座標に変換する。 23 myGeocoder.geocodeAddressString(searchStr, completionHandler: {(placemarks, error) in 24 25 if(error == nil) { 26 for placemark in placemarks! { 27 let location:CLLocation = placemark.location! 28 29 //中心座標 30 let center = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) 31 32 //表示範囲 33 let span = MKCoordinateSpan(latitudeDelta: 0.001, longitudeDelta: 0.001) 34 35 //中心座標と表示範囲をマップに登録する。 36 let region = MKCoordinateRegion(center: center, span: span) 37 self.mapview.setRegion(region, animated: true) 38 39 //地図にピンを立てる。 40 let annotation = MKPointAnnotation() 41 annotation.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude) 42 self.mapview.addAnnotation(annotation) 43 44 } 45 } else { 46 print("検索できませんでした。") 47 } 48 }) 49 } 50}

投稿2020/04/18 09:35

編集2020/04/18 22:48
TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問