Ios MapKit:自定义详图索引和添加按钮

Ios MapKit:自定义详图索引和添加按钮,ios,uibutton,mapkit,mkannotation,mkannotationview,Ios,Uibutton,Mapkit,Mkannotation,Mkannotationview,这简直让我发疯 所以,我有定制的图钉,你可以在地图上拖动,效果很好。因为我想让它们像标准的苹果针(animatesDrop)一样动画,所以我使用以下事件来跟踪发生的事情 - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotat

这简直让我发疯

所以,我有定制的图钉,你可以在地图上拖动,效果很好。因为我想让它们像标准的苹果针(animatesDrop)一样动画,所以我使用以下事件来跟踪发生的事情

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState
当用户拖动完pin后,我需要显示一个标注“保存/取消”。我启动了以下方法,MKPinAnnotationView(曾经是UIView)出现,但按钮不起作用

  • 我试过用代码来做这一切,但没有成功
  • 我曾尝试在视图上捕获触摸事件,但没有成功
  • 我已确保保留视图(selectedPin)
  • 我已尝试将视图添加到superview(在帖子上看到)
  • 我已确保userInteractionEnabled处于启用状态
  • 我将视图设置为控制器,我很确定这不起作用 或者
我吃了很多糖:(

更新

我相信我知道为什么这是工作,但我不知道如何修复它。 我正在将UIView添加到AnnotationView(PIN)中。UIView比PIN大得多,因此其框架更大。只有穿过PIN的UIView部分才可单击。我希望ClipToBounds会隐藏UIView


因此,我似乎需要在实际地图中添加UIView,以便它可以单击或创建注释视图(PIN)框架要大得多,这会导致其他问题。

我在这里对自定义详图索引视图进行了详细的解释。在您的情况下,最佳做法是将视图添加为详图索引视图的子视图,而详图索引视图本身使其不可见

有关触摸处理的所有详细信息,请参见链接答案


希望它会有用!

我在这里对自定义详图索引视图进行了详细的解释。在您的情况下,最佳做法是将视图添加为详图索引视图的子视图,而详图索引视图本身使其不可见

有关触摸处理的所有详细信息,请参见链接答案


希望它会有用!

添加以下委托方法,当任何UIControl接收到事件时将调用该方法:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
        NSLog(@"tap event");
    }

如果视图是UIControl的后代,则地图视图在用户点击视图时调用此方法作为方便。您可以使用此方法响应点击并执行与该控件相关的任何操作。

添加以下代理方法,当任何UIControl接收到事件时调用该方法:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
        NSLog(@"tap event");
    }

如果视图是UIControl的后代,则地图视图在用户点击您的视图时调用此方法作为方便。您可以使用此方法响应点击并执行与该控件相关的任何操作。

是您的自定义类继承的抽象类,您覆盖了leftCalloutAccessoryView方法并将其用于重新调用urn一个视图?你有一个例子吗?我不认为我需要覆盖类上的任何内容抱歉不是atm,你能描述一下按钮不工作是什么意思吗?你的意思是addTarget没有启动?还是按钮没有显示?addTarget没有启动,没有检测到触摸检测,是不是因为它作为子视图添加到pin而不是map?是您的自定义类继承的抽象类,您是否重写了leftCalloutAccessoryView方法并使用它返回视图?您是否有一个示例伙伴?我认为我不需要重写类上的任何内容对不起,不是atm,您能描述一下您所说的按钮不工作是什么意思吗?您是说addTarget不启动?还是按钮不启动“噢?addTarget没有触发,没有检测到触摸检测,是因为它作为子视图添加到pin而不是地图中吗?我仔细查看了一下,认为这会修复它,但遗憾的是,它没有,谢谢您的帮助。我认为我的按钮在注释视图之外,因此如果您的按钮在ann内,则不会接收触摸屏旋转视图绑定他们仍然会忽略任何触摸输入,因为mapView手柄的触摸方式不同(搜索距离触摸位置最近的接点),并且由于触摸事件都不会发送到注释子视图。无论如何,您都需要将MKAnnotationView子类化并实现onHit方法,即使您在其他方面存在问题,您仍然会遇到此问题。我认为您是对的,实际上,我认为视图正在添加到pins视图中,该视图太小了,因此视图的任何部分帽子重叠pin是可点击的,但框架之外的任何东西都不会。我觉得我需要将其添加到mapI中。我仔细查看了一下,认为这可以解决问题,但遗憾的是,它没有解决问题,谢谢您的帮助。我想我的按钮在“批注”视图之外,因此即使您的按钮在“批注”视图中,也不会收到触摸他们仍然会忽略任何触摸输入,因为mapView手柄的触摸方式不同(搜索最接近触针的位置),并且由于触摸事件都不会发送到注释子视图。无论如何,您都需要将MKAnnotationView子类化并实现onHit方法,即使您在其他方面存在问题,您仍然会遇到此问题。我认为您是对的,实际上,我认为视图正在添加到pins视图中,该视图太小了,因此视图的任何部分帽子重叠pin是可点击的,但框架之外的任何东西都不会让我感觉需要将其添加到地图中