我想創建一個自定義的MKAnnotationView標註,如圖所示。我已經測試了幾個解決方案,但他們只允許定製左/右圖像和標題/副標題。任何人都可以給我一些源代碼或教程鏈接嗎?自定義MKAnnotationView標註
目前我無能爲力。請幫忙。
我想創建一個自定義的MKAnnotationView標註,如圖所示。我已經測試了幾個解決方案,但他們只允許定製左/右圖像和標題/副標題。任何人都可以給我一些源代碼或教程鏈接嗎?自定義MKAnnotationView標註
目前我無能爲力。請幫忙。
我知道你想用一個自定義的標註引腳。
我們無法創建自定義標註,但我們可以使用完全自定義的視圖創建標註。所以訣竅是在第一個選擇時添加第二個註釋,並使第二個註釋視圖看起來像一個標註泡泡。
這是用戶發佈的djibouti33和答案jacob-jennings解決方案:MKAnnotationView - Lock custom annotation view to pin on location updates,而這又是基於從異步性解決方案一個blog post。出於解釋的目的,這裏是一些分叉項目的UML:
這是一個很大的破解,但也是我見過的實現自定義註釋的最乾淨的方式。
以一個NSObject「Content」類開頭,該類有一個座標,要使用的調用視圖的類(在UML中是AnnotationView,但您可以創建更多並在此處設置它們)以及隨機值的字典標題,照片網址等。使用此類來初始化MKAnnotation「Annotation」對象。
#import <MapKit/MapKit.h>
@interface Content : NSObject
@property (nonatomic,assign) CLLocationCoordinate2D coordinate;
// ...
@interface Annotation : NSObject <MKAnnotation, AnnotationProtocol>
-(id) initWithContent:(Content*)content;
// ...
詮釋實現AnnotationProtocol宣佈它要處理自己的MKAnnotationView的創建。也就是說,你的MKMapViewDelegate應該有這樣的代碼:
- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation
{
// if this is a custom annotation, delegate the implementation of the view
if ([annotation conformsToProtocol:@protocol(AnnotationProtocol)]) {
return [((NSObject<AnnotationProtocol>*)annotation) annotationViewInMap:mapView];
} else {
// else, return a standard annotation view
// ...
}
}
返回值將是類型AnnotationView,它實現AnnotationViewProtocol宣佈,它要處理的選擇/取消的觀點。因此,在您的地圖視圖控制器中,方法mapView:didSelectAnnotationView:和mapView:didDeselectAnnotationView:應該以與我們之前看到的相似的方式進行委託。
當選擇註釋時,會添加第二個註釋(CalloutAnnotation),它遵循相同的行爲,但這次返回的視圖(CalloutView)是從XIB初始化的,並且包含Core Graphics代碼(在BaseCalloutView中)以動畫和複製標註。
的CalloutView類的初始化:
- (id)initWithAnnotation:(CalloutAnnotation*)annotation
{
NSString *identifier = NSStringFromClass([self class]);
self = [super initWithAnnotation:annotation reuseIdentifier:identifier];
if (self!=nil){
[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil];
// prevent the tap and double tap from reaching views underneath
UITapGestureRecognizer *tapGestureRecognizer = ...
}
return self;
}
爲了能夠從我用通知標註視圖推另一個視圖控制器。
我在頂部鏈接的SO答案包含兩個完成此代碼的完整項目(類名稱可能不同)。我有另一個項目使用上面的UML https://github.com/j4n0/callout。
你好, 感謝您所做的出色工作。 我想創建一個註釋爲什麼兩個按鈕在它。 當我點擊按鈕時,我的CalloutView子類的方法handleTouch被調用。但發件人是一個UITapGestureRecognizer與視圖屬性中的註釋我期望有我的按鈕到sender.view? 這是一個衆所周知的問題。或者我做錯了什麼? –
是的,衆所周知,請查看https://github.com/j4n0/callout/issues/1以獲取解決方案。 – Jano
我面臨的問題來執行此代碼可以任何人幫助我.. –
我在MKAnnotationView中添加了自定義的UIButton。然後點擊那個按鈕,我就看到popView與RootViewController的視圖類似,如上所示。
我認爲這只是一個自定義視圖,您的真正問題是什麼? – Mat
很好的問題..它也幫助我..非常感謝Jennis .. –
示例演示 - http://stackoverflow.com/questions/27519517/button-action-in-mkannotation-view-not-working/27519673#27519673 – Kampai