Предположим, у меня есть карта (буквально дорожная карта), отображаемая внутри моего вида.Дороги представлены CAShapeLayer с путем, установленным в cgPath NSBezierPath (который, в свою очередь, имеет путь, заданный для набора 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)
Это прекрасно работает, однако яесть дополнительная сложность, с которой я не уверен, как справиться.Я хочу, чтобы некоторые узлы (например, метки и значки названий дорог) были освобождены от масштабирования, чтобы при увеличении / уменьшении пользователя метка названия дороги оставалась того же размера, а форма дороги пропорционально масштабировалась.
Неуверен, как справиться с этим?Могу ли я иметь иерархию слоев, чтобы один слой масштабировался, а другой не масштабировался?Нужно ли вручную рассчитывать смещение каждой метки названия дороги и располагать их один за другим в масштабированном слое?Любая помощь приветствуется!
Одна идея, которая у меня возникла, состояла в том, чтобы применить такое же преобразование масштаба к слою, содержащему текстовые слои, чтобы положение было правильным .... но в то же время масштабировать каждый отдельный текстовый узел, чтобыразмер шрифта увеличивается.Это, вероятно, сработает, но предпочтительнее избегать итерации по всем этим текстовым узлам один за другим (может быть несколько сотен наихудших сценариев).