Гистограммы macOS Swift не реагируют на щелчок с выбранными значениями диаграммы

#swift #macos #charts #click #ios-charts

Вопрос:

Я использую диаграммы Дэниела (https://github.com/danielgindi/Charts) для создания гистограммы (macOS). Чтобы упростить это, пример демонстрационной гистограммы в основной ветви не реагирует на нажатие пользователем на панель (те же результаты с моей реализацией, поэтому я также протестировал демонстрацию. Если я смогу заставить демо работать, оно должно исправить и мое.)

 func testDemo()
{
    // Do any additional setup after loading the view.
    let xArray = Array(1..<10)
    let ys1 = xArray.map { x in return sin(Double(x) / 2.0 / 3.141 * 1.5) }
    let ys2 = xArray.map { x in return cos(Double(x) / 2.0 / 3.141) }
    
    let yse1 = ys1.enumerated().map { x, y in return BarChartDataEntry(x: Double(x), y: y) }
    let yse2 = ys2.enumerated().map { x, y in return BarChartDataEntry(x: Double(x), y: y) }
    
    let data = BarChartData()
    let ds1 = BarChartDataSet(entries: yse1, label: "Hello")
    ds1.colors = [NSUIColor.red]
    data.append(ds1)

    let ds2 = BarChartDataSet(entries: yse2, label: "World")
    ds2.colors = [NSUIColor.blue]
    data.append(ds2)

    let barWidth = 0.4
    let barSpace = 0.05
    let groupSpace = 0.1
    
    data.barWidth = barWidth
    self.barChartView.xAxis.axisMinimum = Double(xArray[0])
    self.barChartView.xAxis.axisMaximum = Double(xArray[0])   data.groupWidth(groupSpace: groupSpace, barSpace: barSpace) * Double(xArray.count)
    // (0.4   0.05) * 2 (data set count)   0.1 = 1
    data.groupBars(fromX: Double(xArray[0]), groupSpace: groupSpace, barSpace: barSpace)

    self.barChartView.data = data
    
    self.barChartView.gridBackgroundColor = NSUIColor.white
    
    self.barChartView.chartDescription.text = "Barchart Demo"
}
 

У меня есть делегат, установленный в viewDidLoad, и следующая реализация

 extension StatisticsBarChart: ChartViewDelegate {
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight)
{
    print(entry)
    print(highlight)
}

func chartValueNothingSelected(_ chartView: ChartViewBase)
{
    print("nothing selected")
}}
 

1 из 10 раз фактически выбирается полоса. Но в большинстве случаев печатается «ничего не выбрано». Таким образом, диаграмма работает, и вызываются методы делегирования. Но нажать на панель практически невозможно. А иногда, нажав на одну панель, вы выделяете другую панель.

Чего мне не хватает для правильной работы выбора? Я должен быть в состоянии выбрать каждый бар, и каждый раз вызывается правильная функция делегирования.

Комментарии:

1. Обнаружена аналогичная проблема (если не та же самая), о которой сообщалось здесь: github.com/danielgindi/Charts/issues/4641

Ответ №1:

Похоже, это реальная ошибка в главной ветке версии 4.0.0

Возврат к версии 3.6.0 решил проблему