核心动画如何有选择地缩放CAShapeLayer

时间:2019-05-14 11:33:30

标签: swift macos core-animation cashapelayer nsbezierpath

假设我的视图内部正在渲染一张地图(实际上是路线图)。道路由CAShapeLayer表示,其路径设置为NSBezierPath的cgPath(而路径又设置为一组经度/纬度格式的CGPoints)。

layerTracker["roadLayer"] = CAShapeLayer()
layerTracker["roadLayer"]!.bounds = CGRect(x: 0, y: 0, width: 600, height: 400)
self.layer?.addSublayer(layerTracker["roadLayer"]!)
// add CAShapeLayer for roads as needed

我希望用户能够放大/缩小,因此在用户滚动鼠标或触控板时使用CATransform3DMakeScale

layerTracker["roadLayer"]!.transform = CATransform3DMakeScale(1 / toValue, 1 / toValue, 1)

这很好用,但是我还有一个额外的复杂性,我不确定该如何处理。我希望某些节点(例如道路名称标签和图标)免于缩放-这样,当用户放大/缩小道路名称标签时,其尺寸保持不变,而道路形状则按比例缩放。

不确定如何处理吗?我是否可以具有层次结构,以便一个图层可缩放而另一个图层不缩放?我是否需要手动计算每个道路名称标签的偏移量,然后将它们一个一个地放置在缩放图层上?任何帮助表示赞赏!

我的一个想法是对包含文本图层的图层应用相同的比例转换,以便位置正确。...但同时按比例放大每个单独的文本节点,以增大字体大小。这可能会起作用,但最好避免一一遍历所有这些文本节点(可能有几百种最坏的情况)。

0 个答案:

没有答案