Подтвердить что ты не робот

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; - С изменением, если я слегка прищелкнул карту для увеличения или уменьшения после того, как булавка была обновлена, аннотация призыва вызывается в правильном положении прямо над булавкой.

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


Оригинальная почта

I, наряду с другими пользователями 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 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 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];
    }
}
4b9b3361

Ответ 1

custom callout

Я создал проект, основанный на вашем CalloutMapAnnotationView, демонстрирующем решение на базе IB. Клавиши со стрелками оживляют движение аннотации местоположения и аннотацию выноски. Выноска теперь также автоматически изменяется на основе предоставленного содержимогоView, и представление загружается из отдельного наконечника. Удачи!

https://github.com/jacobjennings/JJMapCallout

Ответ 2

Я знаю, что вам не понравится этот ответ, но он работает. Образец, с которым вы связались, просто рисует пользовательское изображение в оверлее через самый сложный способ (drawRect:). Вы считали, что однажды наложили свой накладной на UIImage и просто установили свойство image на очень простом MKAnnotationView? Даже если вам нужно периодически менять содержимое, например, обновлять количество друзей на панели, вы можете перерисовать изображение при изменении и обновить соответствующий MKAnnotationView.

Ответ 3

Я просматриваю ваш код, и моя рекомендация заключается в создании нового пользовательского MKAnnotationView и инкапсуляции на него обоих представлений (вывод и выноска).

Но для вашего текущего кода рассмотрите одобренный ответ на этот вопрос: MKMapView move Annotations Automatically - анимировать их?

Приветствия.