无法使图表滚动,而不是缩放整个图表以适应空间

时间:2018-05-17 21:48:50

标签: swift ios-charts

我正在尝试使用Daniel Gindi's Charts library而我想要的是条形图或折线图仅显示部分数据,但允许用户向右滚动以查看其余部分数据

现在,图表显示了视图中的所有数据,因此条形图太小或不可见,如果图表的开头只有数据点,则会折叠折线图,以便您看不到数据

我已经尝试将xAxis.axisMaximum设置为某个值,这样可以更好地显示数据,但是您无法向右滚动以查看图表的其余部分。我想要两个:以合理的大小查看数据,并且能够向右滚动以查看图表的其余部分(如果图表需要它),这通常与我的软件一起使用。

这是我的条形图和折线图代码:

override func makeChart(resultChoice: chartData)
{
    let chart = getChartObject() as! BarLineChartViewBase
    chart.autoScaleMinMaxEnabled = true // I've tried this as false //!chart.autoScaleMinMaxEnabled
    chart.chartDescription?.enabled = false
    chart.drawGridBackgroundEnabled = false
    chart.dragEnabled = true
    chart.setScaleEnabled(true) //I've tried setting this to false
    chart.pinchZoomEnabled = true
    chart.leftAxis.axisMinimum = getAxisMinimum()
    chart.leftAxis.axisMaximum = getAxisMaximum()

    chart.clipValuesToContentEnabled = false
    let xAxis = chart.xAxis
    xAxis.avoidFirstLastClippingEnabled = true
    xAxis.labelPosition = XAxis.LabelPosition.bottom
    chart.rightAxis.enabled = false
    xAxis.drawGridLinesEnabled = false
    xAxis.drawAxisLineEnabled = true
    xAxis.granularity = 1.0
    xAxis.labelFont = MyVariables.chartFont!
    //xAxis.axisMinimum = 0
    //xAxis.axisMaximum = 30

    //xAxis.setValuesForKeys(<#T##keyedValues: [String : Any]##[String : Any]#>)
    yAxis = chart.leftAxis
    yAxis.labelFont = MyVariables.chartFont!
    chart.rightAxis.enabled = false
    chart.legend.enabled = true
    yAxis.granularity = 1.0
    yAxis.drawGridLinesEnabled = false
    //var counter = 1.0
    var myEntries : [ChartDataEntry] = []

    var myXValues : [String] = []


    if !resultChoice.plotPoints.isEmpty
    {
        startDate = resultChoice.plotPoints[0].xValue
        for item in resultChoice.plotPoints
        {
            /*let timeString : String =
                {
                    let formatter = DateFormatter()
                    formatter.dateFormat = "h:mm a"
                    formatter.amSymbol = "AM"
                    formatter.pmSymbol = "PM"
                    return formatter.string(from: item.xValue)
            }()
            myXValues.append(timeString)*/
            /*if(item.showXValue)
             {
             myXValues.append(timeString)
             }
             else
             {
             myXValues.append("")
             }*/
            let myEntry = getChartDataEntry(xval: item.xValue.timeIntervalSince(startDate), yval: Double(item.yValue))
            getColors(value: myEntry.y)

            //counter += 1
            myEntries.append(myEntry)

        }
        let myFormatter = MyXAxisValueFormatter(_startDate: startDate)

        xAxis.valueFormatter = myFormatter
        setYAxisFormatter()
        createSet(myEntries: myEntries)

    }

}

这是我的条形图唯一的代码,以显示我设置了条形宽度:

override func createSet(myEntries: [ChartDataEntry])
{
    let chart = getChartObject() as! BarChartView
    let mySet = BarChartDataSet(values: myEntries, label: "Time Elapsing")
    mySet.colors = myColors
    mySet.valueColors = myColors
    mySet.valueFont = MyVariables.chartFont!
    setValueFormatter(set: mySet)

    let myBarChartData = BarChartData(dataSet: mySet)
    myBarChartData.barWidth = 0.8
    chart.data = myBarChartData
}

此外,我应该注意到,根据我的业务合作伙伴的说法,该软件的行为方式与我现在的行为方式相同。我不记得这一点,但他认为以前工作正常的事实让我觉得我必须改变导致问题的设置。此外,最近我从完全以编程方式添加图表到添加图表作为另一个视图的子视图,该视图是通过界面构建​​器添加的。我不认为这对这个问题很重要。此外,我的业务合作伙伴喜欢之前显示数据的原因可能不是因为任何设置更改。我最近更改了x轴,以便统一显示时间。这种变化是必要的,或者很难知道图表显示的事件何时发生。

1 个答案:

答案 0 :(得分:2)

我通过调用

解决了这个问题

chart.setVisibleXRangeMaximum(30)

设置数据后,并调用

chart.scaleYEnabled = false&amp; chart.scaleXEnabled = true

当我设置其他图表设置时。