我设置了
控制台给了我这个提示,但我还没有能够修复它:
mapView.delegate
等内容。一切都很好,但当我离开应用几分钟后恢复它时,它会退出。控制台给了我这个提示,但我还没有能够修复它:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:-180.00000000, -180.00000000 span:+0.09000000, +0.09000000>'
在用户位置更新后,在didUpdateUserLocation
方法中发送setRegion
。
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
[mapView removeAnnotations: [mapView annotations]];
for (TOJSearchItem *searchItem in _searchItems) {
TOJPlaceRequest *request = [TOJPlaceRequest new];
[request execute:SERVER_URL coordinate:userLocation.coordinate searchItem:searchItem delegate:self];
}
MKCoordinateRegion region = {{userLocation.coordinate.latitude , userLocation.coordinate.longitude}, {0.09f , 0.09f}};
[mapView setRegion:region animated: YES];
}
发起请求
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if (_lastLocation != nil) {
CLLocationDistance meters = [newLocation distanceFromLocation:_lastLocation];
if (meters < DISTANCE_MINI) {
// CALCUL tout les points par rapport a current location
// NSLog(@"%f, %f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
} else {
for (TOJSearchItem *searchItem in _searchItems) {
TOJPlaceRequest *request = [TOJPlaceRequest new];
[request execute:SERVER_URL coordinate:newLocation.coordinate searchItem:searchItem delegate:self];
}
MKCoordinateRegion region = {{newLocation.coordinate.latitude , newLocation.coordinate.longitude}, {0.09f , 0.09f}};
[_mapView setRegion: region animated: YES];
NSLog(@"reconnection");
}
}
_lastLocation = [[CLLocation alloc] initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
}
点击注释后重置区域
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([view class] == TOJClusterPushPinView.class) {
TOJClusterPushPinView *clusterPushPinView = (TOJClusterPushPinView *)view;
CLLocationCoordinate2D topLeftCoordinate;
topLeftCoordinate.latitude = -90;
topLeftCoordinate.longitude = 180;
CLLocationCoordinate2D bottomRightCoordinate;
bottomRightCoordinate.latitude = 90;
bottomRightCoordinate.longitude = -180;
for (TOJPushPin *pushPin in clusterPushPinView.clusterPushPin.pushPins) {
topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, pushPin.coordinate.longitude);
topLeftCoordinate.latitude = fmax(topLeftCoordinate.latitude, pushPin.coordinate.latitude);
bottomRightCoordinate.longitude = fmax(bottomRightCoordinate.longitude, pushPin.coordinate.longitude);
bottomRightCoordinate.latitude = fmin(bottomRightCoordinate.latitude, pushPin.coordinate.latitude);
}
MKCoordinateRegion region;
region.center.latitude = topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 0.5;
region.center.longitude = topLeftCoordinate.longitude + (bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 0.5;
region.span.latitudeDelta = fabs(topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 2.0; // Add a little extra space on the sides
region.span.longitudeDelta = fabs(bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 2.0; // Add a little extra space on the sides
region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}
}
if (!CLLocationCoordinate2DIsValid(center))
。 - user467105