如何添加在图形页面定制标注视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何添加在图形页面定制标注视图相关的知识,希望对你有一定的参考价值。

我是新目标C到mapkit。我可以添加自定义的注释在图形页面。

我需要把类似下面的图像的自定义标注视图

.

但我没有得到我怎么能设计出这样的标注视图。

我知道我需要考虑的标注方法添加标注。

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation

    static NSString *AnnotationViewID = @"annotationViewID";

    MKAnnotationView *annotationView = (MKAnnotationView *)[mapview dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
    

    annotationView.image = [UIImage imageNamed:@"blue_without_pin.png"];
    annotationView.annotation = annotation;


    return annotationView;

答案

基本上你想要做的是通过实现你的MKMapViewDelegate例如下面的方法添加一个新的自定义视图:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
    CGPoint annotationCenter = [mapView convertCoordinate:view.annotation.coordinate toPointToView:mapView];
    [self displayCustomCalloutForAnnotation:view.annotation center:annotationCenter];

另一答案
@interface CustomAnnotaionView : MKAnnotationView




@property (strong, nonatomic) UIView *calloutView;




-(void)setSelected:(BOOL)selected animated:(BOOL)animated;




@end




@implementation CustomAnnotaionView




@synthesize calloutView = _calloutView;




-(void)setSelected:(BOOL)selected animated:(BOOL)animated







    [super setSelected:selected animated:animated];

    if(selected)
    

        [self.calloutView setFrame:CGRectMake(30, 130, 250, 135)];
        [self.calloutView sizeToFit];
        self.calloutView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"popup.png"]];
        [self addSubview:self.calloutView];

    
    else
    

        [self.calloutView removeFromSuperview];
    



-(void)didAddSubview:(UIView *)subview


    if([[[subview class]description]isEqualToString:@"UICalloutView"])
    

        [subview removeFromSuperview];

    


Use this customAnnotationView class in MapView delegate method,

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id 

<MKAnnotation>)annotation





    if([annotation isKindOfClass:[MapAnnotation class]])
    
       CustomAnnotationView *annotationView = (CustomAnnotaionView*)[theMapView dequeueReusableAnnotationViewWithIdentifier:@"CustomAnnotationView"];
        if(!annotationView)
        
         MapAnnotation *annotation = (MapAnnotation *)annotation;

         annotationView = [[CustomAnnotaionView alloc]initWithAnnotation:annotation reuseIdentifier:@"CustomAnnotationView"];

            [annotationView setCanShowCallout:YES];
        
        else
            annotationView.annotation = annotation;

        return annotationView;

    
    return nil;


另一答案

对此的一个解决方案是将检测注释选择相对于亲本的UIView的确切坐标,然后直接在的MKMapView的顶部绘制一个UIView。

这里有一个片段,它可以帮助:

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view

    CGPoint pointInMap = [self.mapView convertCoordinate:buildingAnnotation.coordinate
                                           toPointToView:self.view];

    // Hide the default callout generated by MKMapView

    [mapView deselectAnnotation:view.annotation animated:NO];

    // Create a custom callout view and center the arrow on the pointInMap CGPoint

另一答案

您必须实现标注看待自己,并用

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view

此委托进行标注视图显示在正确的地方,

ios没有自定义标注视图的任何方法还

以上是关于如何添加在图形页面定制标注视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在地图视图中将标注添加到单个注释中

[Asp.Net Core]视图组件扩展定制

[Asp.Net Core]视图组件扩展定制

gephi预览视图中为啥不能显示箭头,求大神指导

如何解决导致重复标注的 MapKit 错误?

SwiftUI之深入解析如何定制视图的动画和转场