iPhone Карта Регион Странности - PullRequest
0 голосов
/ 08 сентября 2010

alt text

Прикрепленное изображение - это то, что иногда случается, когда я пытаюсь выбрать размер MKMapView, чтобы соответствовать одной или нескольким меткам. Это прерывисто, но дисплей всегда находится в одинаковом положении.

Вот код:

 // loc1 is always non-null, and is equal to one of the annotation locations

CLLocationCoordinate2D topLeftCoord = loc1.coordinate;
CLLocationCoordinate2D bottomRightCoord = loc1.coordinate;
for(UserPlacemark* annotation in self.mapView.annotations)
{
    topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude);
    topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude);     
    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
}

MKCoordinateRegion region;
double k = 0.01;
region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.25;
region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;
region.span.latitudeDelta = k + fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.25; // Add a little extra space on the sides
region.span.longitudeDelta = k + fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.5; // Add a little extra space on the sides

 // only zoom if region doesn't fit, or too small
 CGRect newRect = [mapView convertRegion:region toRectToView:mapView];
 double MIN_SIZE_PIXELS = 50.0;
 double rectSizePixels = newRect.size.width+newRect.size.height;
 if (!CGRectContainsRect(mapView.bounds, newRect) || rectSizePixels < MIN_SIZE_PIXELS)
 {
      region = [mapView regionThatFits:region];
      [mapView setRegion:region animated:TRUE];
 }

1 Ответ

0 голосов
/ 09 сентября 2010

Проблема в вышеприведенном коде заключается в том, что экземпляр MKUserAnnotation помещается в список меток каркасом карты.Это не всегда соответствует фактической позиции пользователя, по крайней мере в симуляторе.

Лучше избегать итерации по списку аннотаций и вместо этого вычислять минимальные / максимальные границы вашей метки, используя ваши объекты напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...