2017-02-01 5 views
4

Привет, разработчики Я работаю над проектом, где я использовал danielgindi/Charts в сторонней библиотеке, теперь проблема здесь: мне нужно представить дорожку, как показано на рисунке в изображении на самой высокой точке диаграммы. Как я могу добиться этого каких-либо предложений? Или как я могу получить доступ к значениям выше BarChart, я хочу напечатать что-то еще на самом высоком пике (20.0), например «E»?Как достичь трекбола и метки доступа выше Бар на гистограммах в Swift 3x

enter image description here enter image description here

+0

Что говорит автор оригинала _danielgindi/Charts_? – holex

+0

@holex Я поговорил с ним, что вы говорите? –

+0

Я предложил вам, чтобы вы спросили его, а не о том, «как вы могли бы достичь этого». – holex

ответ

5

К сожалению, нет никакого способа, чтобы установить изображение вместо строки или Double при значении выше бара. , но да, мы можем получить доступ к значению выше бара, пожалуйста, посетите указанную ссылку. https://github.com/danielgindi/Charts/issues/2126

class ViewController: UIViewController { 
    var chartData = BarChartData() 
    var months: [String]! 
    var unitsSold = [Double]() 
weak var valueFormatter: IValueFormatter? 
    @IBOutlet var viewForChart: BarChartView! 
override func viewDidLoad() { 
     super.viewDidLoad() 
valueFormatter = self 

     months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
     unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0, 4.0, 18.0, 2.0, 4.0, 5.0, 4.0] 

setChart(dataEntryX: months, dataEntryY: unitsSold) 
} 

    func setChart(dataEntryX forX:[String],dataEntryY forY: [Double]) { 
     viewForChart.noDataText = "You need to provide data for the chart." 
     var dataEntries:[BarChartDataEntry] = [] 
     for i in 0..<forX.count{ 

      let dataEntry = BarChartDataEntry(x: Double(i), y: Double(forY[i]) , data: months as AnyObject?) 
    dataEntries.append(dataEntry) 
     } 

     let chartDataSet = BarChartDataSet(values: dataEntries, label: "Units Sold") 
     chartDataSet.setColor(UIColor.brown, alpha: 0.30) 
     chartData = BarChartData(dataSet: chartDataSet) 
chartData.barWidth = 0.75 
     chartData.setDrawValues(true) 
     viewForChart.data = chartData 
viewForChart.xAxis.valueFormatter = IndexAxisValueFormatter(values: months) 

     viewForChart.drawBordersEnabled = false 

    viewForChart.data?.setValueFormatter(valueFormatter) 
} 
} 

добавить расширение выше или за пределами класса

extension ViewController: IValueFormatter { 
    func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String { 
     print(value) 
     //logic to print string at required point or value 
     switch value { 

     case 20.0: return "" 
     default: return "" 
     } 
    } 
} 
+0

Life saver. :) Я имел дело со сложными данными. Спасибо тонну – phamot

2

Для быстрой 2х // добавить это в класс

class ValueFormator2:NSNumberFormatter{ 
    override func stringFromNumber(number: NSNumber) -> String? { 
     print(number) 
     switch number { 
     case 3.0: return "" 

     default: return "\(number)" 
     } 
    } 

} 

, а затем

func setChart(xValues: [String], yValuesLineChart: [Double], yValuesBarChart: [Double] , combinedChartView:CombinedChartView) { 
    let form = ValueFormator2() 
    combinedChartView.barData?.setValueFormatter(form) 
} 
+0

Большое спасибо сэр –