Лично я считаю более полезным, когда кто-то может опубликовать фрагмент кода или общую прозу о том, как можно это сделать. Вот что я придумал - грубо взломанный, чтобы просто лучше ответить на этот вопрос:
В заголовочном файле у меня есть:
#define SCROLL_UPDATE_DISTANCE 80.00
и, на мой взгляд (это и делегат для CLLocationManagerDelegate, MKMapViewDelegate):
// this method is called when the map region changes as a delegate of MKMapViewDelegate
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
NSLog(@"regionDidChangeAnimated");
MKCoordinateRegion mapRegion;
// set the center of the map region to the now updated map view center
mapRegion.center = mapView.centerCoordinate;
mapRegion.span.latitudeDelta = 0.3; // you likely don't need these... just kinda hacked this out
mapRegion.span.longitudeDelta = 0.3;
// get the lat & lng of the map region
double lat = mapRegion.center.latitude;
double lng = mapRegion.center.longitude;
// note: I have a variable I have saved called lastLocationCoordinate. It is of type
// CLLocationCoordinate2D and I initially set it in the didUpdateUserLocation
// delegate method. I also update it again when this function is called
// so I always have the last mapRegion center point to compare the present one with
CLLocation *before = [[CLLocation alloc] initWithLatitude:lastLocationCoordinate.latitude longitude:lastLocationCoordinate.longitude];
CLLocation *now = [[CLLocation alloc] initWithLatitude:lat longitude:lng];
CLLocationDistance distance = ([before distanceFromLocation:now]) * 0.000621371192;
[before release];
[now release];
NSLog(@"Scrolled distance: %@", [NSString stringWithFormat:@"%.02f", distance]);
if( distance > SCROLL_UPDATE_DISTANCE )
{
// do something awesome
}
// resave the last location center for the next map move event
lastLocationCoordinate.latitude = mapRegion.center.latitude;
lastLocationCoordinate.longitude = mapRegion.center.longitude;
}
Надеюсь, что отправит вас в правильном направлении.
distanceFromLocation - iOS 3.2 и более поздние версии.
initWithLatitude - iOS 2.0 и позже.
MKCoordinateRegion - это iOS 3.0 и более поздние версии.
MKMapView centerCoordinate - это iOS 3.0 и более поздние версии.
Также - пожалуйста, не стесняйтесь прыгнуть и установить меня прямо там, где я ошибся Я сам все это выясняю - но пока мне это удается.
Надеюсь, это кому-нибудь поможет.