代码之家  ›  专栏  ›  技术社区  ›  Bartłomiej Semańczyk

将nsexpression转换为mglstylevalue<>

  •  2
  • Bartłomiej Semańczyk  · 技术社区  · 7 年前

    我试着去做:

    var cards = [MGLPolygonFeature]()
    for card in cardsArray {
        let polygon = MGLPolygonFeature(coordinates: &coordinates, count: UInt(coordinates.count))
        polygon.attributes = ["name": card.name]
    
        cards.append(polygon)
    }
    
    let cardSource = MGLShapeSource(identifier: "cards", features: cards, options: [:])
    mapView.style?.addSource(cardSource)
    
    let labelLayer = MGLSymbolStyleLayer(identifier: "card-labels", source: cardSource)
    labelLayer.text = NSExpression(format: "CAST(address, 'NSString')")
    labelLayer.textOpacity = 
        NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", [16: 0, 17: 1])
    

    但由于错误,它无法工作:

    无法将nsexpression类型的值赋给mglstylevalue类型。

    1 回复  |  直到 7 年前
        1
  •  2
  •   jmkiley    7 年前

    看起来您正在尝试将Nexpression与3.x版的Maps SDK结合使用。在这种情况下,您需要使用 MGLStyleValue . 您可能需要尝试以下操作:

     let stops = [16: MGLStyleValue(rawValue: 0),
                  17: MGLStyleValue(rawValue: 1)
     ]
     labelLayer.textOpacity = MGLStyleValue(interpolationMode: .exponential,
            cameraStops: stops,
            options: nil)
    

    您可以找到用于设置层不透明度的v4.x之前的示例代码 here . 您还可以找到 v3.7.8 documentation 有帮助。