Я адаптирую этот пример и нахожу контрольно-пропускной пункт:
https://docs.mapbox.com/ios/maps/examples/runtime-multiple-annotations/
let style = mapView.style
var features = [MGLPointFeature]()
for item in items {
let feature = MGLPointFeature()
feature.coordinate = CLLocationCoordinate2D(latitude: item.lat, longitude: item.lon)
feature.title = item.title
// A feature’s attributes can used by runtime styling for things like text labels.
feature.attributes = [
"name": item.title,
"pin": item.pin,
"zoomLevel": item.zoomLevel
]
features.append(feature)
}
let source = MGLShapeSource(identifier: "pois", features: features, options: nil)
style.addSource(source)
let symbols = MGLSymbolStyleLayer(identifier: "symbols", source: source)
symbols.iconImageName = NSExpression(forKeyPath: "pin")
//...
symbols.iconOpacity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
[5.9: 0, 6: 1])
style.addLayer(symbols)
В следующей строке я хочу установить iconOpacity для символа индивидуально с помощью zoomLevel.
symbols.iconOpacity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
[5.9: 0, 6: 1])
Например:
символ 1 появляется, когда он пересекает zoomLevel 6
символ 2 появляется, когда он пересекает zoomLevel 10
Поэтому я расширил функцию атрибутом «zoomLevel», чтобы он был доступен как NSExpression(forKeyPath: "zoomLevel")
.
Но как мне создать словарь? Что-то вроде
symbols.iconOpacity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", [NSExpression(forKeyPath: "zoomLevel")-0.1:0, NSExpression(forKeyPath: "zoomLevel"):1])
не сработает.
Спасибо за ваш вклад!