Charts: ************* Charts 3.0์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ********************

์— ๋งŒ๋“  2016๋…„ 09์›” 19์ผ  ยท  61์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: danielgindi/Charts

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Charts 3.0์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์งˆ๋ฌธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ฒƒ์ด ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ์— ๊ณง ๋ฆด๋ฆฌ์Šค๋  ๊ฒƒ์ด์ง€๋งŒ ์ง€๊ธˆ์€ ์—ฌ๊ธฐ์— ์ ์–ด ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


์ด๊ฒƒ์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์„ธ์š”.

์—…๋ฐ์ดํŠธ:

  • x-index es๊ฐ€ ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ๊ฐœ: x-๊ฐ’. ์ด์ œ ๊ฐ ํ•ญ๋ชฉ์—๋Š” x ๋ฐ y ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ด/๋ ˆ์ด๋” ์ฐจํŠธ์—๋Š” ๋” ์ด์ƒ X ์ธ๋ฑ์Šค ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ํ†ตํ•ฉ๋œ XAxis/YAxis ๊ธฐ๋Šฅ ๋ฐ ๊ฒฝํ—˜.
  • ์ถ•์— ๋Œ€ํ•œ ํ†ตํ•ฉ ํฌ๋งทํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค.
  • ๋” ์ด์ƒ NSNumberFormatter์—์„œ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” y ๊ฐ’์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ํฌ๋งทํ„ฐ๊ฐ€ ๋” ๋‚˜์€ ํ˜•์‹ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด dataSet ๋ฐ ๋ทฐํฌํŠธ ์ •๋ณด๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ด๋ผ์ดํŠธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์ฃผ์š” ๋ฆฌํŒฉํ† ๋ง.
  • ๋ฆฌํŒฉํ† ๋ง๋œ ๋งˆ์ปค ๋ฉ”์ปค๋‹ˆ์ฆ˜
  • ๋ฆฌํŒฉํ† ๋ง๋œ ๋ฒ”๋ก€ ์ž…๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜
  • ์ด์ œ ๊ฐ ๋ฐ์ดํ„ฐ ์„ธํŠธ๋Š” ๊ณ ์œ ํ•œ ๋ฒ”๋ก€ ํ˜•์‹/ํฌ๊ธฐ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋” ๋งŽ์€ ๋ฐ๋ชจ
  • ์ผ๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์–ด ObjC์—์„œ๋งŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค(Swift 2.2 objc(...) ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๋ฐ ์ฃผ์š” ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ๋ณ€๊ฒฝ).
  • FillFormatter ์—๋Š” ์ด์ œ FillFormatter.withblock(...) ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋ก ํ‘œํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ธฐ๋ณธ ํฌ๋งทํ„ฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
  • ๋” ์ด์ƒ saveToCameraRoll() . Xcode 8.0 ์ดํ›„ Apple Review์—์„œ "ํ”„๋ผ์ด๋ฒ„์‹œ" ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์œ„ํ•ด Info.plist ์— ์‚ฌ์ง„ ์•จ๋ฒ” ํ”„๋ผ์ด๋ฒ„์‹œ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šค์œ„ํ”„ํŠธ 3.0์œผ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ Swift 3.0์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • ๋งŽ์€ ์‚ฌ์†Œํ•œ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๊ฐœ์„ 

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ/์ด์ „ ๋ฐฉ๋ฒ•:

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ์„ธํŠธ ์ƒ์„ฑ์ž๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ x-์ธ๋ฑ์Šค ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํ•ญ๋ชฉ ์ƒ์„ฑ์ž๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. X์™€ Y๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ์›ํ˜• ๋ฐ ๋ฐฉ์‚ฌํ˜• ์ฐจํŠธ ํ•ญ๋ชฉ์— ์ž์ฒด ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Entry ํด๋ž˜์Šค๋ฅผ PieChartDataEntry / RadarChartDataEntry ๊ตํ™˜ํ•˜์‹ญ์‹œ์˜ค.
  • ์˜ค๋ž˜๋œ startAtZeroEnabled ํ˜ธ์ถœ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ํ˜ธ์ถœ์€ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. axisMinimum ๊ต์ฒดํ•˜์‹ญ์‹œ์˜ค.
  • ํฌ๋งทํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

    • chart.valueFormatter = formatter ๋ฅผ chart.valueFormatter = ChartDefaultValueFormatter(formatter: formatter) ๋˜๋Š” chart.valueFormatter = [[ChartDefaultValueFormatter alloc] initWithFormatter:formatter]; ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • axis.valueFormatter = formatter ๋ฅผ axis.valueFormatter = ChartDefaultAxisValueFormatter(formatter: formatter) ๋˜๋Š” axis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:formatter]; ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์ „์— x-์ธ๋ฑ์Šค๋ฅผ ํ—ˆ์šฉํ–ˆ๋˜ ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ์ด์ œ x-๊ฐ’์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ์ด๋ฆ„์„ ์•ฝ๊ฐ„ ์กฐ์ •ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ChartViewDelegate ๊ฐ€ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ chartValueSelected ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • drawSliceTextEnabled ๋ฅผ drawEntryLabelsEnabled ๋ฐ”๊พธ๊ธฐ
  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ถ„์‚ฐ ๋ชจ์–‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ IShapeRenderer ๊ตฌํ˜„ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋ Œ๋”๋ง ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ์‹ญ์‹œ์˜ค.
  • ๋งž์ถค ๋งˆ์ปค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ MarkerView / MarkerImage ์„œ๋ธŒํด๋ž˜์‹ฑํ•˜๊ฑฐ๋‚˜ IMarker ๊ตฌํ˜„์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ง€๊ธˆ๋ณด๋‹ค ๋” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค ...
  • ์ด์ „์— barSpace ๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด barWidth
  • saveToCameraRoll() ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ UIImageWriteToSavedPhotosAlbum(chart.getChartImage(trasparent: false), nil, nil, nil)
  • ์ผ๋ถ€ ํด๋ž˜์Šค๋Š” ๊น”๋”ํ•œ ๋ชจ์–‘์„ ์œ„ํ•ด ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋” ์ด์ƒ "์ฐจํŠธ" ์ ‘๋‘์‚ฌ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” Swift์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ObjC์—์„œ ์ด๋ฆ„์€ ์ด๋ฆ„ ๊ณต๊ฐ„์„ ์œ„ํ•ด ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์—ˆ์œผ๋ฉฐ Swift 2.2์˜ @objc(name) . ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์†Œ๋ฆฌ๋ฅผ ์ง€๋ฅด๋ฉด ํ•ด๋‹น ์ด๋ฆ„์—์„œ ์ฐจํŠธ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฑฐ์˜ ์ธ์Šคํ„ด์Šคํ™”ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋งŒ ์„ ํƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@Carielle CocoaPods ์™€ ํ˜ธํ™˜๋˜๊ธฐ ์ „์— Charts 3.0.0์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ํฌ๋“œ ํŒŒ์ผ๊ณผ ํ”„๋กœ์ ํŠธ์—์„œ ์ด์ „ ์ฐจํŠธ๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ์ด github ํŽ˜์ด์ง€์—์„œ Charts.xcodeproj ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ XCode์—์„œ ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๊ณ  ๋‹ค์šด๋กœ๋“œํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ Charts.xcodeproj ํŒŒ์ผ์„ XCode ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ”„๋กœ์ ํŠธ๋กœ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ์ผ๋ฐ˜ ์„ค์ •์˜ "์ž„๋ฒ ๋””๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ" ์„น์…˜์— Charts.framework๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  61 ๋Œ“๊ธ€

