Как отобразить UIPopoverView в качестве аннотации к представлению карты? (IPAD) - PullRequest
35 голосов
/ 07 апреля 2011

В приложении карт в IPad, когда вы нажимаете на пин-код, вы получаете нормальную аннотацию с «i» вместо индикатора раскрытия.Дальнейшее нажатие на «i» открывает контроллер вида поповера, подобный этому.

map popover example

Есть ли способ легко добиться этого?

Ответы [ 4 ]

58 голосов
/ 07 апреля 2011

Сначала добавьте аннотацию на карту и в методе viewForAnnotation установите rightCalloutAccessoryView для кнопки типа, скажем, UIButtonTypeDetailDisclosure (я не думаю, что синяя информационная кнопка доступна по умолчанию).

Нажатие кнопки вызовет метод делегата calloutAccessoryControlTapped. В этом методе отмените выбор аннотации и покажите свой поповер. Например:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    [mapView deselectAnnotation:view.annotation animated:YES];

    YourContentViewController *ycvc = [[YourContentViewController alloc] init...
    UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:ycvc];
    [ycvc release];

    //hold ref to popover in an ivar
    self.annotationPopoverController = poc;

    //size as needed
    poc.popoverContentSize = CGSizeMake(320, 400);

    //show the popover next to the annotation view (pin)
    [poc presentPopoverFromRect:view.bounds inView:view 
        permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    [poc release];
}

YourContentViewController является подклассом UIViewController, который вы можете кодировать как любой другой контроллер представления. Приложение «Карты» выглядит так, словно в нем есть UITableView.

2 голосов
/ 24 мая 2013

Вы можете использовать такую ​​библиотеку, как Гордон Хьюз Animated Callout . К сожалению, это все еще не работает идеально на iOS 6 (выноски отображаются странно).

Вот iOS 5:

enter image description here

2 голосов
/ 18 декабря 2012

Похоже, что для лучшей позиции для поповера вы должны представить ее из этого прямоугольника:

CGPoint lc_point = [mapView convertCoordinate:view.annotation.coordinate toPointToView:mapView];
CGRect lc_frame = CGRectMake(lc_point.x,lc_point.y-view.frame.size.height,0,0);
0 голосов
/ 14 августа 2015

Мое требование было похоже на эту проблему, но также требовалось, чтобы пользователи могли взаимодействовать с картой (панорамирование и масштабирование) во время отображения выноски.Для этого я создал этот проект github: https://github.com/crarau/mapkit-custom-callout

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