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

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

ただいまの
回答率

90.53%

  • Swift

    8561questions

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

  • Xcode

    4814questions

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

  • iOS

    4574questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Objective-C

    1252questions

    Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Yahoo! iOSマップSDKのSwift対応

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 497

mokumoku

score 34

Swiftアプリ開発初心者です。
iOS版のYmapKitを使用して地図機能の実装をしようとしておりますが、
Yahoo! iOSマップSDKドキュメントを確認したところ、Objective-Cで記載されており、実装するのが難しく感じております。

地図の表示はできましたが、その地図上の任意の場所にピン(アイコン)を表示させる実装ができません。
objc2swiftも使いましたが、上手くいきません。

実現したいこととしては、
"Yahoo! iOSマップSDKをSwiftで使ってみる"の地図の表示に、複数の任意の場所にアイコンを表示させるといったことをSwift3対応で実装したいと考えております。

ベースは下記の"Yahoo! iOSマップSDKをSwiftで使ってみる"を参考にしています。
Yahoo! iOSマップSDKをSwiftで使ってみる

Yahoo! iOSマップSDKドキュメント
アイコンを表示する

import UIKit


class MyAnnotation: NSObject, YMKAnnotation {
    private(set) var coordinate: CLLocationCoordinate2D
    var annotationTitle: String?
    var annotationSubtitle: String?

    init(locationCoordinate coord: CLLocationCoordinate2D, title annTitle: String?, subtitle annSubtitle: String?) {
        coordinate = coord
        annotationTitle = annTitle
        annotationSubtitle = annSubtitle

    }

    func title() -> String? {
        return annotationTitle

    }

    func subtitle() -> String? {
        return annotationSubtitle

    }

}

class ViewController: UIViewController,YMKMapViewDelegate {
    var map: YMKMapView?

    override func viewDidLoad() {
        super.viewDidLoad()

        // YMKMapViewのインスタンスを作成
        map = YMKMapView(frame: CGRect(x: 0, y: 0, width: 320, height: 320), appid: "アプリID")

        // 地図のタイプを指定 標準の地図を指定
        map!.mapType = UInt(YMKMapTypeStandard)

        // YMKMapViewを追加
        self.view = map!

        // YMKMapViewDelegateを登録
        map!.delegate = self

        // 地図の位置と縮尺を設定
        var center = CLLocationCoordinate2D.init();
        center.latitude = 35.6657214;
        center.longitude = 139.7310058;

        map!.region = YMKCoordinateRegionMake(center, YMKCoordinateSpanMake(0.002, 0.002));

        //ピン1個表示
        let coordinate = CLLocationCoordinate2D(latitude: 35.6657214, longitude: 139.7310058)
        let myAnnotation = MyAnnotation(locationCoordinate: coordinate, title: "ミッドタウン", subtitle: "ミッドタウンです。")
        map?.addAnnotation(myAnnotation)

    }  

・現状の表示
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2017/01/31 16:30

    変換後のSwiftのコードを書かないと意味がないと思いますが。

    キャンセル

  • fuzzball

    2017/01/31 17:24 編集

    (Q1)「複数の任意の場所にアイコンを表示させたい」とのことですが、一箇所だけなら表示は出来たのでしょうか? (Q2)「複数の任意の場所」というのは、どういう形で用意されているのでしょうか?

    キャンセル

  • mokumoku

    2017/01/31 18:04

    (Q1)Objective-Cで記載されたコードを追えていないため、まだ一か所も表示できていません。 (Q2)複数の任意の場所というのは、例えば北海道札幌市にピン(アイコン)を立て、青森県青森市にもピンを立てたりと、コード上でピンを立てる緯度経度を指定して画面上に表示させるといった想定です。