@danielgindi ์ง€์› cocoapods?

@danielgindi ์—ฌ์ „ํžˆ ์ด์ „์ฒ˜๋Ÿผ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„์ง Cocoapods์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ง์”€๋“œ๋ฆฐ๋Œ€๋กœ ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด์ „๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ xcodeproj ๋ฅผ ํ”„๋กœ์ ํŠธ๋กœ ๋“œ๋ž˜๊ทธํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ž์ฒด๋ฅผ ๋“œ๋ž˜๊ทธํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ Chrat ์—…๋ฐ์ดํŠธ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@danielgindi
์ข‹์€ ์ผ์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด์ œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. x-์ธ๋ฑ์Šค๊ฐ€ ์ฃฝ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

- x-indexes are dead. Intoducing: x-values. Each entry now has an x and a y.
- In general, all functions that accepted x-indices before, now accept an x-value,   
   so you might have to adjust the names a little bit.

๊ทธ๋ ‡๋‹ค๋ฉด float ์ˆซ์ž(์˜ˆ: 1.0, 2.0 ...)๊ฐ€ ์•„๋‹Œ xAxis์— ๋ฌธ์ž์—ด(์˜ˆ: ๋‚ ์งœ ๋ฌธ์ž์—ด)์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‹ค๋‹ˆ์—˜์˜ ๋‹ต๋ณ€:

