HighCharts HIOptions.colors должен быть [строка]? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь воссоздать потоковый граф ObjectiveC пример со страницы примеров, используя swift. Первое, что я заметил, это то, что я не могу .. и, надеюсь, не нужно, инициализировать стиль PlotOptions:

    let plotoptions = HIPlotOptions()
    plotoptions.series = HISeries()
    plotoptions.series.label = HILabel()
    plotoptions.series.label.minFontSize = 5
    plotoptions.series.label.maxFontSize = 15
    //plotoptions.series.label.style = HIStyle()
    plotoptions.series.label.style.color = "rgba(255,255,255,0.75)"

потому что Cannot assign value of type 'HIStyle' to type 'HICSSObject?'

Но, что более важно, в примере показаны цвета, назначаемые непосредственно как HIColors:

HIColor *color5 = [[HIColor alloc] initWithHexValue:@"1aadce"];

HIColor *color6 = [[HIColor alloc] initWithRGBA:73 green:41 blue:112 alpha:.2];
HIColor *color7 = [[HIColor alloc] initWithRGBA:73 green:41 blue:112 alpha:.1];

Но, выполняя эквивалент, я получаю:

    let colors: [HIColor] = [
//...
        HIColor(hexValue:"1aadce"),
        HIColor(rgba: 73, green: 41, blue: 112, alpha: 0.2),
        HIColor(rgba: 73, green: 41, blue: 112, alpha: 0.1),
//...

Cannot assign value of type '[HIColor]' to type '[String]?'

Для многих из этих значений не стоит беспокоиться ... Я мог бы просто использовать "1aadce" ... но для RGBA, как мне инициализировать это?

редактировать

У меня было обратное в том смысле, что это шестнадцатеричные значения, которые он не может использовать, но значения rgba() дают строки, которые принимаются.

1 Ответ

0 голосов
/ 10 января 2019

Итак, ответ на часть стиля просто plotoptions.series.label.style = HICSSObject(). Цвета должны быть преобразованы вручную (благодаря переполнению стека для ресурсов, чтобы найти их):

    let colors: [HIColor] = [
        HIColor(hexValue:"2f7ed8"),
        HIColor(hexValue:"0d233a"),
        HIColor(hexValue:"8bbc21"),
        HIColor(hexValue:"910000"),
        HIColor(hexValue:"1aadce"),
        HIColor(hexValue:"1aadce"),
        HIColor(rgba: 73, green: 41, blue: 112, alpha: 0.2),
        HIColor(rgba: 73, green: 41, blue: 112, alpha: 0.1),
        HIColor(hexValue:"492970"),
        HIColor(hexValue:"f28f43"),
        HIColor(hexValue:"77a1e5"),
        HIColor(hexValue:"c42525"),
        HIColor(hexValue:"a6c96a"),
        HIColor(hexValue:"2f7ed8"),
        HIColor(hexValue:"0d233a"),
        HIColor(hexValue:"910000"),
        HIColor(rgba: 139, green: 188, blue: 33, alpha: 0.1),
        HIColor(rgba: 139, green: 188, blue: 33, alpha: 0.2),
        HIColor(rgba: 139, green: 188, blue: 33, alpha: 0.3),
    ]

    options.colors = colors.map{ color in
        let colorSpec = color.getData().debugDescription
            .replacingOccurrences(of: "Optional(", with: "")
            .replacingOccurrences(of: ")", with: "")
        if(colorSpec.hasPrefix("#")) {
            let index = colorSpec.index(colorSpec.startIndex, offsetBy: 1)
            // src: https://stackoverflow.com/questions/24263007/how-to-use-hex-color-values
            let pre = colorSpec
                .trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
                .uppercased()
            let cString = pre[index...]

            let rString = (cString as NSString).substring(to: 2)
            let gString = ((cString as NSString).substring(from: 2) as NSString).substring(to: 2)
            let bString = ((cString as NSString).substring(from: 4) as NSString).substring(to: 2)

            return "rgba(\(Int(strtoul(rString, nil, 16))), \(Int(strtoul(bString, nil, 16))), \(Int(strtoul(gString, nil, 16))), \(1.000000))"
        }

        return color.getData().debugDescription
    }
...