MKAnnotationView - Заблокируйте пользовательское представление аннотаций, чтобы закрепить обновления местоположения

Обновление №5 Думаю, пришло время награды. Более 100 просмотров и никто не пострадал, даже с опубликованным мной образцом кода. Как насчет очков репутации?

Обновление №4 Это довольно сложный вопрос, поэтому я создал новый проект на основе вкладок, который просто включает части моего приложения, с которыми у меня возникли проблемы. Вы можете скачать его с: http://www.servinitup.net/CustomCalloutAnnotation.zip Не стесняйтесь открывать его (необходимо добавить свой собственный идентификатор пакета, чтобы запустить его на вашем телефоне) и поиграйте с ним, и посмотрите, сможете ли вы заставить эту проклятую выноску-аннотацию перемещаться с помощью булавки!

Обновление № 3 Пытался сделать setAnnotation общедоступным методом CalloutMapAnnotationView учебника и вызвать его напрямую. Не повезло. Несмотря на небольшие странности, которые произошли, единственное, что переместилось, - это небольшая треугольная часть выноски. Мне не удалось переместить всю выноску.

Обновление №2 Мне все еще не повезло, но теперь я искал способы программно создать «щипок для увеличения», а затем немедленно отменить его, чтобы пользователь никогда не видит изменение. Надеемся, что выполнение этого программного обеспечения будет иметь тот же эффект, что и выполнение вручную, и аннотация выноски вернется к родительскому объекту. Есть идеи?

Обновление №1 Поиграв здесь, я получил: - заменено self.calloutAnnotation.coordinate = coords; на self.calloutAnnotation.latitude = coords.latitude; self.calloutAnnotation.longitude = coords.longitude; - С этим изменением, если я слегка ущипну карту, чтобы увеличить или уменьшить масштаб после обновления булавки, аннотация выноски анимируется в правильное положение, прямо над булавкой.

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


Исходное сообщение

Я, вместе с другими пользователями SO, использую это замечательное решение для создания специальная аннотация выноски: http://blog.asolutions.com/2010/09/building-custom-map-annotation-callouts-part-1/

При использовании стандартной выноски (annotationview.canShowCallout = true) и булавки перемещается по экрану при обновлении местоположения, стандартная выноска отслеживается вместе с булавкой, как если бы они были заблокированы вместе.

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

Вот код, который у меня есть до сих пор, успешно перемещает представление аннотации, но не пользовательское представление аннотации выноски:

/* core location broadcasts a notification, and my view controller listens to that notification and calls locationManagerDidFindLocation */
- (void)locationManagerDidFindLocation:(NSNotification *)notif {
    CLLocation *location = [notif.userInfo objectForKey:@"location"];
    CLLocationCoordinate2D coords = [location coordinate];
    MKCoordinateSpan span = MKCoordinateSpanMake((5/69), (5/69));
    MKCoordinateRegion region = {coords, span};

    // if we don't have a current location yet, create one, place it on the map, and adjust the map's region
    // otherwise, update the annotation placement and map position in a smooth animation
    if (self.currentLocationAnnotation == nil) {
        self.currentLocationAnnotation = [[CurrentLocationAnnotation alloc] initWithCoordinate:coords andTitle:@"My Title" andSubtitle:@"My subtitle"];

        [self.mapView addAnnotation:self.currentLocationAnnotation];
        [self.mapView setRegion:region animated:true];
        [self.mapView regionThatFits:region];
    } else {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.45];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

            // this moves my annotation view perfectly
            self.currentLocationAnnotation.coordinate = coords;

            // ******* this is where my problem is
            // ******* this custom callout annotation view stays
            // ******* in it's original place, even though it's
            // ******* parent annotation view is moving around the screen
            self.calloutAnnotation.coordinate = coords;

            [self.mapView setRegion:region animated:true];
            [self.mapView regionThatFits:region];
        [UIView commitAnimations];
    }
}

29
задан djibouti33 23 June 2011 в 03:03
поделиться