๋‚ ์งœ์˜ NSTimeInterval์„ ๊ฐ€์ ธ์˜ค์‹ญ์‹œ์˜ค. NSTimeInterval์€ ์‹ค์ œ๋กœ ์ด์ค‘์ž…๋‹ˆ๋‹ค.

์ถœ์‹œ๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! ๐Ÿ‘

@danielgindi XCode 8.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ ์ดํ›„๋กœ ๋‚ด ํ”„๋กœ์ ํŠธ๋Š” cocoapods๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ Charts๊ฐ€ ์žˆ๊ณ  ์—ฌ์ „ํžˆ ๋ ˆ๊ฑฐ์‹œ ๋ฒ„์ „์˜ Swift๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Chart 3.0์˜ ์ถœ์‹œ๋ฅผ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ ๋™์•ˆ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ชจ๋“  ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ๋ฒ„์ „ ๋Œ€์‹  ๋งˆ์Šคํ„ฐ ๋ถ„๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก podfile์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

@petester42 ํŒ์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด podfile์„ pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master' ํ•˜๊ณ  ํฌ๋“œ ์„ค์น˜๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
snip20160919_3
๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์—ฌ์ „ํžˆ "๋ ˆ๊ฑฐ์‹œ Swift ์–ธ์–ด ๋ฒ„์ „ ์‚ฌ์šฉ" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
snip20160919_1

๋” ์œ ์šฉํ•œ ํžŒํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@Carielle CocoaPods ์™€ ํ˜ธํ™˜๋˜๊ธฐ ์ „์— Charts 3.0.0์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ํฌ๋“œ ํŒŒ์ผ๊ณผ ํ”„๋กœ์ ํŠธ์—์„œ ์ด์ „ ์ฐจํŠธ๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ์ด github ํŽ˜์ด์ง€์—์„œ Charts.xcodeproj ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ XCode์—์„œ ๋Œ€์ƒ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๊ณ  ๋‹ค์šด๋กœ๋“œํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ Charts.xcodeproj ํŒŒ์ผ์„ XCode ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ”„๋กœ์ ํŠธ๋กœ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ์ผ๋ฐ˜ ์„ค์ •์˜ "์ž„๋ฒ ๋””๋“œ ๋ฐ”์ด๋„ˆ๋ฆฌ" ์„น์…˜์— Charts.framework๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

@ALL ์€ ์‹ ์†ํ•œ 2.3 ๋ฐ 3.0 ๋ฌธ์ œ์— ๋Œ€ํ•ด #1291์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์„ค๋ช…์—์„œ ์˜ค๋ฅ˜ ์ง€์  ๏ผš
ํฌ๋งทํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

  • chart.valueFormatter = formatter๋ฅผ chart.valueFormatter = ChartDefaultValueFormatter(formatter: formatter) ๋˜๋Š” chart.valueFormatter = [[ChartDefaultValue Value Formatter alloc] initWith Formatter:formatter ]๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.
  • ๋ชจ๋“  axis.valueFormatter = formatter๋ฅผ axis.valueFormatter = ChartDefaultAxisValueFormatter(formatter: formatter) ๋˜๋Š” axis.valueFormatter = [[ChartDefaultAxisValue Value Formatter alloc] initWith Formatter:formatter ];

