在iPad中的地圖應用程序中,當您點擊一個別針時,您將得到一個帶有「i」的正常註釋,而不是顯示指示符。進一步點擊「我」可以看到像這樣的popover視圖控制器。如何顯示UIPopoverView作爲地圖視圖的註釋? (iPad)
有沒有一種方法可以輕鬆地實現這一目標?
在iPad中的地圖應用程序中,當您點擊一個別針時,您將得到一個帶有「i」的正常註釋,而不是顯示指示符。進一步點擊「我」可以看到像這樣的popover視圖控制器。如何顯示UIPopoverView作爲地圖視圖的註釋? (iPad)
有沒有一種方法可以輕鬆地實現這一目標?
首先在地圖和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。
看來,有對酥料餅的一個更好的位置,你必須從該矩形目前它:
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);
您可以使用像戈登休斯Animated Callout庫。不幸的是,它仍然不能在iOS 6上完美運行(標註出現奇怪)。
這裏的iOS 5:
我的要求是類似這樣的問題,但還需要允許在顯示標註用戶與地圖(平移和縮放)進行交互。 爲此我創建了這個github項目:https://github.com/crarau/mapkit-custom-callout
很好的答案,真的很詳細。 – Robert 2011-04-07 16:37:06
在地圖應用程序中,在這種情況下有一個有趣的動畫,而不是較小的氣泡被解散和新的彈出窗口,小氣泡實際上擴展到適合彈出視圖。任何想法如何做到這一點? – 2011-08-17 17:39:23
@Chris Wagner:不知道Maps應用是如何執行它,但是嘗試最初顯示具有較小高度的彈出窗口,然後使用timer或performSelector:withObject:afterDelay,手動激活popoverContentSize並使用更新的rect重新呈現彈出窗口(原點向上移動,身高增加)。另一個選擇可能是首先顯示/動畫從中間展開的常規自定義UIView,然後顯示最終大小的彈窗(並移除下面的自定義UIView)。在地圖應用程序中,標註也左右移動,這可以通過更新view.calloutOffset來完成。 – Anna 2011-08-17 19:09:27