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

Как отобразить UIPopoverView в виде аннотации к представлению карты? (IPAD)

В приложении с картами в IPad при нажатии на контакт вы получаете стандартную аннотацию с "i" вместо индикатора раскрытия. Дальнейшее нажатие на "i" показывает контроллер popover view, как этот.

map popover example

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

4b9b3361

Ответ 1

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

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

- (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

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

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);

Ответ 3

Вы можете использовать такую ​​библиотеку, как " Анимированная выноска Gordon Hughes. К сожалению, он по-прежнему не работает отлично на iOS 6 (вызывающие отображаются странно).

Здесь iOS 5:

enter image description here

Ответ 4

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