๋‚˜๋Š” @Carielle ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์–ป๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @HenryAlkire๊ฐ€ ๋งํ•œ ๊ฒƒ์„ ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

captura de tela 2016-09-20 as 09 38 38

์–ด๋–ค ์ง€์ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@rrecio ์•ˆ๋˜์š” .. ๋ฉฐ์น ์ „์— ๊ณ 

๋‚˜๋Š” ์ผ๋ฐ˜ cocoapod ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค: pod 'Charts'

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด @Henry๊ฐ€ ์„ค๋ช…ํ•œ ๋Œ€๋กœ

์—”๋น„์•„๋„ ๋‘ ๋ฉ”์šฐ ์•„์ดํฐ

Em 20 de set de 2016, ร s 21:59, Xuan [email protected] escreveu:

@rrecio ์•ˆ๋˜์š” .. ๋ฉฐ์น ์ „์— ๊ณ 

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์„ธ์š”.

์–ธ์ œ Cocoapods์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

Carthage๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Xcode 8.0 ๋ฐ Swift 3.0์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์ฐจํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๊นŒ?

"carthage update"๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ์ „ํžˆ Charts 2.3.0์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. My Cartfile์€ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์นดํŠธ ํŒŒ์ผ:

github "๋‹ค๋‹ˆ์—˜๊ธด๋””/์ฐจํŠธ"

๋ช…๋ น์ค„:

$์นด๋ฅดํƒ€๊ณ  ์—…๋ฐ์ดํŠธ
** ๋ณต์ œ ์ฐจํŠธ* * ๋ณต์ œ ๊ฒฐ๊ณผ
** ๋ณต์ œ ์˜์—ญ-์ฝ”์ฝ”์•„* * "v2.3.0"์—์„œ ์ฐจํŠธ ํ™•์ธ

@danielgindi
์ด ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ...ํŠนํžˆ ํ•˜์ด ์ฐจํŠธ์—์„œ:

1) ๋งˆ์ปค ๋ชจ์–‘์ด ๋‹ค๋ฅธ ์„  ๊ทธ๋ž˜ํ”„
https://github.com/danielgindi/Charts/issues/1405

2) x์ถ•์˜ ํŠน์ • ์œ„์น˜์— ์‚ฌ์šฉ์ž ์ •์˜ ๋ณด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ๊ฒฝ์ƒ‰ ์‚ฌ์šฉ์ž ์ •์˜๋Š” ์ฃผ์š” ๋ณด๊ธฐ์—์„œ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/danielgindi/Charts/issues/1416

Carthage๋Š” ์ตœ์‹  ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 3.0(์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์Œ)์„ ์›ํ•˜๋ฉด github "danielgindi/Charts" "master"

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๋‹ค์Œ Charts.xcodeproj ๋ฅผ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•œ ๋‹ค์Œ ์ผ๋ฐ˜ ํƒญ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์ •๋ฆฌ ๋ฐ ๋นŒ๋“œ ํ›„ ํฌํ•จ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์•„๋ž˜์— Charts.framework๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋“  ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์‹œ๋„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋Œ“๊ธ€์„ ๋‹ฌ์•„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. @petester42 @Huang-Libo

@HenryAlkire ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚ด podfile์—์„œ Charts๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋Œ์–ด๋‹ค ๋†“์€ ๋‹ค์Œ ํฌํ•จ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
dyld: Library not loaded: @rpath/libswiftCore.dylib Reason: image not found
Charts.framework/Charts์—์„œ ์ฐธ์กฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ”„๋กœ์ ํŠธ๋Š” Swift Charts ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Objective-C ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ Build Settings > Build Options > "Always Embed Swift Standard Libraries"๋กœ ์ด๋™ํ•˜์—ฌ YES๋กœ ์„ค์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” "ํฌํ•จ๋œ ์ฝ˜ํ…์ธ ์— Swift๊ฐ€ ํฌํ•จ๋จ" ํ”Œ๋ž˜๊ทธ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

