ChartsOrg / ChartsOrg/Charts

Scrolling animation not working

Open
#4,659 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Swift
Stars
28k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

Hello,

animations don't occur when scrolling a line chart on an iOS app.
Using instead MPAndroidChart library on an Android app I encounter no issues.

* [x] I've read, understood, and done my best to follow the [*CONTRIBUTING guidelines](https://github.com/jjatie/Charts/blob/master/CONTRIBUTING.md).

## What did you do?

1) Create subclass of LineChartView with a new notifyDataSetChangedNew method according to https://www.programmersought.com/article/33351889267/

`class CustomLineChartView: LineChartView {

func notifyDataSetChangedNew() {

guard let data = data else { return }

renderer?.initBuffers()

calcMinMax()

self.xAxis.axisRange = Double(xAxisWidth)

leftYAxisRenderer.computeAxis(min: leftAxis.axisMinimum, max: leftAxis.axisMaximum, inverted: leftAxis.isInverted)
rightYAxisRenderer.computeAxis(min: rightAxis.axisMinimum, max: rightAxis.axisMaximum, inverted: rightAxis.isInverted)
xAxisRenderer.computeAxis(min: xAxis.axisMinimum, max: xAxis.axisMaximum, inverted: false)

legendRenderer.computeLegend(data: data)

calculateOffsets()

setNeedsDisplay()
}
}`

2) Setup the cart view

`private func makeChartView() -> CustomLineChartView {

let dataSet = LineChartDataSet(entries: [])
dataSet.colors = [.systemBlue]
dataSet.drawCirclesEnabled = false
dataSet.drawValuesEnabled = false
dataSet.lineWidth = 1

let view = CustomLineChartView()
view.chartDescription.enabled = false
view.drawMarkers = false
view.legend.enabled = false

view.isUserInteractionEnabled = true
view.dragEnabled = true
view.dragXEnabled = true
view.dragYEnabled = true
view.setScaleEnabled(true)
view.pinchZoomEnabled = true

view.leftAxis.axisMaximum = yMaximumValue
view.leftAxis.axisMinimum = yMinimumValue
view.xAxis.axisMinimum = 0
view.xAxis.axisMaximum = xAxisWidth
view.rightAxis.drawLabelsEnabled = false
view.rightAxis.drawGridLinesEnabled = false
view.rightAxis.drawAxisLineEnabled = false

let data = LineChartData(dataSet: dataSet)
data.setValueTextColor(.systemBlue)
view.data = data

return view
}`

3) Add new values to chart at regular interval expecting it to automatically and smoothly scroll to show them

`private func fillChart(with entries: [Double]) {

guard let data = self.chartView.data,
let dataSet = data.dataSet(at: 0) else { return }

var count = dataSet.entryCount - 1
entries.forEach { entry in

count += 1
let x = Double(count) / Double(frequency)

data.appendEntry(ChartDataEntry(x: x, y: entry), toDataSet: .zero)
}

data.notifyDataChanged()
if dataSet.entryCount <= Int(xAxisWidth) * frequency {

self.chartView.notifyDataSetChangedNew()

} else {

self.chartView.notifyDataSetChanged()
}

self.chartView.setVisibleXRangeMaximum(xAxisWidth * Double(frequency))

if dataSet.entryCount > Int(xAxisWidth) * frequency {

let max = Double(dataSet.entryCount / frequency)
let min = Double(dataSet.entryCount / frequency) - xAxisWidth

self.chartView.moveViewToX(Double(data.entryCount))
self.chartView.xAxis.axisMaximum = max
self.chartView.xAxis.axisMinimum = min

} else {

self.chartView.moveViewToX(0)
}
}`

4) I tried using the moveViewToAnimated(...) method but the result is the same

## What did you expect to happen?

I expected the chart to smoothly scroll like in the attached "android.mp4" video

## What happened instead?

The chart doesn't scroll smoothly, it replaces values immediately without any animation like in the attached "ios.mp4" video

## Charts Environment

**Charts version/Branch/Commit Number:** 4.0.1/master/HEAD
**Xcode version:** 12.5
**Swift version:** 5
**Platform(s) running Charts:** iOS 14.5
**macOS version running Xcode:** 11.4

## Demo Project

I have attached a sample project
[archive.zip](https://github.com/danielgindi/Charts/files/6633003/archive.zip)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.