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

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

ただいまの
回答率

89.55%

swift 現在位置の表示について

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 678

ives

score 17

swift 下の追記です

func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
{
UIApplication.shared.beginIgnoringInteractionEvents()

let activityIndicator = UIActivityIndicatorView()
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
activityIndicator.center = self.view.center
activityIndicator.hidesWhenStopped = true
activityIndicator.startAnimating()

self.view.addSubview(activityIndicator)

//Hide the search bar
searchBar.resignFirstResponder()
dismiss(animated: true, completion: nil)

//Create the request
let searchRequest = MKLocalSearchRequest()
searchRequest.naturalLanguageQuery = searchBar.text

let activeSearch = MKLocalSearch(request: searchRequest)

activeSearch.start{ (response, error) in
if response == nil
{
print("error")
}
else
{
//remove annotation
let annotations = self.mapView.annotations
self.mapView.removeAnnotation(annotations as! MKAnnotation)

//getting date
let latitude = response?.boundingRegion.center.latitude
let longitude = response?.boundingRegion.center.longitude

//create annotation
let annotation = MKPointAnnotation()
annotation.title = searchBar.text
annotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!)
self.mapView.addAnnotation(annotation)

//zooming in on annotation
let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude!, longitude!)
let span = MKCoordinateSpanMake(0.1, 0.1)
let region = MKCoordinateRegionMake(coordinate, span)
self.mapView.setRegion(region, animated: true)
}
}
}
func locationManager(_ manager: CLLocationManager, didUpdatelocations locations: [CLLocation])
{
print("成功")

let location = locations[0]

let span:MKCoordinateSpan = MKCoordinateSpanMake(location.coordinate.latitude, location.coordinate.longitude)

let myLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)

let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
mapView.setRegion(region, animated: true)

self.mapView.showsUserLocation = true

}

override func viewDidLoad()
{
super.viewDidLoad()

mapView=MKMapView()

manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingHeading()

}

 前提・実現したいこと

ユーザーの現在位置をマップ上に表示したい 

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

swiftで現在位置を表示したいのですがいざ以下のコードでシミュレータで実装してみても表示されません。コード上にエラー等はないので間違いがわかりません。
ちなみにBuild phrasesにCoreLocation.framework追加済み
info.plistにPrivacy – Location Always and When In Use Usage Description
Privacy – Location Always Usage Description
Privacy - Location Usage Descriptionの三つも追加済みです
Mac本体の位置情報設定もオンにしてあります
どうかお助け下さい。よろしくお願いします。

 該当のソースコード

import UIKit
import MapKit
import CoreLocation

class FirstViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UISearchBarDelegate {

    let manager = CLLocationManager()
    @IBOutlet weak var mapView: MKMapView!
    @IBAction func searchBar(_ sender: Any)
    {
        let searchController = UISearchController(searchResultsController: nil)
        searchController.searchBar.delegate = self
        present(searchController, animated: true, completion: nil)
    }

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
    {
        UIApplication.shared.beginIgnoringInteractionEvents()

        let activityIndicator = UIActivityIndicatorView()
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
        activityIndicator.center = self.view.center
        activityIndicator.hidesWhenStopped = true
        activityIndicator.startAnimating()

        self.view.addSubview(activityIndicator)

        //Hide the search bar
        searchBar.resignFirstResponder()
        dismiss(animated: true, completion: nil)

        //Create the request
        let searchRequest = MKLocalSearchRequest()
        searchRequest.naturalLanguageQuery = searchBar.text

        let activeSearch = MKLocalSearch(request: searchRequest)

        activeSearch.start{ (response, error) in
            if response == nil
            {
                print("error")
            }
            else
            {
                //remove annotation
                let annotations = self.mapView.annotations
                self.mapView.removeAnnotation(annotations as! MKAnnotation)

                //getting date
                let latitude = response?.boundingRegion.center.latitude
                let longitude = response?.boundingRegion.center.longitude

                //create annotation
                let annotation = MKPointAnnotation()
                annotation.title = searchBar.text
                annotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!)
                self.mapView.addAnnotation(annotation)

                //zooming in on annotation
                let coordinate:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude!, longitude!)
                let span = MKCoordinateSpanMake(0.1, 0.1)
                let region = MKCoordinateRegionMake(coordinate, span)
                self.mapView.setRegion(region, animated: true)
            }
        }

        func locationManager(_ manager: CLLocationManager, didUpdatelocations locations: [CLLocation])
        {
            let location = locations[0]

            let span:MKCoordinateSpan = MKCoordinateSpanMake(location.coordinate.latitude, location.coordinate.longitude)

            let myLocation: CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)

            let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
            mapView.setRegion(region, animated: true)

            self.mapView.showsUserLocation = true

        }
    }

    override func viewDidLoad()
    {
        super.viewDidLoad()

        mapView=MKMapView()

        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBest
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingHeading()

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • fuzzball

    2018/08/15 13:35 編集

    「恐らく」ではなくきちんと確認して下さい。(print文を入れるだけで確認できます)実機でもシミュレータでも位置取得は出来ます。許可については端末の「設定」の中で確認して下さい。

    キャンセル

  • ives

    2018/08/15 16:23

    すみません。printに入れた"成功"がdebugに表示されませんでした。実機は使っていませんシミュレータだけでの実装ですが許可してあります

    キャンセル

  • fuzzball

    2018/08/16 09:07

    追記したコード、インデントが潰れています。(見る人のことを考えて下さい)

    キャンセル

回答 2

0

シミュレータで位置設定はしていますか?

参考) https://qiita.com/mattak/items/420039c674fe4392a647

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/08/14 21:54

    設定していなかったのでしてから立ち上げてみましたが変わらず表示されないままです

    キャンセル

0

 locationManager(_:didUpdateLocations:)

func locationManager(_ manager: CLLocationManager, didUpdatelocations locations: [CLLocation])
{
    (略)
}

searchBarSearchButtonClicked(_:)の外に出して下さい。

 L

didUpdatelocationsではなくdidUpdateLocationsです。

 Info.plist

manager.requestWhenInUseAuthorization()

ならば、Info.plistに書くのはNSLocationWhenInUseUsageDescriptionです。

Privacy - Location When In Use Usage Description` 

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/08/15 18:07 編集

    外に出しましたが表示されません。泣
    念の為コードを書いておきます

    キャンセル

  • 2018/08/15 19:37

    ここに書かずに質問内のコードを更新して下さい。(上のコメントのコードは削除して下さい)

    キャンセル

  • 2018/08/16 09:42

    回答に2つ追記しました。

    キャンセル

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

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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