@Carielle ๋˜ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/danielgindi/Charts/issues/1487

@danielgindi Charts 3์˜ Cocoa Pods ์ถœ์‹œ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ•œ ๋‹ฌ์ฒ˜๋Ÿผ 1-2์ฃผ ์ด์ƒ?

๋…ธ๋ ฅํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ์ง€๊ธˆ ๋ฐ”๋กœ ์ฐจํŠธ 3์„ cocoapods์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ตœ์ข…์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์•ˆ์ •์ ์ผ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@petester42 ํฌ๋“œ ์‚ฌ์–‘์— ์ข…์†์„ฑ์ด ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ํฌ๋“œ๋ฅผ Charts์— ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ Pod ํŒŒ์ผ์—์„œ์™€ ๊ฐ™์ด Pod ์‚ฌ์–‘์—์„œ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋‚˜ ๋ถ„๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ์—์„œ Podfile์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐฐํฌํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ง€๊ธˆ Swift 2.2์— ์ž ๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

Cocoapods๋กœ ์ฐจํŠธ 3์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์—…๋ฐ์ดํŠธ

์ €๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ Swift 2.2 ๋ฐ Xcode 7์—์„œ Swift 3.0 ๋ฐ Xcode 8.0์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @Carielle ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์— @petester42๊ฐ€ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด -- ์ฐจํŠธ 3์€ cocoapods์™€ ํ•จ๊ป˜ ์„ค์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ๊ฐ–๋„๋ก podfile ์ˆ˜์ •:

pod 'Charts', :git => 'https://github.com/danielgindi/Charts.git', :branch => 'master'

๋‚˜๋ฅผ ์œ„ํ•ด ๋‹ค์Œ์„ ์ด๋Œ์—ˆ์Šต๋‹ˆ๋‹ค (2016๋…„ 10์›” 1์ผ)

screen shot 2016-10-01 at 7 00 20 pm

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ตœ์ข… ๋ฒ„์ „์ด ์ถœ์‹œ๋  ๋•Œ๊นŒ์ง€ ์˜ˆ์ƒ๋˜๋Š” ๋Œ€๋กœ ์•„์ง ์ž‘์—… ์ค‘์ธ ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด plotView.xAxis.setLabelsToSkip(10) ๋Š” setLabelsToSkip ๋ฉ”์†Œ๋“œ๊ฐ€ ์ด์ œ ์ธ์‹๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ์ตœ์ข… ๋ฒ„์ „์ด ์ž‘์—…๋˜๋Š” ๋™์•ˆ ์ด๊ฒƒ์ด ์ž„์‹œ์ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ›Œ๋ฅญํ•œ ์ž‘์—…์— ๋Œ€ํ•ด @danielgindi ์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‚˜๋Š” ๋‚ด ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ฐฐ์šฐ๋ฉด์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฌธ์„œ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

iOS ์ฐจํŠธ๋ฅผ 3.0 ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์ „์—
RadarChartData = RadarChartData(xVals: dataPoints, dataSet:radarChartDataSet) ํ•˜์ž

๊ทธ๋Ÿฌ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„์—๋Š” RadarChartData์—์„œ xVals๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
RadarChartData = RadarChartData(dataSet:radarChartDataSet)

์ตœ์‹  ๋ฒ„์ „์—์„œ xVals๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์‹œ๋„ํ–ˆ๋‹ค
dataEntry = RadarChartDataEntry(๊ฐ’: Double(cleaningValue), ๋ฐ์ดํ„ฐ: "setTitle"์„ AnyObject๋กœ?)
๊ทธ๋Ÿฌ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋งŽ์€ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์กฐ์–ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@AnChiChang ๋‹˜ ์€ ์œ„์˜ ์ฃผ์˜์‚ฌํ•ญ์„ ์ž˜ ์ฝ์–ด

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ํ‹ฐ์ผ“ 1496์„ ํ†ตํ•ด ์ดํ•ด

