Обновление №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]; } }