Skip to content

Commit

Permalink
Add an example text about a custom zoom control
Browse files Browse the repository at this point in the history
  • Loading branch information
Anatoly Petrov authored and Anatoly Petrov committed Mar 17, 2021
1 parent b4c07ac commit 4702fb3
Showing 1 changed file with 63 additions and 1 deletion.
64 changes: 63 additions & 1 deletion docs/ru/examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ let source = createMyLocationMapObjectSource(
map.addSource(source: source)
```


## Получение информации о точке прикосновения к карте

Передаём точку нажатия в пиксельных координатах. Для наиболее подходящего
Expand Down Expand Up @@ -47,3 +46,66 @@ private func tap(point: ScreenPoint, tapRadius: ScreenDistance) {
self.getRenderedObjectsCancellable = cancel
}
```

## Создание кнопки управления масштабом

В SDK есть готовый к использованию блок управления масштабом, создаваемый
с помощью метода `PlatformSDK.Container.mapControlFactory.makeZoomControl()`.

Пример описывает создание собственной кнопки управления масштабом в фиксированном
направлении: `direction` указывает, будет кнопка уменьшать или увеличивать.
Ударживание кнопки в нажатом состоянии продолжает непрерывное изменение
масштаба. Когда предел будет достигнут — кнопка визуально изменит состояние.

Из двух таких кнопок можно собрать блок свободного управления масштабом.

Экземпляр `ZoomControlModel` можно получить с помощью функции
`PlatformSDK.createZoomControlModel(map:)`.

```
final class ZoomButton: UIButton {
private let model: ZoomControlModel
private let direction: ZoomControlButton
private var connection: ICancellable = NoopCancellable()
init(model: ZoomControlModel, direction: ZoomControlButton) {
self.model = model
self.direction = direction
super.init(frame: .zero)
self.addTarget(
self,
action: #selector(self.startZoom),
for: .touchDown
)
self.addTarget(
self,
action: #selector(self.stopZoom),
for: [.touchCancel, .touchUpInside, .touchUpOutside]
)
// Реагируем на отключение действия — выключаем кнопку.
// Такое возможно при достижении предела изменения масштаба.
self.connection = self.model.isEnabled(button: self.direction).sink {
[weak self] isEnabled in
DispatchQueue.main.async {
self?.isEnabled = isEnabled
}
}
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func startZoom() {
self.model.setPressed(button: self.direction, value: true)
}
@objc private func stopZoom() {
self.model.setPressed(button: self.direction, value: false)
}
}
```

0 comments on commit 4702fb3

Please sign in to comment.