v3.0์—์„œ x-๊ฐ’์„ ์ด์ค‘ ๋ฐฐ์—ด์—์„œ ๋ฌธ์ž์—ด ๋ฐฐ์—ด๋กœ ์–ด๋–ป๊ฒŒ ํฌ๋งทํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@bingozb ๋ฐ๋ชจ์ข€

Google

๋ณ€์ˆ˜ a: ๋”๋ธ” = 1.5
var b:๋ฌธ์ž์—ด = ๋ฌธ์ž์—ด(ํ˜•์‹:"%f", a)
print("b: (b)") // b: 1.500000

@danielgindi ๊บพ์€ ์„ ํ˜• ์ฐจํŠธ 1์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ๋ชจ๋ฅผ ๋ณด์•˜์ง€๋งŒ ์ด์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

NSMutableArray *๊ฐ’ = [[NSMutableArray ํ• ๋‹น] ์ดˆ๊ธฐํ™”];
[๊ฐ’ addObject:[[ChartDataEntry ํ• ๋‹น] initWithX:i y:val]];
LineChartDataSet *set1 = [[LineChartDataSet ํ• ๋‹น] initW ithValues:values ๋ ˆ์ด๋ธ”:@"xxx"];

๋ฐ๋ชจ์—์„œ๋Š” ๋‘ ๋ฐฐ์˜ x ๊ฐ’๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ChartDataEntry์—๋Š” ๋ฌธ์ž์—ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.
๊ธ€์Ž„, ๋‚˜๋Š” ๊ทธ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ date์˜ integerValues๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ํฌ๋งทํ•˜๊ณ  x ๋ ˆ์ด๋ธ”์— ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋„์™€์ฃผ์„ธ์š”, ์ œ๋ฐœ. x์ถ•์— ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @bingozb

X ๊ฐ’์ด ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ์ €์žฅ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ pls๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

NSMutableArray *xVals;

  • (NSString *)stringForValue:(์ด์ค‘)๊ฐ’
    ์ถ•:(ChartAxisBase *)์ถ•
    {
    if (xVals.count>0){
    ๋ฐ˜ํ™˜ xVals[(int)๊ฐ’ % xVals.count]; // ํ‘œ์‹œํ•˜๋ ค๋Š” ์ด ๊ณ„์‚ฐ ๊ธฐ๋ฐ˜.
    }
    ๋ฐ˜ํ™˜ ์—†์Œ;
    }

๋‚˜๋Š” ๋‹น์‹ ์ด ์ดํ•ดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@rs10693 ์˜ˆ, ์ด ํ”„๋กœํ† ์ฝœ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ฆฌ์ž๊ฐ€ IChartAxisValueFormatter ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์ด ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ ์–ด๋””์—์„œ ์ด ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@bingozb ์‚ฌ์šฉ ChartViewDelegate ๋ฐ IChartAxisValueFormatter์™€ ๋‚˜๋Š” ์ฐจํŠธ @import๋ฅผ ํฌ๋ง;

@rs10693 ์•„, valueFormatter์ž…๋‹ˆ๋‹ค ...

@bingozb ๋‚ด๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ๋ง์„ ํ•  ์ˆ˜

@danielgindi ์—ฌ์ „ํžˆ Charts 3.0.0์„ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

pod install ์‹คํ–‰ ์‹œ ๋‹ค์Œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
์ข…์†์„ฑ ๋ถ„์„
[!] ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • Charts (~> 3.0.0) ์— ํ•„์š”ํ•œ Podfile

์‚ฌ์–‘ ์†Œ์Šค ์ค‘ Charts (~> 3.0.0) ์ข…์†์„ฑ์„ ์ถฉ์กฑํ•˜๋Š” ์‚ฌ์–‘์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • pod repo update ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ž˜๋œ ์†Œ์Šค ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฆ„์ด๋‚˜ ๋ฒ„์ „์„ ์ž˜๋ชป ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Podspec์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์†Œ์Šค ์ €์žฅ์†Œ๋ฅผ Podfile์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : CocoaPods 1.0๋ถ€ํ„ฐ pod repo update ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ pod install ์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Charts 3.0.0์ด ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”.

