Исключить местоположение пользователя в поиске MapKit
Я использую MapKit с Xcode 6, и все, что я кодировал до этого момента, работало нормально. У меня есть текстовое поле, которое позволяет пользователям вводить любую строку для поиска карты Apple.
Однако одна из проблем, с которыми я сталкиваюсь, заключается в том, что когда результаты поиска возвращаются в виде булавок на карте, я бы хотел, чтобы масштабирование соответствовало ТОЛЬКО результатам, исключая значок userLocation.
Вот код, который у меня есть. (Я видел похожий код с обновлениями добавления строк, чтобы включить userLocation, однако код, который они говорят, не должен содержать userLocation, очень похож на то, что я уже...)
if (response.mapItems.count == 0)
NSLog(@"No results");
else
for (MKMapItem *item in response.mapItems)
{
MKMapRect mr = [self.mapView visibleMapRect];
MKMapPoint pt = MKMapPointForCoordinate([annotation coordinate]);
mr.origin.x = pt.x - mr.size.width *0.5; // 0.5
mr.origin.y = pt.y - mr.size.width * 0.75; //0.75
[self.mapView setVisibleMapRect:mr animated:YES];
MKMapRect zoomRect = MKMapRectNull;
for (id <MKAnnotation> annotation in _mapView.annotations)
{
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 10.4, 10.4);
zoomRect = MKMapRectUnion(zoomRect, pointRect);
}
[_mapView setVisibleMapRect:zoomRect animated:YES];
}
}];
}
1 ответ
Просто убедитесь, что аннотация не MKUserLocation
объект:
MKMapRect zoomRect = MKMapRectNull;
for (id <MKAnnotation> annotation in _mapView.annotations) {
if (![annotation isKindOfClass:[MKUserLocation class]]) {
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 10.4, 10.4);
zoomRect = MKMapRectUnion(zoomRect, pointRect);
}
}
[_mapView setVisibleMapRect:zoomRect animated:YES];
Кстати, я думаю, что вы хотите сделать это после того, как закончите итерацию по точкам карты, а не после каждого и каждого. Однако это означает, что вы должны дважды проверить, чтобы убедиться, что у вас есть одна или несколько точек карты, прежде чем делать это.