[Swift] iOS Charts ValueFormatter 커스텀 하기

반응형

 

스위프트 Charts 라이브러리

 

iOS 개발을 하다보면 다음과 같은 차트 라이브러리를 많이 사용하게 됩니다. 차트 라이브러리를 사용하게 되면 그중에 ValueFormatter를 커스텀 해야 할 때가 있습니다. 텍스트의 크기나 라벨의 문구를 반복적으로 수정하는 일이 필요할 때 사용하며 때에 따라 알맞게 사용하면 됩니다. 

 

ValueFormatter


 

 

https://github.com/danielgindi/Charts/tree/master

 

GitHub - danielgindi/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart.

Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. - GitHub - danielgindi/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroi...

github.com


 

 

 

 해당 값을 수정하기 위해서 다음과 같이 ValueFormatter를 상속한 클래스를 하나 만들어 줍니다. fileprivate 로 numberFormatter를 선언하고 init 하는 시점에 초기화 해줍니다. stringForValue 함수에서 변환할 값을 받아 올 수 있는데 이때 반환할 값을 적절한 값으로 처리해주면 됩니다. 저 같은 경우는 값에 km/L 즉 리터당 키로수를 표기해야 했기 때문에 다음과 같이 처리 했습니다.


class ChartValueFormatter: NSObject, ValueFormatter {
    fileprivate var numberFormatter: NumberFormatter?

    convenience init(numberFormatter: NumberFormatter) {
        self.init()
        self.numberFormatter = numberFormatter
    }

    func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String {
        guard let numberFormatter = numberFormatter
            else {
                return ""
        }
        return "\(numberFormatter.string(for: value) ?? "")km/L"
    }
}


 

 

 

 

커스텀 ValueFormatter를 생성했다면 다음과 같이 numberFormatter를 우선 만들어 주고 ChartValueFormatter 생성시 전달해주고 dataSet 에 추가 해주면 됩니다.


let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = Locale.current
dataSet.valueFormatter = ChartValueFormatter(numberFormatter: numberFormatter)
dataSet.valueFont = dataSet.valueFont.withSize(15)

let chartData = BarChartData(dataSet: dataSet)
chartData.barWidth = 0.3


 

반응형

댓글

Designed by JB FACTORY