๋˜๋Š” ๋‚ด๊ฐ€ ์–ด๋–ค ๋‹จ๊ณ„๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

3.0์€ ์•„์ง ์ตœ์ข… ๋ฒ„์ „์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— cocoapods์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. git repo ๋ฐ master๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์ง€๊ธˆ 3.0์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ 3.0.0 ์ด

์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ”์ฝ”์•„ ํฌ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ ์ถœ์‹œ๋œ 3.0.0์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ ์ €์žฅ์†Œ์ธ์ง€ ์•ฝ๊ฐ„ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.

์šฐํŠธ ๐ŸŽ‰

@danielgindi ํฌ๋“œ๋ฅผ ๋ฐ€์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ค๋žœ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ์‹œ๋„ํ–ˆ์ง€๋งŒ podspec์ด ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค ...

๋„ค ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ํ•  ์ˆ˜ ์žˆ์–ด์š”. Xcode 8/swift 3์—์„œ ์ž‘๋™ํ•˜๋ ค๋ฉด cocoapods 1.1์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@sun_ssssssss @ssssssssss
๋‚˜๋Š” ๊ฐ€์ง€๊ณ ์žˆ๋‹ค
pod --version = 1.1.0

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ pod install ๋ช…๋ น์€ ์ด์ „ ๋ฒ„์ „์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ข…์†์„ฑ ๋ถ„์„
์ข…์†์„ฑ ๋‹ค์šด๋กœ๋“œ
Installing Charts (2.3.0)

์•ˆ๋‚ดํ•ด์ฃผ์„ธ์š”

๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋™์•ˆ Swift 3.0์—์„œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-01-11 at 1 22 48 pm

์œ„์˜ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•œ ํ›„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-01-11 at 12 57 26 pm

Swift 3.0์—์„œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ?

let chartDataSet = BarChartDataSet(๊ฐ’: dataEntries, ๋ ˆ์ด๋ธ”: nil)
let chartData = BarChartData(dataSet: chartDataSet)

xVals์— ๋Œ€ํ•ด์„œ๋Š” stringForValue๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”. xVals์— ๋Œ€ํ•ด stringForValue๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋‚˜์š”?

์‹ ์†ํ•œ 3๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,
๋ฐฉ๊ธˆ 2์—์„œ 3์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ๋Š”๋ฐ(3.0.2 ์‚ฌ์šฉ ์ค‘) 2๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๊ฐ’์ด 0์ด๋ฉด ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ด๋™ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ด์ƒํ•˜๊ณ  ๋ฐ๋ชจ ์ƒ˜ํ”Œ์˜ ์ฝ”๋“œ๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒ๊ฐ?
  • 0 ๊ฐ’์„ ํ•จ๊ป˜ ์ˆจ๊ธฐ๊ณ  0๋ณด๋‹ค ํฐ ๊ฐ’๋งŒ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ž…๋ ฅํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

screen shot 2017-06-09 at 12 15 13 pm
screen shot 2017-06-09 at 12 13 47 pm

BarChartRenderer ํด๋ž˜์Šค์—์„œ
open override func drawValues์—์„œ(์ปจํ…์ŠคํŠธ: CGContext)
๋ผ์ธ 408 ์ถ”๊ฐ€
```
!dataSet.isStacked์ธ ๊ฒฝ์šฐ
{
0 ..< Int(ceil(Double(dataSet.entryCount) * animator.phaseX))
{
๊ฐ€๋“œ let e = dataSet.entryForIndex(j) as? BarChartDataEntry else { ๊ณ„์† }

                    let rect = buffer.rects[j]

                    let x = rect.origin.x + rect.size.width / 2.0

                    if !viewPortHandler.isInBoundsRight(x)
                    {
                        break
                    }
                    if !viewPortHandler.isInBoundsY(rect.origin.y)
                        || !viewPortHandler.isInBoundsLeft(x)
                    {
                        continue
                    }

                    let val = e.y
                    if val == 0                            <-----------this line
                    {                                           <-----------this line
                        continue                         <-----------this line
                    }                                          <-----------this line

```

