【问题标题】:Create a MarkerView when user clicks on Chart当用户点击图表时创建一个 MarkerView
【发布时间】:2016-07-05 21:07:26
【问题描述】:

我已经搜索并搜索了如何在用户使用 Swift 的 Charts(以前是 iOS 图表)单击条形图中的条形时显示 MarkerView。

文档说明该库能够使用 MarkerViews “突出显示值(带有可自定义的弹出视图)”,但我不知道如何显示。

当用户单击条形图中的条形时,我希望显示一个小工具提示,如下图所示。

条形图上的工具提示:

我已准备好 chartValueSelected 函数,该函数会在选择柱时触发。

【问题讨论】:

    标签: ios xcode swift bar-chart ios-charts


    【解决方案1】:

    所以你使用的是Charts 对吗?

    你检查过 BallonMarker.swift 吗?

    /ChartsDemo/Classes/Components/BallonMarker.swift

    斯威夫特

    let marker:BalloonMarker = BalloonMarker(color: UIColor.redColor(), font: UIFont(name: "Helvetica", size: 12)!, insets: UIEdgeInsets(top: 7.0, left: 7.0, bottom: 7.0, right: 7.0))
    marker.minimumSize = CGSizeMake(75.0, 35.0)
    chartView.marker = marker
    

    Swift 3 更新

    let marker:BalloonMarker = BalloonMarker(color: UIColor.black, font: UIFont(name: "Helvetica", size: 12)!, textColor: UIColor.white, insets: UIEdgeInsets(top: 7.0, left: 7.0, bottom: 7.0, right: 7.0))
    marker.minimumSize = CGSize(width: 75.0, height: 35.0)
    chartView.marker = marker
    

    Objective-C

    BalloonMarker *marker = [[BalloonMarker alloc] initWithColor:[UIColor colorWithRed:14.0/255.0 alpha:1.0] font:[UIFont systemFontOfSize:12.0] insets: UIEdgeInsetsMake(7.0, 7.0, 7.0, 7.0)];
    marker.minimumSize = CGSizeMake(75.f, 35.f);
    _chartView.marker = marker;
    

    【讨论】:

    • 是的,我已将 BalloonMarker 类导入到我的项目中,但在实际创建标记的语法方面遇到了困难。
    • 在我的 chartValueSelected 函数中,我创建了一个 BalloonMarker 对象并将其分配给 chartView.marker。
    • 感谢您的回复 - 这非常有帮助。所以我添加了快速代码,当点击它时,它会在栏上方创建一个黑色气泡。我也想在气泡中显示 bar y 值。我应该使用 BalloonMarker 的 refreshContent 方法吗?或者是否有我可以为其赋值的标记属性?
    • 很高兴我能帮上忙。是的,颜色选择显然只是为了回答:) 顺便说一句,您是否在BalloonMarker.swift refreshContent 函数中单击了两个类ChartDataEntryChartHighlight?它们具有您可以插入和突出显示的属性,例如 valuexIndexdata_xIndex_value 等。
    • 我在 Objective C 项目中使用了这个 swift 类。无法导入。因为我使用的是 PODS,所以我没有添加整个 xcode 项目。如果有人可以帮忙吗?
    【解决方案2】:

    带有 Objective C 代码的 Swift 图表库将是这样的。我在这里只是展示一些代码 sn-ps。

    1. ChartViewController.m

      -(void)initializeChart {
      
          //chart specifications will go here 
          ...
          ...
      
          //set balloon marker to the chart
          BalloonMarker *marker = [[BalloonMarker alloc]
                           initWithColor: kColorBrown1
                           font: [UIFont systemFontOfSize:12.0]
                           textColor: UIColor.whiteColor
                           insets: UIEdgeInsetsMake(8.0, 8.0, 20.0, 8.0)];
          marker.chartView = chartView;
          marker.minimumSize = CGSizeMake(80.f, 40.f);
          chartView.marker = marker;
      }
      
    2. BalloonMarker.swift

      import Charts
      
      ...
      
      ...
      
      //This method will be called when ever user clicks on a chart to refresh the marker text. You need to specify the value here.
      
      open override func refreshContent(entry: ChartDataEntry, highlight: Highlight)
      
      {  
          setLabel(entry.y!)        
      }
      

    【讨论】:

      【解决方案3】:

      即使在将 BalloonMarker 添加到图表后,如果未显示标记,请确保在图表视图中启用标记

      chartView.drawMarkers = true
      

      在图表数据集上启用了突出显示。这应该在您分配图表数据集后完成。

      chartView.data?.highlightEnabled = true
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多