gpt4 book ai didi

ios - 为注释创建自定义标注

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:05 26 4
gpt4 key购买 nike

在 iOS6 中,我正在尝试为注释创建自定义标注,其中将包含图像、标题、描述等详细信息。我在这里看到了相关帖子,但不是我要找的。在我的应用程序中,当您选择注释时,您可以选择 4 个按钮。现在我正在尝试为第 4 个按钮创建选项,这是详细标注。

我已经创建了一个代表自定义标注的 UIView 类。

编辑:

在 Live2Enjoy7 的帮助下,我修改了我的代码如下。

BuildingViewController.m

- (void)MapMenu:(MapMenu *)menu didSelectButton:(NSInteger)index{

if (index == 3) {

image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
_buildingShowCallout = YES;
[parentView removeAnnotation:self];
[parentView addAnnotation:self];
}
}

如果用户按下按钮,此方法会创建新图像(使用 url 链接),设置 _buildingShowCallout = YES,最后删除并再次添加所选注释以使 viewForAnnotation 方法起作用。

在我的 MapViewController.m 中

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

if ([annotation isKindOfClass:[MKUserLocation class]]) {
return nil;
}

static NSString *identifier = @"MyAnnotation";
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

BuildingViewController* building = (BuildingViewController*) annotation;

// If a new annotation is created
if (annotationView == nil) {

annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:building reuseIdentifier:identifier];

if (building.buildingShowCallout) {// Create the custom callout
BuildingCallOut* buildingCallout = [[BuildingCallOut alloc]initWithFrame:CGRectMake(0, 0, 200, 150)];
[buildingCallout showCallout:building];
[annotationView addSubview:buildingCallout];//add the new callout as subview of the selected annotation.
}

} else{

annotationView.annotation = annotation;

if (building.buildingShowCallout) {// Create the custom callout
BuildingCallOut* buildingCallout = [[BuildingCallOut alloc]initWithFrame:CGRectMake(0, 0, 200, 150)];
[buildingCallout showCallout:building];
[annotationView addSubview:buildingCallout];//add the new callout as subview of the selected annotation.
}
}

return annotationView;
}

一切正常,但现在我遇到了一个新问题。

  1. 如果您选择查看一个注释的标注,然后选择查看另一个注释的标注,则前一个注释会保留在 map 上。我该如何解决这个问题?

截图![在此处输入图片描述][1]

如您所见.. 当我在底部调用新标注时,屏幕顶部的前一个标注仍然存在。努力寻找放置“消失”线的位置。提前致谢

最佳答案

我猜您的 BuildingViewController 就是您的 MapViewController。

您想在 header 中将其声明为 MKMapViewDelegate。这将使您能够访问多种方法,这些方法允许您更改出现的注释甚至图钉的 View 。

首先,如果您还没有导入 MapKit/MapKit.h 和 UIKit/UIKit.h。

其次,声明您的 BuildingViewController 符合 MKMapViewDelegate 协议(protocol)(如上所述)。

第三,在 ViewDidLoad 中将您的 BuildingViewController 声明为 map View 的委托(delegate),例如:

self.mapView.delegate=self; //assuming that the you have a MKMapView named MapView in your layout

第四,实现这些协议(protocol)方法:

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

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

第一种方法允许您设置左右呼出配件以及修改其他一些东西(这是您想要在 CGRectMakes 上做的地方)。

在第二种方法中,您决定在注释 View 中实际显示哪些数据。

搜索 MKMapViewDelegate 的文档 --> here

关于ios - 为注释创建自定义标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13546149/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com