@@ -463,3 +463,66 @@ private func tap(point: ScreenPoint, tapRadius: ScreenDistance) {
463463 self .getRenderedObjectsCancellable = cancel
464464}
465465```
466+
467+ ## Создание кнопки управления масштабом
468+
469+ В SDK есть готовый к использованию блок управления масштабом, создаваемый
470+ с помощью метода ` PlatformSDK.Container.mapControlFactory.makeZoomControl() ` .
471+
472+ Пример описывает создание собственной кнопки управления масштабом в фиксированном
473+ направлении: ` direction ` указывает, будет кнопка уменьшать или увеличивать.
474+ Ударживание кнопки в нажатом состоянии продолжает непрерывное изменение
475+ масштаба. Когда предел будет достигнут — кнопка визуально изменит состояние.
476+
477+ Из двух таких кнопок можно собрать блок свободного управления масштабом.
478+
479+ Экземпляр ` ZoomControlModel ` можно получить с помощью функции
480+ ` PlatformSDK.createZoomControlModel(map:) ` .
481+
482+ ```
483+ final class ZoomButton: UIButton {
484+ private let model: ZoomControlModel
485+ private let direction: ZoomControlButton
486+ private var connection: ICancellable = NoopCancellable()
487+
488+ init(model: ZoomControlModel, direction: ZoomControlButton) {
489+ self.model = model
490+ self.direction = direction
491+
492+ super.init(frame: .zero)
493+
494+ self.addTarget(
495+ self,
496+ action: #selector(self.startZoom),
497+ for: .touchDown
498+ )
499+ self.addTarget(
500+ self,
501+ action: #selector(self.stopZoom),
502+ for: [.touchCancel, .touchUpInside, .touchUpOutside]
503+ )
504+
505+ // Реагируем на отключение действия — выключаем кнопку.
506+ // Такое возможно при достижении предела изменения масштаба.
507+ self.connection = self.model.isEnabled(button: self.direction).sink {
508+ [weak self] isEnabled in
509+ DispatchQueue.main.async {
510+ self?.isEnabled = isEnabled
511+ }
512+ }
513+ }
514+
515+ @available(*, unavailable)
516+ required init?(coder: NSCoder) {
517+ fatalError("init(coder:) has not been implemented")
518+ }
519+
520+ @objc private func startZoom() {
521+ self.model.setPressed(button: self.direction, value: true)
522+ }
523+
524+ @objc private func stopZoom() {
525+ self.model.setPressed(button: self.direction, value: false)
526+ }
527+ }
528+ ```
0 commit comments