- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有什么方法可以在有人触摸 MKPolylineView 时显示标注?我尝试添加 UITapGestureRecognizer 并在选择器中以某个坐标显示标注。但没有用。有什么建议吗?
以下是我尝试过的方法
- (MKOverlayView *)mapView:(MKMapView *)mapa viewForOverlay:(id <MKOverlay>)overlay
self.polylineView = [[MKPolylineView alloc] initWithPolyline: self.polyline];
self.polylineView.strokeColor = [UIColor blackColor];
self.polylineView.lineWidth = 5.0;
self.polylineView.alpha = 0.7;
UITapGestureRecognizer *touchOnView = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(addBubble:)];
[touchOnView setNumberOfTapsRequired:1];
[touchOnView setNumberOfTouchesRequired:1];
[self.polylineView addGestureRecognizer:touchOnView];
最佳答案
非常有趣的问题 - 我从来没有想过将手势识别器放在 map 叠加层上。通过一些实验,我验证了可以检测到 MKPolylineView
上的点击。正如您发现的那样,点击手势在 map 叠加层上不起作用。因此,我将点击手势放在 MKMapView
而不是 MKPolylineView
上。然后处理水龙头:
- (void)handleTapGesture:(UIGestureRecognizer*)gestureRecognizer
{
if (measureLine != nil)
{
UIView* hitView = [self.polylineView hitTest:[gestureRecognizer locationInView:self.polylineView] withEvent:nil];
}
}
hitView
如果您的点击在 MKPolylineView
之外,则为 nil,如果点击在里面,则为 self.polylineView
。
但是,这可能不会如您所愿。对于水平和垂直线,它工作得很好,因为底层 View 的大小与线的大小大致相同。但是对于 45 度线,底层 View 必须比线大得多,因为它是轴对齐的边界框 (AABB)。如果您考虑一条 45 度线,仅使用水平线和垂直线包围它,您最终会得到一个很大的区域 - 比您想要检测的水龙头大得多。
例如
--------
| / |
| / |
| / |
| / |
|/ |
--------
但是使用点击手势或 HitTest 总是会导致识别这些 AABB 内的点击。因此,无论您尝试在何处附加手势 - 例如到 MKPolylineView
,或者到 MKMapView
,你会得到虚假的结果。对于较长的线,问题会变得更糟 - 如果您想象一条线从 map View 的右上角延伸到左下角,那么您需要包围它的 AABB 将覆盖 map View 的整个区域,这意味着点击左上角或右下角将被解释为点击 MKPolylineView
。
为了解决这个问题,我建议采用以下方法:
无论多段线的长度或它们的角度如何,这种方法都能保证有效。没有 AABB 问题。缺点是所有这些距离计算的计算量可能很大——因此,如果您的多段线由大量点组成,或者如果您有大量多段线,那么您可能无法完成所有这些计算不会阻止 UI 响应,这意味着您需要将其移至后台线程。如果您只有几条折线,和/或它们由几个点组成,那么您会没事的。
关于ios - 来自 MKPolylineView 的标注?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931566/
我有一个 MKMapView,其中有一些路线有时会在它们之间重叠,我想在 View 前面显示一个特定的路线。我正在尝试这个,但似乎没有用: [[polylineViewZoom superview]
有什么方法可以在有人触摸 MKPolylineView 时显示标注?我尝试添加 UITapGestureRecognizer 并在选择器中以某个坐标显示标注。但没有用。有什么建议吗? 以下是我尝试过的
我正在尝试创建一个定期更新的折线 (MKPolyline) 叠加层,以模拟对象的移动。我可以通过删除旧叠加层、更新折线并再次添加叠加层来实现此目的,但这会导致闪烁。 对于点注释(MKPointAnno
我一直在尝试使用 MapKit 和 MKPolyline 开发应用程序。我已经在 map 上绘制了注释和路径,但是我正在尝试将 lineDashPattern 更改为路线方向上的一组动画破折号。我知道
我在 MKMapView 上绘制 MKPolylineView 时遇到问题。这条线代表一次环游世界的旅行,起点和终点都在纽约附近,总是向东行驶。从日本到旧金山的行程中有一段横跨太平洋,因此经度为 +/
是否有人尝试子类化 MKOverlayPathView,以便从本质上重新创建对路径绘制有更多控制的 MKPolylineView?如果是这样,您愿意分享一些示例代码吗? 我想在 map View 上绘
我想根据速度等条件在多段线 View 上应用渐变。我能够子类化 MKPolyLineRenderer 以使用自定义描边和填充进行绘制,但只能沿路径使用相同的颜色。 我看到了其他类似的问题,例如:Dra
我想在我的 Swift 应用程序中绘制折线。 快速代码 class MapViewController: UIViewController, MKMapViewDelegate { @IBOu
我希望 MKPolylineView lineWidth 每次放大或缩小 MKMap 时都需要相同? 我正在使用 MKPolylineView 绘制从 A 到 B 的路线以及路线上的所有指定点。 我想
我收到以下错误:initWithPolyline: is deprecated: first deprecated in iOS 7.0 MKPolylineView *lineView = [[MK
我是一名优秀的程序员,十分优秀!