私はこれまでMKMapViewまたはCoreLocationを使用したことがないので、助けが必要です。現在の位置を取得し(おそらくこの位置をmapViewに表示します)、定期的に位置を更新し、毎回新しい位置と古い位置を比較して、移動したかどうかを確認したいと思います。
このようなことは可能ですか?これどうやってするの?私はすでにMKMapViewを実装しています。しかし、どうすれば現在の位置を取得し、移動しているかどうかを比較することができるかわかりません...
助けてくれてありがとう!
私はこれまでMKMapViewまたはCoreLocationを使用したことがないので、助けが必要です。現在の位置を取得し(おそらくこの位置をmapViewに表示します)、定期的に位置を更新し、毎回新しい位置と古い位置を比較して、移動したかどうかを確認したいと思います。
このようなことは可能ですか?これどうやってするの?私はすでにMKMapViewを実装しています。しかし、どうすれば現在の位置を取得し、移動しているかどうかを比較することができるかわかりません...
助けてくれてありがとう!
これは非常に簡単です。に設定showsUserLocation
するYES
と完了です。ドキュメント
少し良くするためにMKMapView
、位置が変わるたびに中央に配置することができます。ここでそれを行う方法を参照してください。
移動したかどうかを知りたい場合は、最新の位置をプロパティに保存してから、デリゲートメソッドmapView:didUpdateUserLocation:
で新しい場所が最後の場所と異なるかどうかを確認する必要があります。
@property (assign, nonatomic) CLLocationCoordinate2D locationCoordinate;
...
@synthesize locationCoordinate = _locationCoordinate;
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate = self;
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if (userLocation.coordinate.latitude != self.locationCoordinate.latitude ||
userLocation.coordinate.longitude != self.locationCoordinate.longitude) {
// We moved
}
self.locationCoordinate = userLocation.coordinate;
}
userLocation
が変更されたときにのみデリゲートメソッドが呼び出されるかどうかは、実際にはわかりません。その場合、場所をプロパティとして保存してチェックを行う必要はありません。デリゲートメソッドを実装して、そこで作業を行うだけです。