我需要沿着图像的形状绘制一条路径,使其始终匹配其在图像上的位置,而与图像比例无关。可以将其想象为谷歌地图的混合视图,其中街道名称和道路叠加在航拍图片之上。
此外,这条路径将由用户的手指移动绘制,我需要能够检索图像像素坐标上的路径关键点。用户放大以便更精确地设置路径位置。
我设法以某种方式使用这种方法使其工作:
- 创建一个名为 CanvasView 的自定义 UIView,它处理触摸交互并将缩放、旋转、平移值传递给 UIImageView 或 PathsView(见下文),具体取决于一个标志:deliverToImageOrPaths。
- 创建一个 UIImageView 保存基本图像。这被设置为 CanvasView 的子项
- 创建一个名为 PathsView 的自定义 UIView,它跟踪 2D 路径几何并使用自定义 drawRect 绘制自身。这被设置为 UIImageView 的子项。
所以层次结构:CanvasView -> UIImageView ->PathsView
这样,当 DeliverToImageOrPaths 为 YES 时,手指手势会同时转换 UIImageView 及其子 PathsView。当 deliverToImageOrPaths 为 NO 时,手势仅影响 PathsView 更改其几何形状。到目前为止,一切都很好。
问题:我遇到的问题是,当缩放基本 UIImageView(通过其 .transform 属性)时,PathsView 会使用锯齿伪影进行缩放。drawRect 仍在 PathsView 上被调用,但我猜它正在使用原始缓冲区大小执行绘图,然后进行插值。
我该如何解决这个问题?有没有更好的方法来实现这些功能?
PS:我尝试将PathsView图层类改为CATiledLayer,levelsOfDetailBias 4和levelsOfDetail 4。它在一定程度上解决了锯齿问题,但渲染速度慢得让人无法接受。