В приложении с картами в IPad при нажатии на контакт вы получаете стандартную аннотацию с "i" вместо индикатора раскрытия. Дальнейшее нажатие на "i" показывает контроллер popover view, как этот.
Есть ли способ легко достичь этого?
В приложении с картами в IPad при нажатии на контакт вы получаете стандартную аннотацию с "i" вместо индикатора раскрытия. Дальнейшее нажатие на "i" показывает контроллер popover view, как этот.
Есть ли способ легко достичь этого?
Сначала добавьте аннотацию к карте и в метод 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.
Похоже, что для лучшей позиции для 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);
Вы можете использовать такую библиотеку, как " Анимированная выноска Gordon Hughes. К сожалению, он по-прежнему не работает отлично на iOS 6 (вызывающие отображаются странно).
Здесь iOS 5:
Мое требование было похоже на эту проблему, но также необходимо было разрешить пользователям взаимодействовать с картой (панорамирование и масштабирование), пока отображается выноска. Для этого я создал этот проект github: https://github.com/crarau/mapkit-custom-callout