์ฐ์ , ์ด IOS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ต์ฅํฉ๋๋ค! ๊ฐ์ฌ ํด์.
์๊ฐ ํ์(mn:ss)์ผ๋ก BarChart์ Y ๊ฐ์ ํ์ํด์ผ ํฉ๋๋ค.
IOS ๋ฌธ์์์ "ChartDefaultXAxisValueFormatter"๋ผ๋ ํด๋์ค๋ฅผ ๋ณด์์ง๋ง ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ์ผ์ ์ฑ์ทจํ ์ฌ๋์ด ์์ต๋๊น?
์๋ ์์ค
๋์ ๋ง๋ ์ฐจํธ ๋ณด๊ธฐ ์ปจํธ๋กค๋ฌ์ ์๋ฅผ ๋ณด์ จ์ต๋๊น? ๋๋ ๋น์ ์ด ํฌ๋งทํฐ๋ฅผ ํต๊ณผํ๋ ๊ณณ๊ณผ ๋น์ทํ๋ค๊ณ ์์ํฉ๋๊น?
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 1;
formatter.negativeSuffix = @" $";
formatter.positiveSuffix = @" $";
BarChartData *data = [[BarChartData alloc] initWithXVals:xVals dataSets:dataSets];
[data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]];
[data setValueFormatter:formatter];
_chartView.data = data;
@dxclancy๊ฐ ์ง์ ํ์ต๋๋ค. ์ง๊ธ์ ์ซ์ ํฌ๋งทํฐ์ด๋ฏ๋ก ์ซ์์ ๋ ์ง ํฌ๋งทํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ์๋ ์์ต๋๋ค.
์๋ ํ์ธ์,
๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ๋ถํํ๋ leftAxis.valueformatter๋ NSNumberFormatter๋ง ํ์ฉํฉ๋๋ค.
์ ์ํ ํ์ผ์์์ ๊ฐ์ด ChartDefaultXAxisValueFormatter๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ง๋ง ๊ตฌํํ ์ ์์ต๋๋ค.
ํ์ํ ๊ฒ์ ์ผ์ชฝ(Y) ์ถ์ ์๊ฐ ex = 1:02:58๋ก ํ์ํ๋ ๊ฒ์ ๋๋ค.
์๋ ์์ค
์๋ ํ์ธ์, ๋น์ ์ด ์ํ๋ ๊ฒ์ NSDateFormatter๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๊น?
๋๋ ์ด๊ฒ์ ์ ์์์ ๋ณธ๋ค:
๊ณต๊ฐ var valueFormatter: ChartXAxisValueFormatter?
๋ฐ๋ผ์ ํด๋์ค ์ค ํ๋์์ ํด๋น ํ๋กํ ์ฝ์ ๊ตฌํํด์ผ ํฉ๋๋ค.
<strong i="9">@interface</strong> MyChartViewController: < ChartXAxisValueFormatter>
๋๋
<strong i="13">@interface</strong> MyCustomFormatter: NSObject < ChartXAxisValueFormatter>
๋๋ ์ ์ ๋ฑ๊ฐ๋ฌผ.
๊ทธ๋ฌ๋ yVals๋ฅผ ํฌ๋งทํ๋ ค๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ฆ, NSNumberFormatter์๋ง ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ค๋ฅธ์ชฝ?
์ค์ ๋ก #742์์ ์ด์ ์ ์ฌํ ๋ฌธ์ ์ ๋ํด ๋ ผ์ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ @danielgindi ์ ์ ์ฅ์ ์ด๊ฒ์ด ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ๋๋ ๋น์ ์๊ฒ 3 ๊ฐ์ง ์ต์ ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ต์ํ์ง ์์ ํ๋ฅญํ ์ต์ ์ด ๋ง์ด ์๋ ์ด ๋ฉ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒ์ ์ ํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ช ํ ๊ฒ์ ๋์น๊ณ ์์ ์ ์์ต๋๋ค.
๊ทํ์ ์ ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ถ ํฌ๋งทํฐ๋ฅผ ํฌ๋งทํฐ๋ก ์ฎ๊ธฐ๋ ค๋ฉด ์ ์คํ๊ฒ ์๊ฐํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ซ์๋ผ๊ณ ์๊ฐํ๋ฉด ์ซ์ ํฌ๋งทํฐ๊ฐ ์ฌ์ฉํ ํฌ๋งทํฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ๊ณผ ๋ค๋ฅธ ๋ฌธ์์ด์ ํ์ํ๋ ค๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํฌ๋งทํฐ์ ์ถ์ฒ๋ ํ์คํ ์ซ์์ ๋๋ค.
์ค๋ฒ๋ผ์ด๋ ๋ฐฉ์์ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํ์ต๋๋ค!
๊ณ ๋ง์ ์๋ค์, ๋๋ ์ต๊ณ ์ผ :)
NSNumberFormatter
๋ ์ ๋ฌ๋๋ ๊ฐ์ด _ํญ์_ ์ซ์๋ผ๋ ์ฌ์ค ๋๋ฌธ์ NSFormatter
๋ณด๋ค ๋ ์ ํํฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก NSFormatter
๋ฅผ ์ฌ์ฉํ์ฌ ์ป๋ ๊ฒ์ ์์ต๋๋ค. ์ซ์๊ฐ ์๋ ์ถ๋ ฅ์ ์ํ๋ค๋ ์ฌ์ค์ ์
๋ ฅ์ด ์ซ์๋ผ๋ ์ฌ์ค์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ๋งค์ฐ ํน๋ณํ ๋ฐฉ์์ผ๋ก ํด๋น ์ซ์์ ํ์์ ์ง์ ํ๋ ค๊ณ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ฐ๊ณผ ํจ๊ป ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์์ฒด ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ก ๋์๊ฐ ๊ฒ์
๋๋ค( ChartYAxisValueFormatter
์ ๊ทผ ๋ฐฉ์).
์ด ๋ฌธ์ ๋ Y์ถ ๊ฐ ํฌ๋งทํฐ์ ๋ํ ํ๋กํ ์ฝ์ ๊ตฌํํ ๋๊น์ง ์ด๋ ค ์์ด์ผ ํฉ๋๋ค.
Charts 3.0(v3 ๋ถ๊ธฐ)์์ ๊ตฌํ๋จ
IAxisValueFormatter
์์ํ์ฌ ๋ฌ์ฑํ์ต๋๋ค.
import Foundation
import Charts
class YAxisValueFormatter: NSObject, IAxisValueFormatter {
let numFormatter: NumberFormatter
override init() {
numFormatter = NumberFormatter()
numFormatter.minimumFractionDigits = 1
numFormatter.maximumFractionDigits = 1
// if number is less than 1 add 0 before decimal
numFormatter.minimumIntegerDigits = 1 // how many digits do want before decimal
numFormatter.paddingPosition = .beforePrefix
numFormatter.paddingCharacter = "0"
}
/// Called when a value from an axis is formatted before being drawn.
///
/// For performance reasons, avoid excessive calculations and memory allocations inside this method.
///
/// - returns: The customized label that is drawn on the axis.
/// - parameter value: the value that is currently being drawn
/// - parameter axis: the axis that the value belongs to
///
public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return numFormatter.string(from: NSNumber(floatLiteral: value))!
}
}
YAxisValueFormatter ํด๋์ค๋ฅผ ์์ฑํ๊ณ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ํ leftAxis์ ํ ๋นํฉ๋๋ค.
// Number formatting of YAxis
chartView.leftAxis.valueFormatter = YAxisValueFormatter()
์์์ ์ค๋ช ํ ๋๋ก IAxisValueFormatter๋ฅผ ์์ํ๋ฉด ๋ด ProjectName-Swift.h ํ์ผ์ "'IChartAxisValueFormatter'๋ผ๋ ํ์ ๋๋ ํ๋กํ ์ฝ์ด ์์ต๋๋ค."๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
IAxisValueFormatter
์์ํ์ฌ ๋ฌ์ฑํ์ต๋๋ค.YAxisValueFormatter ํด๋์ค๋ฅผ ์์ฑํ๊ณ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ํ leftAxis์ ํ ๋นํฉ๋๋ค.