iOS MapKit: выбранные координаты MKAnnotation - PullRequest
1 голос
/ 21 декабря 2010

Используя код из следующего урока, http://www.zenbrains.com/blog/en/2010/05/detectar-cuando-se-selecciona-una-anotacion-mkannotation-en-mapa-mkmapview/, Я смог добавить наблюдателя в каждую MKAnnotation и получить уведомление о выбранных / отмененных состояниях.

Я пытаюсь добавить UIView поверх аннотации выбора для отображения соответствующей информации о местоположении.Эта информация не может быть передана в двух разрешенных строках (заголовок / подзаголовок) для выноски.

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context {

    Annotation *a = (Annotation *)object;
    // Alternatively attempted using:
    //Annotation *a = (Annotation *)[mapView.selectedAnnotations objectAtIndex:0];


    NSString *action = (NSString *)context;
    if ([action isEqualToString:ANNOTATION_SELECTED_DESELECTED]) {
        BOOL annotationSelected = [[change valueForKey:@"new"] boolValue];
        if (annotationSelected) {
            // Actions when annotation selected
            CGPoint origin = a.frame.origin;
            NSLog(@"origin (%f, %f) ", origin.x, origin.y);

            // Test
            UIView *v = [[UIView alloc] init];
            [v setBackgroundColor:[UIColor orangeColor]];
            [v setFrame:CGRectMake(origin.x, origin.y , 300, 300)];
            [self.view addSubview:v];
            [v release];
        }else {
            // Accions when annotation deselected
        }
    }
}

Результаты с использованием Annotation *a = (Annotation *)object

origin (154373.000000, 197135.000000) 
origin (154394.000000, 197152.000000) 
origin (154445.000000, 197011.000000) 

Результаты с использованием Annotation *a = (Annotation *)[mapView.selectedAnnotations objectAtIndex:0];

origin (0.000000, 0.000000) 
origin (0.000000, 0.000000) 
origin (0.000000, 0.000000) 

Числа большие.Они не относятся к виду (1024 x 768).Я считаю, что они относятся ко всей карте.Как я смогу определить точные координаты относительно всего вида, чтобы правильно расположить мой вид?

Примечание:

Только что обнаружил эти два метода, которыеможет выполнить то же самое, что и код выше, в гораздо более простой реализации.

Выбор видов аннотаций

– mapView:didSelectAnnotationView:
– mapView:didDeselectAnnotationView:

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapViewDelegate_Protocol/MKMapViewDelegate/MKMapViewDelegate.html

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

Вместо использования .frame.origin попробуйте получить свойство MKAnnotation coordinate. Используя coordinate, вы можете использовать MKMapView convertCoordinate:toPointToView:, чтобы получить источник аннотации.

Надеюсь, это поможет!

0 голосов
/ 22 декабря 2010

Пример приложения Apple WeatherMap содержит пользовательские аннотации и показывает, как их размещать.Код прост и рекомендуется.

...