์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
var drawValuesZeroEnabled: Bool { ์„ธํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ }

ํ‹ฐ์—๋ฆฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค :)

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ ์ด์ƒํ•œ ๊ฐ„๊ฒฉ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐฉ๊ธˆ ๊ฐ’์ด 0์ธ ๊ธฐ๋ณธ ๋ง‰๋Œ€ ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ๋ง‰๋Œ€์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์ด ๋‹ค๊ฐ€๊ฐ€๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ๋ชจ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ 0์—์„œ 0.9999 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜์ž๋งˆ์ž ํŒจ๋”ฉ์ด ์ƒ๊น๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    <strong i="11">@IBOutlet</strong> var barChartView: BarChartView!

 func viewDidLoad() {
        super.viewDidLoad()
         self.styleChart()
         self.configureChart()
    }

    internal func styleChart() {
        self.barChartView.xAxis.labelPosition = .bottom
        self.barChartView.xAxis.labelCount = 2
    }

    internal func configureChart() {

        var xValues = [String]()
        var entries: [ChartDataEntry] = Array()

         xValues.append("TEST 5")
         xValues.append("TEST 0")
         entries.append(BarChartDataEntry(x: Double(0), y: Double(5) ))
         entries.append(BarChartDataEntry(x: Double(1), y: Double(0) ))


        let dataSet = BarChartDataSet(values: entries, label: "")
        dataSet.drawIconsEnabled = false
        dataSet.drawValuesEnabled = true

        let formatter = NumberFormatter()
        formatter.numberStyle = NumberFormatter.Style.decimal
        dataSet.valueFormatter = DefaultValueFormatter(formatter: formatter)

        let barChartData = BarChartData(dataSet: dataSet)
        barChartData.barWidth = 0.2        
         self.barChartView.data = barChartData
    }

๊ฝค ์ง์„ค์  ์ธ.

๋ฒ„๊ทธ์ธ๊ฐ€์š”?

0 ๋ฌธ์ œ:
screen shot 2017-06-12 at 11 55 15 am

์•„๋‹ˆ์˜ค 0 :
screen shot 2017-06-12 at 12 21 20 pm

๋„์™€ ์ค˜์„œ ๊ณ ๋งˆ์›Œ ;)

์ฐจํŠธ์šฉ ์ด์ „ API์— ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์œผ๋ฉฐ(๋ช‡ ๋ฒˆ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ) 2.3์—์„œ 3.0.4๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด์ „ ๋ฌธ์„œ๋Š” ์ด์ „ ์ฝ”๋“œ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ:

[entrySet addObject:[[ChartDataEntry alloc] initWithValue: item.avgSpeed xIndex:index]];

์ด์ œ initWithValue: xIndex ๋ผ๋Š” ์ดˆ๊ธฐํ™”๊ฐ€ ์—†์ง€๋งŒ ๋Œ€์‹  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ดˆ๊ธฐํ™”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

initWithX: y: , ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด์ „ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์ƒˆ ์ดˆ๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘์ž…๋‹ˆ๋‹ค...

๋˜ํ•œ valuesObjc ๋ฐฐ์—ด์ด ์ด์ œ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

//myLineChartView is LineChartView
 NSDate* date = (NSDate*)[myLineChartView.xAxis.valuesObjc objectAtIndex:index];

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ ์–ด๋„ ์ด์ „ API ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค...

๊ทธ๋Ÿฐ ์ž๋ฃŒ๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๊ธฐ์กด/2.3 ๋ถ„๊ธฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ํ˜„์žฌ ๋ฒ„์ „๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ฐ๋ชจ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BarChartData.init(xVals: xVals, dataSets: dataSets)๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์ฒด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊บพ์€ ์„ ํ˜• ์ฐจํŠธ์˜ x ๊ฐ’์„ ๊ฐ€์šด๋ฐ๋กœ ์Šคํฌ๋กคํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