问题标签 [mkoverlaypathrenderer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 自定义 MKOverlay,以米为单位
我通过制作符合 MKOverlay 协议的 NSObject 子类和 MKOverlayPathRenderer 的子类来制作自定义叠加层。我的目标是制作一个锚定到 MKMapView 上的用户位置的圆形叠加层,我可以正常工作。每当我的叠加层上的坐标被设置时,我的渲染器使用键值观察,使其绘制的路径无效,然后重绘。
我遇到的问题是我希望圆的半径以米为单位,但我认为我做的数学不正确,或者我遗漏了一些东西。我在下面发布了覆盖对象和渲染器的源代码(渲染器的接口中没有任何内容)。举个例子,我将半径设置为 200 米,但在地图视图中,它只显示为 10 米左右。有谁知道如何解决这个问题?
ios - 使用 MKOverlayRenderer 绘制带孔的圆圈效果不佳
我想在地图视图上画一个有洞的圆圈(比如甜甜圈)。我的代码在这里。
它在模拟器中运行良好,但在设备上却不行。
在设备上,外圈用颜色填充,内圈没有被剪裁。如何修改我的代码以在设备上正常工作?
ios - 如何创建一个静态的、实际宽度的 MKOverlayPathRenderer 子类?
我一直在研究现有 MKMapView 的简单路径覆盖。它采用 CGMutablePath 并将其绘制到地图上。目标是绘制代表实际宽度的路径。例如,子类采用以米为单位的宽度并将该宽度转换为代表线宽。这是计算线宽的代码的一个版本:
在这里,我们首先找到与我们的线宽相对应的地图点数,然后将其转换为屏幕点数。我们根据 MKGeometry.h 中的标题注释进行转换:
最后,我们将路径添加到上下文中,将描边属性应用于路径并对其进行描边。
然而,这给出了非常不稳定的结果。渲染器经常在预期的活动区域之外的各个地方随机绘制线条片段,或者根本不绘制一些图块。有时,CPU 会一遍又一遍地重绘同一个图块的多个版本(据我所知)。在这种情况下,文档并没有太大帮助。
我确实有一个工作版本,但它似乎不是正确的解决方案,因为它完全忽略了 zoomScale 并且不使用 -applyStrokePropertiesToContext:atZoomScale:
任何人都有关于这个实现有什么问题的指针?
ios - 将 MKOverlayPathRenderer 作为覆盖添加到 MKMapView 会出现异常
一切都在主题中,所以这里是代码
在最后一行,它异常下降:
这意味着我使用了不实现 MKOverlay 的错误类,我明白了,但正如 MKOverlayPathRenderer 的参考中所说 - 它确实如此。所以我有点卡在这个问题上。
ios - 动画地图叠加:添加时如何使 MKCircle 从 0 扩展到其全尺寸?
我想让我的 MKCircle 在添加到地图时从 0 扩展到其指定的半径大小。MKOverlayRenderer 让我得到了一个不错的最终结果,但它太自发地添加了圆圈。我想对其进行动画处理以获得更平滑的入口,但如果没有动画层,我不知道该怎么做。
我尝试使用 CABasicAnimation 添加扩展 UIView 并在完成时将其替换为覆盖,但代码很难看,并且在添加覆盖时会出现明显的闪烁。
我看过另外两个声称有动画覆盖的项目,但它们都不是我正在寻找的灵丹妙药。
- http://yickhong-ios.blogspot.com/2012/04/animated-circle-on-mkmapview.html 早在 2012 年,这个人就继承了 MKCircleView 的子类,这显然已被弃用/强烈反对。
- https://github.com/jhurray/iOS7AnimatedMapOverlay这家伙子类化了UIImageView,加了一个圆png,还加了一些CABasicAnimations,让它展开和淡化。然后,只要选择了注释,他就会将此图像视图添加到地图中。动画效果很好,但是每当区域开始变化时,动画就会被删除,并且只有在区域完成变化时才会再次添加。它不是重绘区域更改的有效叠加层。他所拥有的只是一个设置为 nil 的 MKCircle,如果你想要一个覆盖,它会告诉你“改变它”。当 UIImageView 完成扩展时,我可能会“更改它”以添加叠加层,但有些事情告诉我它会产生与我的 UIView 解决方法相同的闪烁结果。
我正在考虑另一种我不太确定的方法(因为我从未尝试仅从 Core Graphics 产生动画效果),那就是子类MKOverlayRenderer
化,将自定义绘图(MKCircle?)设置- (void)drawMapRect:
为宽度和高度 x = 0,并使用 anNSTimer
递增 x 并调用setNeedsDisplayInMapRect
直到圆达到其完整大小。这对我来说听起来有点远,可能有更简单的方法来做到这一点。
我需要有人为我指出正确的方向。
mkmapview - 在绘制的 MKMapView 的圆圈下方滚动 MKMapView
更新
我需要在 a 上画一个圆MKMapView
,我可以在其中获得圆的半径及其中心坐标。但是,我还希望圆圈成为 的子视图MKMapView
,以便地图视图可以在圆圈下方滚动,在地图移动时更新其中心坐标,并在地图放大和缩小时更新其半径。
有谁知道我如何能够做到这一点?
这是问题的原始措辞
我MKMapView
使用下面的代码在 a 上画了一个圆圈:
这有效并在地图视图上产生一个圆圈。但是,当我滚动地图视图时,圆圈会随之移动。我希望圆圈保持静止并让地图视图在圆圈下方滚动。
重要的是要注意,我需要获取圆的中心坐标和半径才能创建区域。出于这个原因,我不能简单地在 MKMapView 上绘制 UIView,因为我无法获得以米为单位的 UIView 的半径。
ios - MKMapViewDelegate:如何在 rendererForOverlay 中识别叠加层
我正在将两个不同MKGeodesicPolyline
的实例添加到MKMapView
这样的实例中
我想用需要在rendererForOverlay
委托方法中配置的不同样式来渲染这两个叠加层。
我的问题是有哪些选项可以识别上述方法中的两种不同叠加层?
到目前为止,这是我所考虑的:
- 子类化:不是一个选项,因为
MKGeodesicPolyline
是通过静态工厂方法初始化的。 - 在属性中保留对覆盖的引用,然后将委托的
overlay
参数与这些参数进行比较。这确实有效,但感觉有点笨拙。此外,对于两个以上的叠加层,需要使用 anNSSet
或 an扩展此方法NSArray
。
我还能做些什么来简化这一点吗?它似乎MKGeodesicPolyline
不具备任何可用于标记的属性。
ios - Polyline drawMapRect 优化绘图
我在地图上有很多长折线。我想优化他们的绘图,因为在几千个点处,多段线的绘制速度非常慢。
我的drawMapRect
样子是这样的:
如果没有太多的点,这很好。但是当有 8-16 个可见的 maprects 和 2-3000 个点时,它们在for
.
如果它们只是位置,则解决方案是实现某种四叉树/r-tree 结构并仅过滤当前绘制的那些位置MKMapRect
,但我不确定这是否适用于折线本身。
如果我仅过滤当前 maprect 内的线段端点,则可能不会绘制某些线段。例如,点 1-2 之间的两个红色 maprects 中没有线段端点,但仍需要绘制...
是否有某种类似于四叉树的算法或某种方法来解决这个问题?
ios - 如何在 MapKit 中获得可见的叠加层?(即来自 Mapkit Ivew 的 MKOverlay/MKOverlayRender)
如何从 MapkitView 中获取当前可见覆盖的列表(数组)?
背景 - 例如,我想在我的 mapkitview 上显示指向某些 Overlay 类型中心的方向箭头,但是如何获得可见的?我可以看到似乎没有办法做到这一点?那么我是否需要通过所有叠加层(实际上是〜8000)并自己检查以查看屏幕上会显示什么?如果 MapKit 已经有效地做到了这一点,作为决定在给定时间需要显示哪些叠加层的一部分,这似乎是一种浪费。