    キャンセル

回答 1

checkベストアンサー

+1

Qiitaの記事よりもシンプルに、ピンを1個だけ表示するサンプルです。できるだけチュートリアルに忠実に書いてみました。残念ながら、Swift3環境が無いのでSwift2です。

//MyAnnotation.swift
class MyAnnotation: NSObject, YMKAnnotation {
    private(set) var coordinate: CLLocationCoordinate2D
    var annotationTitle: String?
    var annotationSubtitle: String?

    init(locationCoordinate coord: CLLocationCoordinate2D, title annTitle: String?, subtitle annSubtitle: String?) {
        coordinate = coord
        annotationTitle = annTitle
        annotationSubtitle = annSubtitle
    }

    func title() -> String? {
        return annotationTitle
    }

    func subtitle() -> String? {
        return annotationSubtitle
    }
}

//ピン1個表示
let coordinate = CLLocationCoordinate2D(latitude: 35.665818701569016, longitude: 139.73087297164147)
let myAnnotation = MyAnnotation(locationCoordinate: coordinate, title: "ミッドタウン", subtitle: "ミッドタウンです。")
map.addAnnotation(myAnnotation)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/01 17:27

    回答ありがとうございます。
    質問文に追記したコードで実行したところ、ピンが表示されませんでした。
    fuzzball様の回答の組み込み方としては問題ないでしょうか。

    キャンセル

  • 2017/02/01 17:28

    地図は表示されているのでしょうか?

    キャンセル

  • 2017/02/01 17:28

    地図自体は表示されております。

    キャンセル

  • 2017/02/01 17:41

    現在の質問に書かれているコードをコピペしましたが、ピンは表示されています。Xcode7(Swift2)+iOS9です。ビルド時にWarningは出ていないでしょうか?

    キャンセル

  • 2017/02/01 17:50

    地図は、東京ミッドタウンが画面の中心になるように表示されているのでしょうか?

    キャンセル

  • 2017/02/01 18:02

    ビルド時にWarning等は出ておりません。
    地図につきましては、東京ミッドタウンが画面の中心で表示されております。
    print("")で確認したところ、func title()とfunc subtitle()内の処理に入っていないようですが、何か関係ありますでしょうか。

    キャンセル

  • 2017/02/01 18:15 編集

    それは問題ないです。title/subtitleを使う時に呼ばれます。(例えばピンをタップした時など)

    今思い付きましたが、もしかして画像がプロジェクトに追加出来ていないのではないでしょうか?
    チュートリアルの一番最初「利用準備」に書かれています。

    キャンセル

  • 2017/02/01 19:38

    お手数おかけしてすみません。
    imageフォルダをドラッグアンドドロップで直接プロジェクトのリソースに追加しております。
    別途、imageフォルダにパスを通さないといけないのでしょうか。
    画像が表示されない場合はtitle,subtitleも表示されなくなるんですかね。

    キャンセル

  • 2017/02/01 21:45

    パスの追加などは必要ありません。D&Dではなく、メニューからAddし直してみるとか、ちょっと試してみて下さい。

    ちなみに、ピンをタップすると吹き出しが出てtitle/subtitleが表示されるのですが、画面の中央辺り(ピンが表示されているであろう辺り)をタップしても何も反応しないでしょうか?

    キャンセル

  • 2017/02/01 22:36

    画面中央をタップするとtitle/subtitleが表示されました。
    imageフォルダをAdd Files toで追加しましたが、表示されませんでした。
    もう少し試してみます。

    キャンセル

  • 2017/02/01 22:42

    画像の追加がうまくいっていないみたいですね。明日にならないと細かくアドバイス出来ませんので、それまで自力でがんばって下さい。

    キャンセル

  • 2017/02/01 23:03

    AddしたImageフォルダ内に存在する画像をすべて一つ上の階層に移動させ、ビルドしたところピンが表示されました!
    大変お手数おかけしました。ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • Swift

    8561questions

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

  • Xcode

    4814questions

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

  • iOS

    4574questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Objective-C

    1252questions

    Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。