Исключить местоположение пользователя в поиске 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];

Кстати, я думаю, что вы хотите сделать это после того, как закончите итерацию по точкам карты, а не после каждого и каждого. Однако это означает, что вы должны дважды проверить, чтобы убедиться, что у вас есть одна или несколько точек карты, прежде чем делать это.

Другие вопросы по тегам