あ,ども,こんにちは.
テーマがあっちこっち行っていますが,今日はXcodeに関するお話です.
かなり初心者なので悪しからず…
はじめに
mapkitを使って地図を作っているのですが,いろんなところにpinを立てるまではうまく行ったのですが...
pinを立てた後に現在地を表示しようとしたら先ほど立てたpinのマークになってしまいました.
問題のコード
詳細には載せませんが,大雑把に書くとこんな感じでごわす.
import UIKit
import MapKit
class ViewController: UIViewController,MKMapViewDelegate,CLLocationManagerDelegate{
@IBOutlet weak var map: MKMapView!
//現在地の表示用
var locationManager: CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
}
//pinを立てるときに呼び出されるデフォルトの関数
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
//ここにpinの詳細を記述
}
}
}
Code language: Swift (swift)
このように書いてしまうと現在地のマーカーがmapViewに従ってしまうんですね.
解決
if文を一個入れるだけで解決できました.
//pinを立てるときに呼び出されるデフォルトの関数
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation is MKUserLocation) {
return nil
}
//ここにpinの詳細を記述
}
Code language: Swift (swift)
annotationがMKUserLocationである時だけ,値を返さないという普通の処理ですね.
発想としては思いつきましたが,コードとしてなんと書いてあげればいいか分からず時間が飛んでしまいました.
終わりに
作りたいアプリがあり,Xcode最近触り始めたのですが,同じ名前の関数をたくさん使えることに衝撃を受けています.
関数の後の()のところに書いてあることが実は意味を表していることに気づきました.およよ
コメント