From d9d51bdc840c2fd9e033dfd0c449d581163565a4 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Wed, 22 Jan 2020 23:14:57 +0100 Subject: [PATCH] remove Carthage vendor folder; --- .gitignore | 2 +- .../Charts/.github/ISSUE_TEMPLATE.md | 33 - .../Charts/.github/PULL_REQUEST_TEMPLATE.md | 13 - Carthage/Checkouts/Charts/.gitignore | 75 - Carthage/Checkouts/Charts/.travis.yml | 25 - .../Charts/Assets/feature_graphic.png | Bin 28989 -> 0 bytes .../Charts/Assets/feature_graphic.psd | Bin 298724 -> 0 bytes Carthage/Checkouts/Charts/CHANGELOG.md | 3701 ----------------- Carthage/Checkouts/Charts/CONTRIBUTING.md | 49 - Carthage/Checkouts/Charts/Cartfile.private | 1 - Carthage/Checkouts/Charts/Cartfile.resolved | 1 - Carthage/Checkouts/Charts/Charts.podspec | 19 - .../Charts/Charts.xcodeproj/project.pbxproj | 1262 ------ .../xcshareddata/xcschemes/Charts.xcscheme | 88 - .../xcschemes/ChartsTests.xcscheme | 89 - .../contents.xcworkspacedata | 13 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../Charts/Charts.xcodeproj/project.pbxproj | 996 ----- .../xcshareddata/xcschemes/Charts.xcscheme | 103 - .../xcshareddata/xcschemes/ChartsTV.xcscheme | 80 - .../Charts/Charts/ChartsTV/ChartsTV.h | 19 - .../Charts/Charts/ChartsTV/Info.plist | 26 - .../Animation/ChartAnimationEasing.swift | 394 -- .../Classes/Animation/ChartAnimator.swift | 272 -- .../Charts/Classes/Charts/BarChartView.swift | 231 - .../Classes/Charts/BarLineChartViewBase.swift | 1739 -------- .../Classes/Charts/BubbleChartView.swift | 105 - .../Classes/Charts/CandleStickChartView.swift | 77 - .../Charts/Classes/Charts/ChartViewBase.swift | 945 ----- .../Classes/Charts/CombinedChartView.swift | 214 - .../Charts/HorizontalBarChartView.swift | 208 - .../Charts/Classes/Charts/LineChartView.swift | 106 - .../Charts/Classes/Charts/PieChartView.swift | 505 --- .../Charts/PieRadarChartViewBase.swift | 853 ---- .../Classes/Charts/RadarChartView.swift | 283 -- .../Classes/Charts/ScatterChartView.swift | 82 - .../Classes/Components/ChartAxisBase.swift | 106 - .../Components/ChartComponentBase.swift | 29 - .../Classes/Components/ChartLegend.swift | 462 -- .../Classes/Components/ChartLimitLine.swift | 84 - .../Classes/Components/ChartMarker.swift | 59 - .../Classes/Components/ChartXAxis.swift | 151 - .../Classes/Components/ChartYAxis.swift | 246 -- .../Charts/Classes/Data/BarChartData.swift | 58 - .../Classes/Data/BarChartDataEntry.swift | 166 - .../Charts/Classes/Data/BarChartDataSet.swift | 188 - .../BarLineScatterCandleBubbleChartData.swift | 32 - ...rLineScatterCandleBubbleChartDataSet.swift | 35 - .../Charts/Classes/Data/BubbleChartData.swift | 40 - .../Classes/Data/BubbleChartDataEntry.swift | 54 - .../Classes/Data/BubbleChartDataSet.swift | 125 - .../Charts/Classes/Data/CandleChartData.swift | 32 - .../Classes/Data/CandleChartDataEntry.swift | 91 - .../Classes/Data/CandleChartDataSet.swift | 133 - .../Charts/Classes/Data/ChartData.swift | 949 ----- .../Charts/Classes/Data/ChartDataEntry.swift | 131 - .../Charts/Classes/Data/ChartDataSet.swift | 550 --- .../Classes/Data/CombinedChartData.swift | 213 - .../Charts/Classes/Data/LineChartData.swift | 33 - .../Classes/Data/LineChartDataSet.swift | 119 - .../Classes/Data/LineRadarChartDataSet.swift | 66 - .../Data/LineScatterCandleChartDataSet.swift | 45 - .../Charts/Classes/Data/PieChartData.swift | 84 - .../Charts/Classes/Data/PieChartDataSet.swift | 73 - .../Charts/Classes/Data/RadarChartData.swift | 39 - .../Classes/Data/RadarChartDataSet.swift | 33 - .../Classes/Data/ScatterChartData.swift | 59 - .../Classes/Data/ScatterChartDataSet.swift | 43 - .../Filters/ChartDataApproximatorFilter.swift | 214 - .../Classes/Filters/ChartDataBaseFilter.swift | 28 - .../ChartDefaultXAxisValueFormatter.swift | 25 - .../Formatters/ChartFillFormatter.swift | 23 - .../Formatters/ChartXAxisValueFormatter.swift | 30 - .../Highlight/BarChartHighlighter.swift | 244 -- .../Classes/Highlight/ChartHighlight.swift | 141 - .../Classes/Highlight/ChartHighlighter.swift | 119 - .../Charts/Classes/Highlight/ChartRange.swift | 53 - .../Highlight/CombinedHighlighter.swift | 72 - .../HorizontalBarChartHighlighter.swift | 121 - .../Classes/Renderers/BarChartRenderer.swift | 589 --- .../Renderers/BubbleChartRenderer.swift | 306 -- .../Renderers/CandleStickChartRenderer.swift | 299 -- .../Renderers/ChartAxisRendererBase.swift | 56 - .../Renderers/ChartDataRendererBase.swift | 49 - .../Renderers/ChartLegendRenderer.swift | 426 -- .../Classes/Renderers/ChartRendererBase.swift | 64 - .../Renderers/ChartXAxisRenderer.swift | 339 -- .../ChartXAxisRendererBarChart.swift | 151 - ...ChartXAxisRendererHorizontalBarChart.swift | 307 -- .../ChartXAxisRendererRadarChart.swift | 74 - .../Renderers/ChartYAxisRenderer.swift | 409 -- ...ChartYAxisRendererHorizontalBarChart.swift | 304 -- .../ChartYAxisRendererRadarChart.swift | 244 -- .../Renderers/CombinedChartRenderer.swift | 424 -- .../HorizontalBarChartRenderer.swift | 470 --- .../Classes/Renderers/LineChartRenderer.swift | 628 --- .../LineScatterCandleRadarChartRenderer.swift | 50 - .../Classes/Renderers/PieChartRenderer.swift | 391 -- .../Renderers/RadarChartRenderer.swift | 294 -- .../Renderers/ScatterChartRenderer.swift | 299 -- .../Classes/Utils/ChartColorTemplates.swift | 74 - .../Classes/Utils/ChartSelectionDetail.swift | 113 - .../Classes/Utils/ChartTransformer.swift | 288 -- .../ChartTransformerHorizontalBarChart.swift | 34 - .../Charts/Classes/Utils/ChartUtils.swift | 230 - .../Classes/Utils/ChartViewPortHandler.swift | 460 -- .../Classes/Utils/UIGraphics+Extensions.swift | 21 - .../Charts/Charts/Supporting Files/Charts.h | 25 - .../Charts/Charts/Supporting Files/Info.plist | 26 - .../ChartsDemo-iOS.xcodeproj/project.pbxproj | 1119 ----- .../ChartsDemo-iOS/Objective-C/AppDelegate.h | 20 - .../ChartsDemo-iOS/Objective-C/AppDelegate.m | 56 - .../Components/BalloonMarker.swift | 209 - .../Components/RadarMarkerView.swift | 33 - .../Objective-C/Components/XYMarkerView.swift | 32 - .../Objective-C/DemoBaseViewController.h | 34 - .../Objective-C/DemoBaseViewController.m | 329 -- .../Objective-C/DemoListViewController.h | 18 - .../Objective-C/DemoListViewController.m | 227 - .../Demos/AnotherBarChartViewController.h | 18 - .../Demos/AnotherBarChartViewController.m | 149 - .../Demos/BarChartViewController.h | 18 - .../Demos/BarChartViewController.m | 200 - .../Demos/BubbleChartViewController.h | 18 - .../Demos/BubbleChartViewController.m | 173 - .../Demos/CandleStickChartViewController.h | 18 - .../Demos/CandleStickChartViewController.m | 174 - .../Demos/ColoredLineChartViewController.h | 18 - .../Demos/ColoredLineChartViewController.m | 114 - .../Demos/CombinedChartViewController.h | 18 - .../Demos/CombinedChartViewController.m | 324 -- .../Demos/CubicLineChartViewController.h | 18 - .../Demos/CubicLineChartViewController.m | 238 -- .../Demos/HalfPieChartViewController.h | 18 - .../Demos/HalfPieChartViewController.m | 202 - .../Demos/HorizontalBarChartViewController.h | 18 - .../Demos/HorizontalBarChartViewController.m | 178 - .../Demos/LineChart1ViewController.h | 18 - .../Demos/LineChart1ViewController.m | 279 -- .../Demos/LineChart2ViewController.h | 18 - .../Demos/LineChart2ViewController.m | 296 -- .../Demos/LineChartFilledViewController.h | 18 - .../Demos/LineChartFilledViewController.m | 178 - .../Demos/LineChartTimeViewController.h | 18 - .../Demos/LineChartTimeViewController.m | 244 -- .../Demos/MultipleBarChartViewController.h | 18 - .../Demos/MultipleBarChartViewController.m | 241 -- .../Demos/MultipleLinesChartViewController.h | 18 - .../Demos/MultipleLinesChartViewController.m | 206 - .../NegativeStackedBarChartViewController.h | 18 - .../NegativeStackedBarChartViewController.m | 195 - .../Demos/PieChartViewController.h | 18 - .../Demos/PieChartViewController.m | 217 - .../Demos/PiePolylineChartViewController.h | 13 - .../Demos/PiePolylineChartViewController.m | 205 - .../PositiveNegativeBarChartViewController.h | 18 - .../PositiveNegativeBarChartViewController.m | 194 - .../Demos/RadarChartViewController.h | 18 - .../Demos/RadarChartViewController.m | 274 -- .../Demos/ScatterChartViewController.h | 18 - .../Demos/ScatterChartViewController.m | 167 - .../Demos/SinusBarChartViewController.h | 18 - .../Demos/SinusBarChartViewController.m | 166 - .../Demos/StackedBarChartViewController.h | 18 - .../Demos/StackedBarChartViewController.m | 180 - .../Formatters/DateValueFormatter.h | 17 - .../Formatters/DateValueFormatter.m | 39 - .../Formatters/DayAxisValueFormatter.h | 14 - .../Formatters/DayAxisValueFormatter.m | 166 - .../Formatters/IntAxisValueFormatter.h | 12 - .../Formatters/IntAxisValueFormatter.m | 19 - .../Formatters/LargeValueFormatter.swift | 68 - .../AppIcon.appiconset/Contents.json | 60 - .../AppIcon.appiconset/Icon-29@2x.png | Bin 5677 -> 0 bytes .../AppIcon.appiconset/Icon-29@3x.png | Bin 10210 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 9266 -> 0 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 14343 -> 0 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 14343 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 27502 -> 0 bytes .../AppIcon.appiconset/iTunesArtwork@2x.png | Bin 263612 -> 0 bytes .../Resources/Images.xcassets/Contents.json | 6 - .../icon.imageset/Contents.json | 23 - .../Images.xcassets/icon.imageset/star-1.png | Bin 1221 -> 0 bytes .../Images.xcassets/icon.imageset/star-2.png | Bin 1221 -> 0 bytes .../Images.xcassets/icon.imageset/star.png | Bin 1221 -> 0 bytes .../Resources/Launch Screen.storyboard | 52 - .../Resources/markers/radar_marker@3x.png | Bin 9753 -> 0 bytes .../ChartsDemo-Bridging-Header.h | 4 - .../Supporting Files/Info.plist | 42 - .../ChartsDemo-iOS/Supporting Files/main.m | 19 - .../ChartsDemo-iOS/Swift/AppDelegate.swift | 56 - .../Swift/Components/BalloonMarker.swift | 209 - .../Swift/Components/RadarMarkerView.swift | 30 - .../Swift/Components/XYMarkerView.swift | 35 - .../Swift/DemoBaseViewController.swift | 366 -- .../Swift/DemoListViewController.swift | 131 - .../Demos/AnotherBarChartViewController.swift | 102 - .../Swift/Demos/BarChartViewController.swift | 157 - .../Demos/BubbleChartViewController.swift | 129 - .../CandleStickChartViewController.swift | 131 - .../ColoredLineChartViewController.swift | 79 - .../Demos/CombinedChartViewController.swift | 238 -- .../Demos/CubicLineChartViewController.swift | 157 - .../Demos/HalfPieChartViewController.swift | 144 - .../HorizontalBarChartViewController.swift | 126 - .../Demos/LineChart1ViewController.swift | 189 - .../Demos/LineChart2ViewController.swift | 202 - .../Demos/LineChartFilledViewController.swift | 119 - .../Demos/LineChartTimeViewController.swift | 163 - .../MultipleBarChartViewController.swift | 156 - .../MultipleLinesChartViewController.swift | 140 - ...egativeStackedBarChartViewController.swift | 134 - .../Swift/Demos/PieChartViewController.swift | 155 - .../PiePolylineChartViewController.swift | 147 - ...sitiveNegativeBarChartViewController.swift | 122 - .../Demos/RadarChartViewController.swift | 205 - .../Demos/ScatterChartViewController.swift | 126 - .../Demos/SinusBarChartViewController.swift | 110 - .../Demos/StackedBarChartViewController.swift | 127 - .../Swift/Formatters/DateValueFormatter.swift | 23 - .../Formatters/DayAxisValueFormatter.swift | 109 - .../Formatters/IntAxisValueFormatter.swift | 16 - .../Formatters/LargeValueFormatter.swift | 58 - .../XIBs/DemoListViewController.xib | 42 - .../Demos/AnotherBarChartViewController.xib | 101 - .../XIBs/Demos/BarChartViewController.xib | 101 - .../XIBs/Demos/BubbleChartViewController.xib | 101 - .../Demos/CandleStickChartViewController.xib | 101 - .../Demos/ColoredLineChartViewController.xib | 66 - .../Demos/CombinedChartViewController.xib | 57 - .../Demos/CubicLineChartViewController.xib | 101 - .../XIBs/Demos/HalfPieChartViewController.xib | 57 - .../HorizontalBarChartViewController.xib | 101 - .../XIBs/Demos/LineChart1ViewController.xib | 101 - .../XIBs/Demos/LineChart2ViewController.xib | 101 - .../Demos/LineChartFilledViewController.xib | 88 - .../Demos/LineChartTimeViewController.xib | 79 - .../Demos/MultipleBarChartViewController.xib | 100 - .../MultipleLinesChartViewController.xib | 101 - .../NegativeStackedBarChartViewController.xib | 57 - .../XIBs/Demos/PieChartViewController.xib | 101 - .../Demos/PiePolylineChartViewController.xib | 115 - ...PositiveNegativeBarChartViewController.xib | 57 - .../XIBs/Demos/RadarChartViewController.xib | 67 - .../XIBs/Demos/RealmDemosViewController.xib | 49 - .../XIBs/Demos/ScatterChartViewController.xib | 101 - .../Demos/SinusBarChartViewController.xib | 79 - .../Demos/StackedBarChartViewController.xib | 101 - .../ChartsDemo-iOS/XIBs/RadarMarkerView.xib | 53 - .../project.pbxproj | 428 -- .../ChartsDemo-macOS/AppDelegate.swift | 7 - .../AppIcon.appiconset/Contents.json | 58 - .../Base.lproj/Main.storyboard | 822 ---- .../Demos/BarDemoViewController.swift | 76 - .../Demos/LineDemoViewController.swift | 49 - .../Demos/PieDemoViewController.swift | 54 - .../Demos/RadarDemoViewController.swift | 47 - .../ChartsDemo-macOS/Info.plist | 32 - .../PlaygroundChart.playground/Contents.o | Bin 1060 -> 0 bytes .../BarChart.xcplaygroundpage/Contents.swift | 63 - .../Contents.swift | 82 - .../Contents.swift | 96 - .../Contents.swift | 150 - .../Contents.swift | 102 - .../LineChart.xcplaygroundpage/Contents.swift | 157 - .../Menu.xcplaygroundpage/Contents.swift | 40 - .../Resources/feature_graphic.png | Bin 28989 -> 0 bytes .../PieChart.xcplaygroundpage/Contents.swift | 57 - .../Contents.swift | 111 - .../Contents.swift | 104 - .../Contents.swift | 116 - .../contents.xcplayground | 16 - .../ChartsDemo.xcodeproj/project.pbxproj | 645 --- .../Charts/ChartsDemo/Classes/AppDelegate.h | 22 - .../Charts/ChartsDemo/Classes/AppDelegate.m | 58 - .../Classes/Components/BalloonMarker.swift | 109 - .../Components/MyCustomXValueFormatter.h | 14 - .../Components/MyCustomXValueFormatter.m | 36 - .../Classes/DemoBaseViewController.h | 26 - .../Classes/DemoBaseViewController.m | 183 - .../Classes/DemoListViewController.h | 20 - .../Classes/DemoListViewController.m | 194 - .../Classes/DemoListViewController.xib | 37 - .../Demos/AnotherBarChartViewController.h | 20 - .../Demos/AnotherBarChartViewController.m | 191 - .../Demos/AnotherBarChartViewController.xib | 91 - .../Classes/Demos/BarChartViewController.h | 20 - .../Classes/Demos/BarChartViewController.m | 220 - .../Classes/Demos/BarChartViewController.xib | 91 - .../Classes/Demos/BubbleChartViewController.h | 18 - .../Classes/Demos/BubbleChartViewController.m | 250 -- .../Demos/BubbleChartViewController.xib | 91 - .../Demos/CandleStickChartViewController.h | 20 - .../Demos/CandleStickChartViewController.m | 246 -- .../Demos/CandleStickChartViewController.xib | 91 - .../Demos/ColoredLineChartViewController.h | 20 - .../Demos/ColoredLineChartViewController.m | 119 - .../Demos/ColoredLineChartViewController.xib | 61 - .../Demos/CombinedChartViewController.h | 20 - .../Demos/CombinedChartViewController.m | 244 -- .../Demos/CombinedChartViewController.xib | 47 - .../Demos/CubicLineChartViewController.h | 20 - .../Demos/CubicLineChartViewController.m | 228 - .../Demos/CubicLineChartViewController.xib | 91 - .../Demos/HorizontalBarChartViewController.h | 20 - .../Demos/HorizontalBarChartViewController.m | 217 - .../HorizontalBarChartViewController.xib | 91 - .../Classes/Demos/LineChart1ViewController.h | 20 - .../Classes/Demos/LineChart1ViewController.m | 267 -- .../Demos/LineChart1ViewController.xib | 91 - .../Classes/Demos/LineChart2ViewController.h | 20 - .../Classes/Demos/LineChart2ViewController.m | 273 -- .../Demos/LineChart2ViewController.xib | 91 - .../Demos/MultipleBarChartViewController.h | 20 - .../Demos/MultipleBarChartViewController.m | 226 - .../Demos/MultipleBarChartViewController.xib | 91 - .../Demos/MultipleLinesChartViewController.h | 20 - .../Demos/MultipleLinesChartViewController.m | 229 - .../MultipleLinesChartViewController.xib | 91 - .../NegativeStackedBarChartViewController.h | 20 - .../NegativeStackedBarChartViewController.m | 204 - .../NegativeStackedBarChartViewController.xib | 47 - .../Classes/Demos/PieChartViewController.h | 20 - .../Classes/Demos/PieChartViewController.m | 218 - .../Classes/Demos/PieChartViewController.xib | 91 - .../Classes/Demos/RadarChartViewController.h | 20 - .../Classes/Demos/RadarChartViewController.m | 185 - .../Demos/RadarChartViewController.xib | 47 - .../Demos/ScatterChartViewController.h | 20 - .../Demos/ScatterChartViewController.m | 246 -- .../Demos/ScatterChartViewController.xib | 91 - .../Demos/SinusBarChartViewController.h | 20 - .../Demos/SinusBarChartViewController.m | 208 - .../Demos/SinusBarChartViewController.xib | 69 - .../Demos/StackedBarChartViewController.h | 20 - .../Demos/StackedBarChartViewController.m | 218 - .../Demos/StackedBarChartViewController.xib | 91 - .../AppIcon.appiconset/Contents.json | 44 - .../AppIcon.appiconset/Icon-29@2x.png | Bin 5677 -> 0 bytes .../AppIcon.appiconset/Icon-29@3x.png | Bin 10210 -> 0 bytes .../AppIcon.appiconset/Icon-40@2x.png | Bin 9266 -> 0 bytes .../AppIcon.appiconset/Icon-40@3x.png | Bin 14343 -> 0 bytes .../AppIcon.appiconset/Icon-60@2x.png | Bin 14343 -> 0 bytes .../AppIcon.appiconset/Icon-60@3x.png | Bin 27502 -> 0 bytes .../LaunchImage.launchimage/Contents.json | 43 - .../Default-568h@2x.png | Bin 16567 -> 0 bytes .../Default-667h@2x.png | Bin 22355 -> 0 bytes .../Default-736h@3x.png | Bin 55285 -> 0 bytes .../LaunchImage.launchimage/Default@2x.png | Bin 14035 -> 0 bytes .../Resources/app-icon/Icon-29@2x.png | Bin 5677 -> 0 bytes .../Resources/app-icon/Icon-29@3x.png | Bin 10210 -> 0 bytes .../Resources/app-icon/Icon-40@2x.png | Bin 9266 -> 0 bytes .../Resources/app-icon/Icon-40@3x.png | Bin 14343 -> 0 bytes .../Resources/app-icon/Icon-60@2x.png | Bin 14343 -> 0 bytes .../Resources/app-icon/Icon-60@3x.png | Bin 27502 -> 0 bytes .../Resources/app-icon/iTunesArtwork | Bin 127259 -> 0 bytes .../Resources/app-icon/iTunesArtwork@2x | Bin 333159 -> 0 bytes .../launch-image/Default-568h@2x.png | Bin 16567 -> 0 bytes .../launch-image/Default-667h@2x.png | Bin 22355 -> 0 bytes .../launch-image/Default-736h@3x.png | Bin 55285 -> 0 bytes .../Resources/launch-image/Default@2x.png | Bin 14035 -> 0 bytes .../ChartsDemo-Bridging-Header.h | 4 - .../ChartsDemo/Supporting Files/Info.plist | 36 - .../Charts/ChartsDemo/Supporting Files/main.m | 22 - Carthage/Checkouts/Charts/Gemfile | 6 - Carthage/Checkouts/Charts/Gemfile.lock | 107 - Carthage/Checkouts/Charts/LICENSE | 202 - Carthage/Checkouts/Charts/Package.swift | 21 - Carthage/Checkouts/Charts/README.md | 213 - Carthage/Checkouts/Charts/Rakefile | 182 - .../Source/Charts/Animation/Animator.swift | 281 -- .../Animation/ChartAnimationEasing.swift | 394 -- .../Source/Charts/Charts/BarChartView.swift | 186 - .../Charts/Charts/BarLineChartViewBase.swift | 1966 --------- .../Charts/Charts/BubbleChartView.swift | 27 - .../Charts/Charts/CandleStickChartView.swift | 34 - .../Source/Charts/Charts/ChartViewBase.swift | 1042 ----- .../Charts/Charts/CombinedChartView.swift | 246 -- .../Charts/HorizontalBarChartView.swift | 270 -- .../Source/Charts/Charts/LineChartView.swift | 28 - .../Source/Charts/Charts/PieChartView.swift | 607 --- .../Charts/Charts/PieRadarChartViewBase.swift | 843 ---- .../Source/Charts/Charts/RadarChartView.swift | 220 - .../Charts/Charts/ScatterChartView.swift | 31 - .../Source/Charts/Components/AxisBase.swift | 359 -- .../Charts/Components/ChartLimitLine.swift | 74 - .../Charts/Components/ComponentBase.swift | 37 - .../Charts/Components/Description.swift | 54 - .../Source/Charts/Components/IMarker.swift | 39 - .../Source/Charts/Components/Legend.swift | 420 -- .../Charts/Components/LegendEntry.swift | 88 - .../Charts/Components/MarkerImage.swift | 106 - .../Source/Charts/Components/MarkerView.swift | 100 - .../Source/Charts/Components/XAxis.swift | 75 - .../Source/Charts/Components/YAxis.swift | 206 - .../Implementations/ChartBaseDataSet.swift | 435 -- .../Standard/BarChartData.swift | 107 - .../Standard/BarChartDataEntry.swift | 230 - .../Standard/BarChartDataSet.swift | 167 - .../BarLineScatterCandleBubbleChartData.swift | 25 - ...rLineScatterCandleBubbleChartDataSet.swift | 38 - .../Standard/BubbleChartData.swift | 32 - .../Standard/BubbleChartDataEntry.swift | 79 - .../Standard/BubbleChartDataSet.swift | 58 - .../Standard/CandleChartData.swift | 25 - .../Standard/CandleChartDataEntry.swift | 98 - .../Standard/CandleChartDataSet.swift | 136 - .../Implementations/Standard/ChartData.swift | 612 --- .../Standard/ChartDataEntry.swift | 110 - .../Standard/ChartDataEntryBase.swift | 96 - .../Standard/ChartDataSet.swift | 574 --- .../Standard/CombinedChartData.swift | 301 -- .../Standard/LineChartData.swift | 26 - .../Standard/LineChartDataSet.swift | 173 - .../Standard/LineRadarChartDataSet.swift | 85 - .../LineScatterCandleRadarChartDataSet.swift | 51 - .../Standard/PieChartData.swift | 124 - .../Standard/PieChartDataEntry.swift | 119 - .../Standard/PieChartDataSet.swift | 135 - .../Standard/RadarChartData.swift | 46 - .../Standard/RadarChartDataEntry.swift | 54 - .../Standard/RadarChartDataSet.swift | 59 - .../Standard/ScatterChartData.swift | 34 - .../Standard/ScatterChartDataSet.swift | 78 - .../Data/Interfaces/IBarChartDataSet.swift | 42 - ...rLineScatterCandleBubbleChartDataSet.swift | 26 - .../Data/Interfaces/IBubbleChartDataSet.swift | 27 - .../Data/Interfaces/ICandleChartDataSet.swift | 66 - .../Data/Interfaces/IChartDataSet.swift | 270 -- .../Data/Interfaces/ILineChartDataSet.swift | 80 - .../Interfaces/ILineRadarChartDataSet.swift | 45 - .../ILineScatterCandleRadarChartDataSet.swift | 36 - .../Data/Interfaces/IPieChartDataSet.swift | 64 - .../Data/Interfaces/IRadarChartDataSet.swift | 40 - .../Interfaces/IScatterChartDataSet.swift | 36 - .../Charts/Filters/DataApproximator+N.swift | 153 - .../Charts/Filters/DataApproximator.swift | 115 - .../DefaultAxisValueFormatter.swift | 100 - .../Formatters/DefaultFillFormatter.swift | 58 - .../Formatters/DefaultValueFormatter.swift | 103 - .../Formatters/IAxisValueFormatter.swift | 30 - .../Charts/Formatters/IFillFormatter.swift | 21 - .../Charts/Formatters/IValueFormatter.swift | 36 - .../Formatters/IndexAxisValueFormatter.swift | 59 - .../Charts/Highlight/BarHighlighter.swift | 108 - .../Charts/Highlight/ChartHighlighter.swift | 180 - .../Highlight/CombinedHighlighter.swift | 70 - .../Source/Charts/Highlight/Highlight.swift | 203 - .../Highlight/HorizontalBarHighlighter.swift | 63 - .../Charts/Highlight/IHighlighter.swift | 23 - .../Charts/Highlight/PieHighlighter.swift | 27 - .../Highlight/PieRadarHighlighter.swift | 61 - .../Charts/Highlight/RadarHighlighter.swift | 78 - .../Source/Charts/Highlight/Range.swift | 52 - .../Interfaces/BarChartDataProvider.swift | 23 - ...ScatterCandleBubbleChartDataProvider.swift | 23 - .../Interfaces/BubbleChartDataProvider.swift | 19 - .../Interfaces/CandleChartDataProvider.swift | 19 - .../Charts/Interfaces/ChartDataProvider.swift | 39 - .../CombinedChartDataProvider.swift | 19 - .../Interfaces/LineChartDataProvider.swift | 21 - .../Interfaces/ScatterChartDataProvider.swift | 19 - .../Charts/Jobs/AnimatedMoveViewJob.swift | 33 - .../Charts/Jobs/AnimatedViewPortJob.swift | 127 - .../Charts/Jobs/AnimatedZoomViewJob.swift | 96 - .../Source/Charts/Jobs/MoveViewJob.swift | 34 - .../Source/Charts/Jobs/ViewPortJob.swift | 46 - .../Source/Charts/Jobs/ZoomViewJob.swift | 71 - .../Charts/Renderers/AxisRendererBase.swift | 218 - .../Charts/Renderers/BarChartRenderer.swift | 904 ---- .../BarLineScatterCandleBubbleRenderer.swift | 127 - .../Renderers/BubbleChartRenderer.swift | 359 -- .../Renderers/CandleStickChartRenderer.swift | 420 -- .../Renderers/ChartDataRendererBase.swift | 102 - .../Renderers/CombinedChartRenderer.swift | 209 - .../HorizontalBarChartRenderer.swift | 632 --- .../Charts/Renderers/LegendRenderer.swift | 575 --- .../Charts/Renderers/LineChartRenderer.swift | 785 ---- .../Charts/Renderers/LineRadarRenderer.swift | 54 - .../LineScatterCandleRadarRenderer.swift | 49 - .../Charts/Renderers/PieChartRenderer.swift | 934 ----- .../Charts/Renderers/RadarChartRenderer.swift | 475 --- .../Source/Charts/Renderers/Renderer.swift | 26 - .../Scatter/ChevronDownShapeRenderer.swift | 36 - .../Scatter/ChevronUpShapeRenderer.swift | 36 - .../Scatter/CircleShapeRenderer.swift | 63 - .../Scatter/CrossShapeRenderer.swift | 36 - .../Renderers/Scatter/IShapeRenderer.swift | 32 - .../Scatter/SquareShapeRenderer.swift | 63 - .../Scatter/TriangleShapeRenderer.swift | 66 - .../Renderers/Scatter/XShapeRenderer.swift | 36 - .../Renderers/ScatterChartRenderer.swift | 249 -- .../Charts/Renderers/XAxisRenderer.swift | 448 -- .../XAxisRendererHorizontalBarChart.swift | 356 -- .../Renderers/XAxisRendererRadarChart.swift | 91 - .../Charts/Renderers/YAxisRenderer.swift | 394 -- .../YAxisRendererHorizontalBarChart.swift | 363 -- .../Renderers/YAxisRendererRadarChart.swift | 281 -- .../Charts/Utils/ChartColorTemplates.swift | 198 - .../Source/Charts/Utils/ChartUtils.swift | 304 -- .../Charts/Source/Charts/Utils/Fill.swift | 323 -- .../Charts/Utils/Platform+Accessibility.swift | 204 - .../Charts/Source/Charts/Utils/Platform.swift | 631 --- .../Source/Charts/Utils/Transformer.swift | 170 - .../Utils/TransformerHorizontalBarChart.swift | 32 - .../Source/Charts/Utils/ViewPortHandler.swift | 610 --- .../Charts/Source/Supporting Files/Charts.h | 28 - .../Charts/Source/Supporting Files/Info.plist | 26 - .../Charts/Tests/Charts/BarChartTests.swift | 416 -- .../Charts/Tests/Charts/ChartUtilsTests.swift | 75 - .../Tests/Charts/CombinedChartTests.swift | 104 - .../Charts/Tests/Charts/EquatableTests.swift | 45 - .../Charts/HorizontalBarChartTests.swift | 147 - .../Charts/Tests/Charts/LineChartTests.swift | 81 - .../Charts/Tests/Charts/PieChartTests.swift | 87 - .../Charts/Tests/Charts/Snapshot.swift | 29 - ...ultBarDataSetLabels_iOS_375_0_667_0@2x.png | Bin 52832 -> 0 bytes ...BarDataSetLabels_tvOS_1920_0_1080_0@1x.png | Bin 19885 -> 0 bytes .../testDefaultValues_iOS_375_0_667_0@2x.png | Bin 54109 -> 0 bytes ...estDefaultValues_tvOS_1920_0_1080_0@1x.png | Bin 20369 -> 0 bytes .../testDrawIcons_iOS_375_0_667_0@2x.png | Bin 95840 -> 0 bytes .../testDrawIcons_tvOS_1920_0_1080_0@1x.png | Bin 54034 -> 0 bytes ...HorizontalGridlines_iOS_375_0_667_0@2x.png | Bin 52289 -> 0 bytes ...izontalGridlines_tvOS_1920_0_1080_0@1x.png | Bin 19355 -> 0 bytes .../testHideLeftAxis_iOS_375_0_667_0@2x.png | Bin 53528 -> 0 bytes ...testHideLeftAxis_tvOS_1920_0_1080_0@1x.png | Bin 19227 -> 0 bytes .../testHideRightAxis_iOS_375_0_667_0@2x.png | Bin 51835 -> 0 bytes ...estHideRightAxis_tvOS_1920_0_1080_0@1x.png | Bin 19292 -> 0 bytes ...deVerticalGridlines_iOS_375_0_667_0@2x.png | Bin 48288 -> 0 bytes ...erticalGridlines_tvOS_1920_0_1080_0@1x.png | Bin 18102 -> 0 bytes .../testHidesValues_iOS_375_0_667_0@2x.png | Bin 45932 -> 0 bytes .../testHidesValues_tvOS_1920_0_1080_0@1x.png | Bin 17190 -> 0 bytes ...sWithNegativeValues_iOS_375_0_667_0@2x.png | Bin 61218 -> 0 bytes ...thNegativeValues_tvOS_1920_0_1080_0@1x.png | Bin 22661 -> 0 bytes ...sWithPositiveValues_iOS_375_0_667_0@2x.png | Bin 61627 -> 0 bytes ...thPositiveValues_tvOS_1920_0_1080_0@1x.png | Bin 22202 -> 0 bytes ...estInvertedLeftAxis_iOS_375_0_667_0@2x.png | Bin 57251 -> 0 bytes ...InvertedLeftAxis_tvOS_1920_0_1080_0@1x.png | Bin 21962 -> 0 bytes ...sWithNegativeValues_iOS_375_0_667_0@2x.png | Bin 61282 -> 0 bytes ...thNegativeValues_tvOS_1920_0_1080_0@1x.png | Bin 22451 -> 0 bytes ...sWithPositiveValues_iOS_375_0_667_0@2x.png | Bin 61381 -> 0 bytes ...thPositiveValues_tvOS_1920_0_1080_0@1x.png | Bin 22247 -> 0 bytes ...stInvertedRightAxis_iOS_375_0_667_0@2x.png | Bin 57223 -> 0 bytes ...nvertedRightAxis_tvOS_1920_0_1080_0@1x.png | Bin 21844 -> 0 bytes ...hCustomAxisMaximum2_iOS_375_0_667_0@2x.png | Bin 44906 -> 0 bytes ...stomAxisMaximum2_tvOS_1920_0_1080_0@1x.png | Bin 13974 -> 0 bytes ...ndCustomAxisMaximum_iOS_375_0_667_0@2x.png | Bin 61298 -> 0 bytes ...ustomAxisMaximum_tvOS_1920_0_1080_0@1x.png | Bin 20544 -> 0 bytes ...thCustomAxisMaximum_iOS_375_0_667_0@2x.png | Bin 63314 -> 0 bytes ...ustomAxisMaximum_tvOS_1920_0_1080_0@1x.png | Bin 23070 -> 0 bytes ...hCustomAxisMinimum2_iOS_375_0_667_0@2x.png | Bin 47752 -> 0 bytes ...stomAxisMinimum2_tvOS_1920_0_1080_0@1x.png | Bin 13815 -> 0 bytes ...thCustomAxisMinimum_iOS_375_0_667_0@2x.png | Bin 60943 -> 0 bytes ...ustomAxisMinimum_tvOS_1920_0_1080_0@1x.png | Bin 21054 -> 0 bytes .../testNegativeValues_iOS_375_0_667_0@2x.png | Bin 59530 -> 0 bytes ...stNegativeValues_tvOS_1920_0_1080_0@1x.png | Bin 21555 -> 0 bytes ...tDrawValueAboveBars_iOS_375_0_667_0@2x.png | Bin 59616 -> 0 bytes ...awValueAboveBars_tvOS_1920_0_1080_0@1x.png | Bin 21998 -> 0 bytes ...hCustomAxisMaximum2_iOS_375_0_667_0@2x.png | Bin 41908 -> 0 bytes ...stomAxisMaximum2_tvOS_1920_0_1080_0@1x.png | Bin 15691 -> 0 bytes ...ndCustomAxisMaximum_iOS_375_0_667_0@2x.png | Bin 61069 -> 0 bytes ...ustomAxisMaximum_tvOS_1920_0_1080_0@1x.png | Bin 21521 -> 0 bytes ...thCustomAxisMaximum_iOS_375_0_667_0@2x.png | Bin 63113 -> 0 bytes ...ustomAxisMaximum_tvOS_1920_0_1080_0@1x.png | Bin 21805 -> 0 bytes ...hCustomAxisMinimum2_iOS_375_0_667_0@2x.png | Bin 48263 -> 0 bytes ...stomAxisMinimum2_tvOS_1920_0_1080_0@1x.png | Bin 15712 -> 0 bytes ...thCustomAxisMinimum_iOS_375_0_667_0@2x.png | Bin 60045 -> 0 bytes ...ustomAxisMinimum_tvOS_1920_0_1080_0@1x.png | Bin 20128 -> 0 bytes .../testPositiveValues_iOS_375_0_667_0@2x.png | Bin 60267 -> 0 bytes ...stPositiveValues_tvOS_1920_0_1080_0@1x.png | Bin 21065 -> 0 bytes ...stStackedDrawValues_iOS_375_0_667_0@2x.png | Bin 56909 -> 0 bytes ...tackedDrawValues_tvOS_1920_0_1080_0@1x.png | Bin 19827 -> 0 bytes ...DrawValuesAboveBars_iOS_375_0_667_0@2x.png | Bin 57676 -> 0 bytes ...wValuesAboveBars_tvOS_1920_0_1080_0@1x.png | Bin 20007 -> 0 bytes ...tackedNotDrawValues_iOS_375_0_667_0@2x.png | Bin 46579 -> 0 bytes ...kedNotDrawValues_tvOS_1920_0_1080_0@1x.png | Bin 15139 -> 0 bytes .../testZeroValues_iOS_375_0_667_0@2x.png | Bin 49896 -> 0 bytes .../testZeroValues_tvOS_1920_0_1080_0@1x.png | Bin 16903 -> 0 bytes ...RightAxisDependency_iOS_375_0_667_0@2x.png | Bin 102056 -> 0 bytes ...htAxisDependency_tvOS_1920_0_1080_0@1x.png | Bin 37281 -> 0 bytes ...faultAxisDependency_iOS_375_0_667_0@2x.png | Bin 102056 -> 0 bytes ...ltAxisDependency_tvOS_1920_0_1080_0@1x.png | Bin 37281 -> 0 bytes ...RightAxisDependency_iOS_375_0_667_0@2x.png | Bin 100515 -> 0 bytes ...htAxisDependency_tvOS_1920_0_1080_0@1x.png | Bin 37798 -> 0 bytes .../testDefaultValues_iOS_375_0_667_0@2x.png | Bin 48506 -> 0 bytes ...estDefaultValues_tvOS_1920_0_1080_0@1x.png | Bin 18844 -> 0 bytes .../testHidesValues_iOS_375_0_667_0@2x.png | Bin 39744 -> 0 bytes .../testHidesValues_tvOS_1920_0_1080_0@1x.png | Bin 15454 -> 0 bytes ...tDrawValueAboveBars_iOS_375_0_667_0@2x.png | Bin 53487 -> 0 bytes ...awValueAboveBars_tvOS_1920_0_1080_0@1x.png | Bin 20321 -> 0 bytes ...stStackedDrawValues_iOS_375_0_667_0@2x.png | Bin 51115 -> 0 bytes ...tackedDrawValues_tvOS_1920_0_1080_0@1x.png | Bin 19348 -> 0 bytes ...DrawValuesAboveBars_iOS_375_0_667_0@2x.png | Bin 51375 -> 0 bytes ...wValuesAboveBars_tvOS_1920_0_1080_0@1x.png | Bin 19694 -> 0 bytes ...tackedNotDrawValues_iOS_375_0_667_0@2x.png | Bin 39050 -> 0 bytes ...kedNotDrawValues_tvOS_1920_0_1080_0@1x.png | Bin 14433 -> 0 bytes .../testDefaultValues_iOS_375_0_667_0@2x.png | Bin 116445 -> 0 bytes ...estDefaultValues_tvOS_1920_0_1080_0@1x.png | Bin 44691 -> 0 bytes ...oesntDrawCircleHole_iOS_375_0_667_0@2x.png | Bin 109298 -> 0 bytes ...ntDrawCircleHole_tvOS_1920_0_1080_0@1x.png | Bin 41660 -> 0 bytes ...stDoesntDrawCircles_iOS_375_0_667_0@2x.png | Bin 102909 -> 0 bytes ...oesntDrawCircles_tvOS_1920_0_1080_0@1x.png | Bin 37712 -> 0 bytes .../testDrawIcons_iOS_375_0_667_0@2x.png | Bin 150775 -> 0 bytes .../testDrawIcons_tvOS_1920_0_1080_0@1x.png | Bin 72977 -> 0 bytes .../testHidesValues_iOS_375_0_667_0@2x.png | Bin 109667 -> 0 bytes .../testHidesValues_tvOS_1920_0_1080_0@1x.png | Bin 41849 -> 0 bytes .../testIsCubic_iOS_375_0_667_0@2x.png | Bin 118289 -> 0 bytes .../testIsCubic_tvOS_1920_0_1080_0@1x.png | Bin 45558 -> 0 bytes .../testDefaultValues_iOS_375_0_667_0@2x.png | Bin 56198 -> 0 bytes ...estDefaultValues_tvOS_1920_0_1080_0@1x.png | Bin 22759 -> 0 bytes .../testDrawIcons_iOS_375_0_667_0@2x.png | Bin 65967 -> 0 bytes .../testDrawIcons_tvOS_1920_0_1080_0@1x.png | Bin 30811 -> 0 bytes ...testHideCenterLabel_iOS_375_0_667_0@2x.png | Bin 53179 -> 0 bytes ...tHideCenterLabel_tvOS_1920_0_1080_0@1x.png | Bin 21352 -> 0 bytes .../testHidesValues_iOS_375_0_667_0@2x.png | Bin 48805 -> 0 bytes .../testHidesValues_tvOS_1920_0_1080_0@1x.png | Bin 19861 -> 0 bytes ...stHighlightDisabled_iOS_375_0_667_0@2x.png | Bin 56159 -> 0 bytes ...ighlightDisabled_tvOS_1920_0_1080_0@1x.png | Bin 22723 -> 0 bytes ...estHighlightEnabled_iOS_375_0_667_0@2x.png | Bin 56721 -> 0 bytes ...HighlightEnabled_tvOS_1920_0_1080_0@1x.png | Bin 22966 -> 0 bytes .../Charts/Tests/Supporting Files/Info.plist | 24 - .../Media.xcassets/Contents.json | 6 - .../icon.imageset/Contents.json | 23 - .../Media.xcassets/icon.imageset/star-1.png | Bin 1221 -> 0 bytes .../Media.xcassets/icon.imageset/star-2.png | Bin 1221 -> 0 bytes .../Media.xcassets/icon.imageset/star.png | Bin 1221 -> 0 bytes .../Charts/scripts/build-dependencies.sh | 26 - .../scripts/copy-carthage-frameworks.sh | 24 - .../Checkouts/LaunchAtLogin/.editorconfig | 8 - .../Checkouts/LaunchAtLogin/.gitattributes | 1 - .../LaunchAtLogin/.github/funding.yml | 4 - Carthage/Checkouts/LaunchAtLogin/.gitignore | 2 - .../LaunchAtLogin/LaunchAtLogin.podspec | 14 - .../LaunchAtLogin.xcodeproj/project.pbxproj | 494 --- .../xcschemes/LaunchAtLogin.xcscheme | 80 - .../xcschemes/LaunchAtLoginHelper.xcscheme | 91 - .../LaunchAtLogin/LaunchAtLogin/Info.plist | 22 - .../LaunchAtLogin/LaunchAtLogin.h | 4 - .../LaunchAtLogin/LaunchAtLogin.swift | 21 - .../LaunchAtLogin/copy-helper.sh | 22 - .../LaunchAtLoginHelper/Info.plist | 28 - .../LaunchAtLoginHelper.entitlements | 8 - .../LaunchAtLoginHelper/main.swift | 25 - .../Checkouts/LaunchAtLogin/before-after.md | 21 - Carthage/Checkouts/LaunchAtLogin/license | 9 - Carthage/Checkouts/LaunchAtLogin/readme.md | 88 - .../Checkouts/Reachability.swift/.gitignore | 29 - .../Checkouts/Reachability.swift/CHANGELOG.md | 69 - .../Reachability.swift/CONTRIBUTING.md | 34 - Carthage/Checkouts/Reachability.swift/LICENSE | 19 - .../Reachability.swift/Package.swift | 23 - .../Checkouts/Reachability.swift/README.md | 162 - .../Reachability.xcodeproj/project.pbxproj | 963 ----- .../contents.xcworkspacedata | 7 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../xcschemes/Reachability.xcscheme | 95 - .../AppDelegate.swift | 19 - .../Content.imageset/Contents.json | 16 - .../Back.imagestacklayer/Contents.json | 6 - .../App Icon - Large.imagestack/Contents.json | 17 - .../Content.imageset/Contents.json | 16 - .../Front.imagestacklayer/Contents.json | 6 - .../Content.imageset/Contents.json | 16 - .../Middle.imagestacklayer/Contents.json | 6 - .../Content.imageset/Contents.json | 16 - .../Back.imagestacklayer/Contents.json | 6 - .../App Icon - Small.imagestack/Contents.json | 17 - .../Content.imageset/Contents.json | 16 - .../Front.imagestacklayer/Contents.json | 6 - .../Content.imageset/Contents.json | 16 - .../Middle.imagestacklayer/Contents.json | 6 - .../Contents.json | 32 - .../Contents.json | 16 - .../Top Shelf Image.imageset/Contents.json | 16 - .../Assets.xcassets/Contents.json | 6 - .../LaunchImage.launchimage/Contents.json | 22 - .../Base.lproj/Main.storyboard | 58 - .../ReachabilityAppleTVSample/Info.plist | 32 - .../ViewController.swift | 116 - .../ReachabilityMacSample/AppDelegate.swift | 18 - .../AppIcon.appiconset/Contents.json | 58 - .../Base.lproj/Main.storyboard | 721 ---- .../ReachabilityMacSample/Info.plist | 34 - .../ViewController.swift | 111 - .../ReachabilitySample/AppDelegate.swift | 20 - .../AppIcon.appiconset/Contents.json | 98 - .../Base.lproj/LaunchScreen.xib | 41 - .../Base.lproj/Main.storyboard | 54 - .../AppIcon.appiconset/Contents.json | 68 - .../ReachabilitySample/Info.plist | 47 - .../ReachabilitySample/ViewController.swift | 115 - .../ReachabilitySwift.podspec | 26 - .../Reachability.swift/Sources/Info.plist | 26 - .../Reachability.swift/Sources/Reachability.h | 17 - .../Sources/Reachability.swift | 406 -- .../Reachability.swift/Tests/Info.plist | 24 - .../Tests/ReachabilityTests.swift | 75 - 698 files changed, 1 insertion(+), 82274 deletions(-) delete mode 100644 Carthage/Checkouts/Charts/.github/ISSUE_TEMPLATE.md delete mode 100644 Carthage/Checkouts/Charts/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 Carthage/Checkouts/Charts/.gitignore delete mode 100644 Carthage/Checkouts/Charts/.travis.yml delete mode 100644 Carthage/Checkouts/Charts/Assets/feature_graphic.png delete mode 100644 Carthage/Checkouts/Charts/Assets/feature_graphic.psd delete mode 100644 Carthage/Checkouts/Charts/CHANGELOG.md delete mode 100644 Carthage/Checkouts/Charts/CONTRIBUTING.md delete mode 100644 Carthage/Checkouts/Charts/Cartfile.private delete mode 100644 Carthage/Checkouts/Charts/Cartfile.resolved delete mode 100644 Carthage/Checkouts/Charts/Charts.podspec delete mode 100644 Carthage/Checkouts/Charts/Charts.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme delete mode 100644 Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme delete mode 100644 Carthage/Checkouts/Charts/Charts.xcworkspace/contents.xcworkspacedata delete mode 100644 Carthage/Checkouts/Charts/Charts.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme delete mode 100644 Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTV.xcscheme delete mode 100644 Carthage/Checkouts/Charts/Charts/ChartsTV/ChartsTV.h delete mode 100644 Carthage/Checkouts/Charts/Charts/ChartsTV/Info.plist delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimationEasing.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimator.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/BarChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/BarLineChartViewBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/BubbleChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/CandleStickChartView.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Charts/ChartViewBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/CombinedChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/HorizontalBarChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/LineChartView.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Charts/PieChartView.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Charts/PieRadarChartViewBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/RadarChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Charts/ScatterChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartAxisBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartComponentBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLegend.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLimitLine.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartMarker.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartXAxis.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Components/ChartYAxis.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/ChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/CombinedChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/LineRadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/LineScatterCandleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataApproximatorFilter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataBaseFilter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartFillFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartXAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Highlight/BarChartHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlight.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartRange.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Highlight/CombinedHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/BarChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/BubbleChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/CandleStickChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartAxisRendererBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartDataRendererBase.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartLegendRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartRendererBase.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/CombinedChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/HorizontalBarChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Renderers/PieChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/RadarChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Renderers/ScatterChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartColorTemplates.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartSelectionDetail.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformer.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartUtils.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartViewPortHandler.swift delete mode 100644 Carthage/Checkouts/Charts/Charts/Classes/Utils/UIGraphics+Extensions.swift delete mode 100755 Carthage/Checkouts/Charts/Charts/Supporting Files/Charts.h delete mode 100644 Carthage/Checkouts/Charts/Charts/Supporting Files/Info.plist delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/BalloonMarker.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/RadarMarkerView.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/XYMarkerView.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/LargeValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/Contents.json delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star-1.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star-2.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Launch Screen.storyboard delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/markers/radar_marker@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Supporting Files/ChartsDemo-Bridging-Header.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Supporting Files/Info.plist delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Supporting Files/main.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/AppDelegate.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Components/BalloonMarker.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Components/RadarMarkerView.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Components/XYMarkerView.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/DemoBaseViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/DemoListViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/AnotherBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/BarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/BubbleChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/CandleStickChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/ColoredLineChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/CombinedChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/CubicLineChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/HalfPieChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/HorizontalBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/LineChart1ViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/LineChart2ViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/LineChartFilledViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/LineChartTimeViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/MultipleBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/MultipleLinesChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/NegativeStackedBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/PieChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/PiePolylineChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/PositiveNegativeBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/RadarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/ScatterChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/SinusBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Demos/StackedBarChartViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Formatters/DateValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Formatters/DayAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Formatters/IntAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/Swift/Formatters/LargeValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/DemoListViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/AnotherBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/BarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/BubbleChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/CandleStickChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/ColoredLineChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/CombinedChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/CubicLineChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/HalfPieChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/HorizontalBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/LineChart1ViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/LineChart2ViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/LineChartFilledViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/LineChartTimeViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/MultipleBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/MultipleLinesChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/NegativeStackedBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/PieChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/PiePolylineChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/PositiveNegativeBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/RadarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/RealmDemosViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/ScatterChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/SinusBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/Demos/StackedBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-iOS/XIBs/RadarMarkerView.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/AppDelegate.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Base.lproj/Main.storyboard delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Demos/BarDemoViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Demos/LineDemoViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Demos/PieDemoViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Demos/RadarDemoViewController.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/ChartsDemo-macOS/Info.plist delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Contents.o delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/BarChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/BubbleChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/CandleChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/CombinedChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/HorizontalBarChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/LineChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Resources/feature_graphic.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/PieChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/RadarChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/ScatterChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/Pages/StackedBarChart.xcplaygroundpage/Contents.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo-macOS/PlaygroundChart.playground/contents.xcplayground delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/ChartsDemo.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/AppDelegate.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/AppDelegate.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Components/BalloonMarker.swift delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Components/MyCustomXValueFormatter.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Components/MyCustomXValueFormatter.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/DemoBaseViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/DemoBaseViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/DemoListViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/DemoListViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/DemoListViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/AnotherBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/AnotherBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/AnotherBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/BarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/BarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/BarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/BubbleChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/BubbleChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/BubbleChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CandleStickChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CandleStickChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CandleStickChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/ColoredLineChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/ColoredLineChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/ColoredLineChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CombinedChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CombinedChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CombinedChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CubicLineChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CubicLineChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/CubicLineChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/HorizontalBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/HorizontalBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/HorizontalBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/LineChart1ViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/LineChart1ViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/LineChart1ViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/LineChart2ViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/LineChart2ViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/LineChart2ViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/MultipleBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/MultipleBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/MultipleBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/MultipleLinesChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/MultipleLinesChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/MultipleLinesChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/NegativeStackedBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/NegativeStackedBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/NegativeStackedBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/PieChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/PieChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/PieChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/RadarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/RadarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/RadarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/ScatterChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/ScatterChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/ScatterChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/SinusBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/SinusBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/SinusBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/StackedBarChartViewController.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/StackedBarChartViewController.m delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Classes/Demos/StackedBarChartViewController.xib delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/LaunchImage.launchimage/Default-736h@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/Images.xcassets/LaunchImage.launchimage/Default@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/Icon-29@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/Icon-29@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/Icon-40@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/Icon-40@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/Icon-60@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/Icon-60@3x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/iTunesArtwork delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Resources/app-icon/iTunesArtwork@2x delete mode 100755 Carthage/Checkouts/Charts/ChartsDemo/Resources/launch-image/Default-568h@2x.png delete mode 100755 Carthage/Checkouts/Charts/ChartsDemo/Resources/launch-image/Default-667h@2x.png delete mode 100755 Carthage/Checkouts/Charts/ChartsDemo/Resources/launch-image/Default-736h@3x.png delete mode 100755 Carthage/Checkouts/Charts/ChartsDemo/Resources/launch-image/Default@2x.png delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Supporting Files/ChartsDemo-Bridging-Header.h delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Supporting Files/Info.plist delete mode 100644 Carthage/Checkouts/Charts/ChartsDemo/Supporting Files/main.m delete mode 100644 Carthage/Checkouts/Charts/Gemfile delete mode 100644 Carthage/Checkouts/Charts/Gemfile.lock delete mode 100644 Carthage/Checkouts/Charts/LICENSE delete mode 100644 Carthage/Checkouts/Charts/Package.swift delete mode 100644 Carthage/Checkouts/Charts/README.md delete mode 100644 Carthage/Checkouts/Charts/Rakefile delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Animation/Animator.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Animation/ChartAnimationEasing.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/BarChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/BarLineChartViewBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/BubbleChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/CandleStickChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/ChartViewBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/CombinedChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/HorizontalBarChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/LineChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/PieChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/PieRadarChartViewBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/RadarChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Charts/ScatterChartView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/AxisBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/ChartLimitLine.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/ComponentBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/Description.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/IMarker.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/Legend.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/LegendEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/MarkerImage.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/MarkerView.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/XAxis.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Components/YAxis.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/ChartBaseDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BarChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/CandleChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/ChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/ChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/CombinedChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/LineChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/PieChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/RadarChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartData.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IBarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/ICandleChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/ILineChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IPieChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IRadarChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Data/Interfaces/IScatterChartDataSet.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Filters/DataApproximator+N.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Filters/DataApproximator.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/DefaultAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/DefaultFillFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/DefaultValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/IAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/IFillFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/IValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Formatters/IndexAxisValueFormatter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/BarHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/ChartHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/CombinedHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/Highlight.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/HorizontalBarHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/IHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/PieHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/PieRadarHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/RadarHighlighter.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Highlight/Range.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/BarChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/BubbleChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/CandleChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/ChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/CombinedChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/LineChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Interfaces/ScatterChartDataProvider.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Jobs/AnimatedMoveViewJob.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Jobs/AnimatedViewPortJob.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Jobs/AnimatedZoomViewJob.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Jobs/MoveViewJob.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Jobs/ViewPortJob.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Jobs/ZoomViewJob.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/AxisRendererBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/BarChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/BubbleChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/CandleStickChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/ChartDataRendererBase.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/CombinedChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/HorizontalBarChartRenderer.swift delete mode 100755 Carthage/Checkouts/Charts/Source/Charts/Renderers/LegendRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/LineChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/LineRadarRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/PieChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/RadarChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Renderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/IShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/Scatter/XShapeRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/ScatterChartRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/XAxisRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/XAxisRendererRadarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/YAxisRenderer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Renderers/YAxisRendererRadarChart.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/ChartColorTemplates.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/ChartUtils.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/Fill.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/Platform+Accessibility.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/Platform.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/Transformer.swift delete mode 100644 Carthage/Checkouts/Charts/Source/Charts/Utils/TransformerHorizontalBarChart.swift delete mode 100755 Carthage/Checkouts/Charts/Source/Charts/Utils/ViewPortHandler.swift delete mode 100755 Carthage/Checkouts/Charts/Source/Supporting Files/Charts.h delete mode 100644 Carthage/Checkouts/Charts/Source/Supporting Files/Info.plist delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/BarChartTests.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/ChartUtilsTests.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/CombinedChartTests.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/EquatableTests.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/HorizontalBarChartTests.swift delete mode 100755 Carthage/Checkouts/Charts/Tests/Charts/LineChartTests.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/PieChartTests.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/Charts/Snapshot.swift delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultBarDataSetLabels_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultBarDataSetLabels_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNotDrawValueAboveBars_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNotDrawValueAboveBars_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedDrawValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedDrawValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedNotDrawValuesAboveBars_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedNotDrawValuesAboveBars_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedNotDrawValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testStackedNotDrawValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testDefaultValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testDefaultValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testHidesValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testHidesValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testNotDrawValueAboveBars_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testNotDrawValueAboveBars_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testStackedDrawValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testStackedDrawValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testStackedNotDrawValuesAboveBars_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testStackedNotDrawValuesAboveBars_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testStackedNotDrawValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.HorizontalBarChartTests/testStackedNotDrawValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDefaultValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDefaultValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawIcons_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawIcons_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHideCenterLabel_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHideCenterLabel_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHidesValues_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHidesValues_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHighlightDisabled_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHighlightDisabled_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHighlightEnabled_iOS_375_0_667_0@2x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHighlightEnabled_tvOS_1920_0_1080_0@1x.png delete mode 100644 Carthage/Checkouts/Charts/Tests/Supporting Files/Info.plist delete mode 100644 Carthage/Checkouts/Charts/Tests/Supporting Files/Media.xcassets/Contents.json delete mode 100644 Carthage/Checkouts/Charts/Tests/Supporting Files/Media.xcassets/icon.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Charts/Tests/Supporting Files/Media.xcassets/icon.imageset/star-1.png delete mode 100644 Carthage/Checkouts/Charts/Tests/Supporting Files/Media.xcassets/icon.imageset/star-2.png delete mode 100644 Carthage/Checkouts/Charts/Tests/Supporting Files/Media.xcassets/icon.imageset/star.png delete mode 100755 Carthage/Checkouts/Charts/scripts/build-dependencies.sh delete mode 100755 Carthage/Checkouts/Charts/scripts/copy-carthage-frameworks.sh delete mode 100644 Carthage/Checkouts/LaunchAtLogin/.editorconfig delete mode 100644 Carthage/Checkouts/LaunchAtLogin/.gitattributes delete mode 100644 Carthage/Checkouts/LaunchAtLogin/.github/funding.yml delete mode 100644 Carthage/Checkouts/LaunchAtLogin/.gitignore delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin.podspec delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin.xcodeproj/xcshareddata/xcschemes/LaunchAtLogin.xcscheme delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin.xcodeproj/xcshareddata/xcschemes/LaunchAtLoginHelper.xcscheme delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin/Info.plist delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin/LaunchAtLogin.h delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin/LaunchAtLogin.swift delete mode 100755 Carthage/Checkouts/LaunchAtLogin/LaunchAtLogin/copy-helper.sh delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLoginHelper/Info.plist delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLoginHelper/LaunchAtLoginHelper.entitlements delete mode 100644 Carthage/Checkouts/LaunchAtLogin/LaunchAtLoginHelper/main.swift delete mode 100644 Carthage/Checkouts/LaunchAtLogin/before-after.md delete mode 100644 Carthage/Checkouts/LaunchAtLogin/license delete mode 100644 Carthage/Checkouts/LaunchAtLogin/readme.md delete mode 100644 Carthage/Checkouts/Reachability.swift/.gitignore delete mode 100644 Carthage/Checkouts/Reachability.swift/CHANGELOG.md delete mode 100644 Carthage/Checkouts/Reachability.swift/CONTRIBUTING.md delete mode 100644 Carthage/Checkouts/Reachability.swift/LICENSE delete mode 100644 Carthage/Checkouts/Reachability.swift/Package.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/README.md delete mode 100644 Carthage/Checkouts/Reachability.swift/Reachability.xcodeproj/project.pbxproj delete mode 100644 Carthage/Checkouts/Reachability.swift/Reachability.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 Carthage/Checkouts/Reachability.swift/Reachability.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Carthage/Checkouts/Reachability.swift/Reachability.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 Carthage/Checkouts/Reachability.swift/Reachability.xcodeproj/xcshareddata/xcschemes/Reachability.xcscheme delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/AppDelegate.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Assets.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Base.lproj/Main.storyboard delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/Info.plist delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityAppleTVSample/ViewController.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityMacSample/AppDelegate.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityMacSample/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityMacSample/Base.lproj/Main.storyboard delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityMacSample/Info.plist delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilityMacSample/ViewController.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/AppDelegate.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/Base.lproj/LaunchScreen.xib delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/Base.lproj/Main.storyboard delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/Info.plist delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySample/ViewController.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/ReachabilitySwift.podspec delete mode 100644 Carthage/Checkouts/Reachability.swift/Sources/Info.plist delete mode 100644 Carthage/Checkouts/Reachability.swift/Sources/Reachability.h delete mode 100644 Carthage/Checkouts/Reachability.swift/Sources/Reachability.swift delete mode 100644 Carthage/Checkouts/Reachability.swift/Tests/Info.plist delete mode 100644 Carthage/Checkouts/Reachability.swift/Tests/ReachabilityTests.swift diff --git a/.gitignore b/.gitignore index c5784993..a286af46 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store Pods -Carthage/Build/ +Carthage build xcuserdata diff --git a/Carthage/Checkouts/Charts/.github/ISSUE_TEMPLATE.md b/Carthage/Checkouts/Charts/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 1878f561..00000000 --- a/Carthage/Checkouts/Charts/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,33 +0,0 @@ -> ℹ Please fill out this template when filing an issue. -> All lines beginning with an ℹ symbol instruct you with what info we expect. You can delete those lines once you've filled in the info. -> -> Per our [*CONTRIBUTING guidelines](https://github.com/jjatie/Charts/blob/master/CONTRIBUTING.md), we use GitHub for -> bugs and feature requests, not general support. Other issues should be opened on Stack Overflow with the tag [`ios-charts`.](https://stackoverflow.com/questions/tagged/ios-charts) -> -> Please remove this line and everything above it before submitting. - -* [ ] 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? - -ℹ Please replace this with what you did. - -## What did you expect to happen? - -ℹ Please replace this with what you expected to happen. - -## What happened instead? - -ℹ Please replace this with of what happened instead. - -## Charts Environment - -**Charts version/Branch/Commit Number:** -**Xcode version:** -**Swift version:** -**Platform(s) running Charts:** -**macOS version running Xcode:** - -## Demo Project - -ℹ Please link to or upload a project we can download that reproduces the issue. diff --git a/Carthage/Checkouts/Charts/.github/PULL_REQUEST_TEMPLATE.md b/Carthage/Checkouts/Charts/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 30eee845..00000000 --- a/Carthage/Checkouts/Charts/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,13 +0,0 @@ -### Issue Link :link: - - -### Goals :soccer: - - - -### Implementation Details :construction: - - - -### Testing Details :mag: - \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/.gitignore b/Carthage/Checkouts/Charts/.gitignore deleted file mode 100644 index c49c6a1c..00000000 --- a/Carthage/Checkouts/Charts/.gitignore +++ /dev/null @@ -1,75 +0,0 @@ -# OS X -.DS_Store - -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## Build generated -build/ -DerivedData/ - -## Various settings -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata/ - -## Other -*.xccheckout -*.moved-aside -*.xcuserstate - -## Obj-C/Swift specific -DerivedData -*.hmap -*.ipa -*.dSYM.zip -*.dSYM - -## Playgrounds -timeline.xctimeline -playground.xcworkspace - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -.build/ -project.xcworkspace - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md - -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -Carthage -Charts.framework.zip -ChartsRealm.framework.zip -.swiftpm/ diff --git a/Carthage/Checkouts/Charts/.travis.yml b/Carthage/Checkouts/Charts/.travis.yml deleted file mode 100644 index 70a7ecae..00000000 --- a/Carthage/Checkouts/Charts/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: objective-c -osx_image: xcode11 -matrix: - include: - - osx_image: xcode11 - env: PLATFORM="iOS" - - osx_image: xcode11 - env: PLATFORM="tvOS" - - osx_image: xcode11 - env: PLATFORM="macOS" -env: - global: - - LANG=en_US.UTF-8 - - secure: HRl5Cg3/LmTJYCSDGtV8Fiqf6OgWXR6C5YkNviOElU9YmcCTvnmE7MCm+gK8hJNIQ2mWCBTlxTC7jJxeYlx0D+JQ6IhRc75B4zXgbtth6HCzlvhWDcBbNU/K+JPDjy2EAoVgvf8Xseq6GqM4WcVg2Pwr9PS3aaH/SKDE6yVoPXRM2wXRAxIdxayqm/RQgG88jAKgg+Ub5DKW/c9NLLbUf/WdY9SgQDJtqeZCMv7G3/IzW34KZgVPsqSrPByzZXbf7KgYkYLQlscH4mcUctk1qxhdCae//zcgUZo/utpXWbPXQqtvDpuqrg9IRvoGxa/D1I7dLSJsVnk4aP7RW18vn4HJ82C2AiEp+lU2TQE9y5lXcGssZVIa5aZNTWL90HVer3Kg6AnHffvdCSZ/UHsMZJFURUXL9fRIlWVGuEDeQOqlV6lUmEtp/BiEdV4D5PuCyT6snsmEwkc51goyqh6uS6XhJyqYEQdxdoybznwp91tVmASsRybppIGHTkcWN5csF4zQt40tEwd8LoqM+bBUo0wxKiKsNsecL4JA+YDYs2saZY9U3s8jAaIon+qDu071fPRaPEvBhYHYDhy4cTvBXibyGUYGHkrgLu0w19wDfHcJKt2In58yOmaCCLNoTGp/ZLNVRyZ8VDlj/NdJ2dWpMsL2Aj7OxU065kCL2FlvuRU= -cache: - - bundler -before_install: - - brew update - - brew upgrade carthage || true - - carthage version - - carthage bootstrap --platform $PLATFORM -script: - - bundle exec rake ci[$PLATFORM] -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/Carthage/Checkouts/Charts/Assets/feature_graphic.png b/Carthage/Checkouts/Charts/Assets/feature_graphic.png deleted file mode 100644 index ba0a65998d296acbd881290b15d55c753af40344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28989 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 diff --git a/Carthage/Checkouts/Charts/Assets/feature_graphic.psd b/Carthage/Checkouts/Charts/Assets/feature_graphic.psd deleted file mode 100644 index 0ac018dc0697a1ea3522955ecf696e6aed09106e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298724 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

TMJU#v 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 diff --git a/Carthage/Checkouts/Charts/CHANGELOG.md b/Carthage/Checkouts/Charts/CHANGELOG.md deleted file mode 100644 index 4cbb87b8..00000000 --- a/Carthage/Checkouts/Charts/CHANGELOG.md +++ /dev/null @@ -1,3701 +0,0 @@ -# Change Log - -## [v3.4.0](https://github.com/danielgindi/Charts/tree/v3.4.0) (2019-10-09) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.3.0...v3.4.0) - -**Fixed bugs:** - -- Line charts: Line sections disappear when zoomed in \(has PR\). [\#4099](https://github.com/danielgindi/Charts/issues/4099) -- Line chart x axis animation is broken [\#4093](https://github.com/danielgindi/Charts/issues/4093) -- LineChartView.highlightValue causes CoreGraphics API errors [\#4043](https://github.com/danielgindi/Charts/issues/4043) -- Horizontal Bezier Line Graph Not Drawing Through All Points [\#3960](https://github.com/danielgindi/Charts/issues/3960) -- Index out of bounds exception in v3.2 in createAccessibleElement [\#3659](https://github.com/danielgindi/Charts/issues/3659) - -**Closed issues:** - -- Xcode asking for constants instead of variables in Charts code [\#4161](https://github.com/danielgindi/Charts/issues/4161) -- Blank space should not exist in BarChartView [\#4157](https://github.com/danielgindi/Charts/issues/4157) -- Could not find module 'Charts' for target 'arm64-apple-ios'; found: x86\_64-apple-ios-simulator, x86\_64 [\#4154](https://github.com/danielgindi/Charts/issues/4154) -- 指定哪个swift版本都报语法错误 [\#4145](https://github.com/danielgindi/Charts/issues/4145) -- lineChart customize the color or style of the selected point [\#4144](https://github.com/danielgindi/Charts/issues/4144) -- How do I customize the color or style of the selected point in a polygraph [\#4143](https://github.com/danielgindi/Charts/issues/4143) -- Help, How to achieve this style? [\#4138](https://github.com/danielgindi/Charts/issues/4138) -- AutoScaleMinMax doesn't work in candlestick iOS [\#4135](https://github.com/danielgindi/Charts/issues/4135) -- 怎么手动设定滚动到指定x坐标 [\#4130](https://github.com/danielgindi/Charts/issues/4130) -- The reuse of charts on tableviewcell [\#4127](https://github.com/danielgindi/Charts/issues/4127) -- LineChartView decrease height if add many LineChartDataSets [\#4122](https://github.com/danielgindi/Charts/issues/4122) -- 堆叠柱状图不同数据之间的间距 [\#4120](https://github.com/danielgindi/Charts/issues/4120) -- Removing LineChartView to save memory? [\#4114](https://github.com/danielgindi/Charts/issues/4114) -- h [\#4110](https://github.com/danielgindi/Charts/issues/4110) -- swift 5 [\#4107](https://github.com/danielgindi/Charts/issues/4107) -- Scatter charts dots needs to be shown even it is less than half [\#4096](https://github.com/danielgindi/Charts/issues/4096) -- barchart 1st bar offset [\#4092](https://github.com/danielgindi/Charts/issues/4092) -- Compiling Chart with Swift 5.1 raises compilation error [\#4090](https://github.com/danielgindi/Charts/issues/4090) -- How to change color for Key's Label ? [\#4088](https://github.com/danielgindi/Charts/issues/4088) -- y axis [\#4087](https://github.com/danielgindi/Charts/issues/4087) -- No chart data available \(displaying large data sets\) [\#4075](https://github.com/danielgindi/Charts/issues/4075) -- 3.2.2 xBounds starts from 1 [\#4073](https://github.com/danielgindi/Charts/issues/4073) -- Build error on Xcode 11 beta 3 - macOS app [\#4071](https://github.com/danielgindi/Charts/issues/4071) -- Why not fix \#3865 in swift4.2 as well? [\#4067](https://github.com/danielgindi/Charts/issues/4067) -- Pod install failed - Could not found branch v3.3 issue [\#4063](https://github.com/danielgindi/Charts/issues/4063) -- Potential bug highlighting Bars in Bar chart [\#4062](https://github.com/danielgindi/Charts/issues/4062) -- PieChart slices with different height/thick [\#4061](https://github.com/danielgindi/Charts/issues/4061) -- Line Chart crashes when upgrading from 3.2.1 to 3.2.2 or greater [\#4060](https://github.com/danielgindi/Charts/issues/4060) -- How to set the shadow width? [\#4058](https://github.com/danielgindi/Charts/issues/4058) -- iOS13 port [\#4056](https://github.com/danielgindi/Charts/issues/4056) -- Embedding in Objective C++ project [\#4054](https://github.com/danielgindi/Charts/issues/4054) -- Example project does not work for latest swift [\#4053](https://github.com/danielgindi/Charts/issues/4053) -- Line chart line color array issue [\#4052](https://github.com/danielgindi/Charts/issues/4052) -- I set the display is double but turned into an integer [\#4051](https://github.com/danielgindi/Charts/issues/4051) -- xAxis Renderer label [\#4039](https://github.com/danielgindi/Charts/issues/4039) -- Highlight midPoint of visible area [\#4032](https://github.com/danielgindi/Charts/issues/4032) -- Snap to position for x values \(paging\) [\#4030](https://github.com/danielgindi/Charts/issues/4030) -- how can I use both chart in one view like video? [\#4026](https://github.com/danielgindi/Charts/issues/4026) -- How to Parse xValue and yValue to LineChartData ? [\#4025](https://github.com/danielgindi/Charts/issues/4025) -- Fatal error: Index out of range from subscript\(position: Index\) -\> Element [\#4024](https://github.com/danielgindi/Charts/issues/4024) -- Pie chart label [\#4022](https://github.com/danielgindi/Charts/issues/4022) -- Cannot find "@import Charts;" in -Swift.h, I can only @import Charts in OC files, anything I missed? [\#4021](https://github.com/danielgindi/Charts/issues/4021) -- Cannot subclass LineChartRenderer with Clang 11 [\#4018](https://github.com/danielgindi/Charts/issues/4018) -- Unable to compile with Swift Package Manager due to missing dependencies [\#4016](https://github.com/danielgindi/Charts/issues/4016) -- Show values in marker when you click a circle in LineChart [\#4015](https://github.com/danielgindi/Charts/issues/4015) -- Is it possible to show only part of series on full XAxis labels? [\#4014](https://github.com/danielgindi/Charts/issues/4014) -- BarChartRenderer FatalError: Index out of range [\#4013](https://github.com/danielgindi/Charts/issues/4013) -- how to set max zoom scale for y-axis [\#4011](https://github.com/danielgindi/Charts/issues/4011) -- ScatterChartDataSet basic initializer causes crashes [\#4010](https://github.com/danielgindi/Charts/issues/4010) -- oc project could't use [\#4008](https://github.com/danielgindi/Charts/issues/4008) -- Line chart issue [\#4005](https://github.com/danielgindi/Charts/issues/4005) -- Crash on PieChartRenderer line 833 [\#4001](https://github.com/danielgindi/Charts/issues/4001) -- BarChartView shows on UI when y value is zero [\#4000](https://github.com/danielgindi/Charts/issues/4000) -- can make excel [\#3999](https://github.com/danielgindi/Charts/issues/3999) -- Cannot remove an observer for the key path "bounds" because it is not registered as an observer [\#3995](https://github.com/danielgindi/Charts/issues/3995) -- How to set y axis value with larger difference because my candles are showing very small in size please provide any way [\#3993](https://github.com/danielgindi/Charts/issues/3993) -- compiling for iOS 8.0, but module 'Charts' has a minimum deployment target of iOS 8.4: [\#3992](https://github.com/danielgindi/Charts/issues/3992) -- SIGABRT [\#3986](https://github.com/danielgindi/Charts/issues/3986) -- Getting The below error on Xcode update: Error Group :-1: Undefined symbol: \_OBJC\_CLASS\_$\_XBarChart :-1: Undefined symbol: \_OBJC\_CLASS\_$\_XBarChartConfiguration :-1: Undefined symbol: \_OBJC\_CLASS\_$\_XBarItem, When I run on real device. [\#3985](https://github.com/danielgindi/Charts/issues/3985) -- Second to last value in stacked BarChart not drawn when the last value is zero [\#3984](https://github.com/danielgindi/Charts/issues/3984) -- Value labels are not always showing in horizontal bar chart [\#3981](https://github.com/danielgindi/Charts/issues/3981) -- When I manually integrated "charts", running the iOS9.0 emulator crashed. [\#3980](https://github.com/danielgindi/Charts/issues/3980) -- LineChartDataSet function setColors is unavailable? [\#3979](https://github.com/danielgindi/Charts/issues/3979) -- notifyDataSetChanged\(\) crashes with CGAffineTransformInvert: singular matrix. [\#3978](https://github.com/danielgindi/Charts/issues/3978) -- this version is 3.2.2 in pods, this version has problem [\#3977](https://github.com/danielgindi/Charts/issues/3977) -- Undefined symbol: method descriptor for Charts.ChartViewBase.initialize\(\) -\> \(\) [\#3976](https://github.com/danielgindi/Charts/issues/3976) -- PieChart highlightEnabled flag operation is reverse of setting [\#3975](https://github.com/danielgindi/Charts/issues/3975) -- I am not getting the last value of x axis in the group chart [\#3974](https://github.com/danielgindi/Charts/issues/3974) -- Charts 3.3.0 not running on Xcode 10.2 [\#3972](https://github.com/danielgindi/Charts/issues/3972) -- change line chart legend text color [\#3971](https://github.com/danielgindi/Charts/issues/3971) -- drawCenterTextEnable [\#3969](https://github.com/danielgindi/Charts/issues/3969) -- Installing version 3.3 from Pods not found [\#3968](https://github.com/danielgindi/Charts/issues/3968) -- zero value in bar chart [\#3967](https://github.com/danielgindi/Charts/issues/3967) -- \[Question\] Line Chart Filled Circle Hole when highlighted [\#3966](https://github.com/danielgindi/Charts/issues/3966) -- How to change pie chart boarder color and width size ? and separator line width size and curve? in swift 4 [\#3959](https://github.com/danielgindi/Charts/issues/3959) -- Charts Pagination [\#3957](https://github.com/danielgindi/Charts/issues/3957) -- button press [\#3956](https://github.com/danielgindi/Charts/issues/3956) -- Edit leading Trailing and width of bar [\#3954](https://github.com/danielgindi/Charts/issues/3954) -- Can't suspend the ongoing drag [\#3953](https://github.com/danielgindi/Charts/issues/3953) -- incorrect display in LineChartView When all yAxis data being 0 [\#3950](https://github.com/danielgindi/Charts/issues/3950) -- Balloon Marker Swift errors [\#3947](https://github.com/danielgindi/Charts/issues/3947) -- Linhas de sobreposição PieChart [\#3942](https://github.com/danielgindi/Charts/issues/3942) -- Display Attributed String on X-Axis [\#3941](https://github.com/danielgindi/Charts/issues/3941) -- getHighlightByTouchPoint will get nil [\#3940](https://github.com/danielgindi/Charts/issues/3940) -- Fatal error: removeEntry is not implemented in ChartBaseDataSet: [\#3937](https://github.com/danielgindi/Charts/issues/3937) -- Line graph points create lines to other points [\#3936](https://github.com/danielgindi/Charts/issues/3936) -- CombinedChart and data [\#3930](https://github.com/danielgindi/Charts/issues/3930) -- Gradient and round corner in bar chart [\#3928](https://github.com/danielgindi/Charts/issues/3928) -- Slide space color pie-chart [\#3926](https://github.com/danielgindi/Charts/issues/3926) -- Cannot build enterprise with Charts [\#3924](https://github.com/danielgindi/Charts/issues/3924) -- ChartUtils.swift line 225 [\#3922](https://github.com/danielgindi/Charts/issues/3922) -- Not Drawing Chart With Exact Axis [\#3921](https://github.com/danielgindi/Charts/issues/3921) -- LineChartView with a line that goes backwards [\#3919](https://github.com/danielgindi/Charts/issues/3919) -- Remove slices text in pieChart [\#3918](https://github.com/danielgindi/Charts/issues/3918) -- Crash at BarChartDataSet as! IBarChartDataSet [\#3917](https://github.com/danielgindi/Charts/issues/3917) -- carthage support lagging - needs updating for Xcode 10.2 & Swift5 [\#3914](https://github.com/danielgindi/Charts/issues/3914) -- The first dot doesn't show up when I use lineChart [\#3912](https://github.com/danielgindi/Charts/issues/3912) -- How to listen to the end of a chart swipe to call a method [\#3911](https://github.com/danielgindi/Charts/issues/3911) -- How to display single data when using LineChartView [\#3910](https://github.com/danielgindi/Charts/issues/3910) -- Straight Line in third quadrant does't show up [\#3898](https://github.com/danielgindi/Charts/issues/3898) -- Horizontal scrolling in long vertical tableView causes the outer table to jump [\#3866](https://github.com/danielgindi/Charts/issues/3866) -- PieChart with value lines with very small values render values on top of each other [\#3613](https://github.com/danielgindi/Charts/issues/3613) -- Line Chart do not draw line for Data Set [\#2567](https://github.com/danielgindi/Charts/issues/2567) -- Stacked bar marker returns entry.y of entire stack [\#2173](https://github.com/danielgindi/Charts/issues/2173) -- Repeating Xaxis values [\#2143](https://github.com/danielgindi/Charts/issues/2143) - -**Merged pull requests:** - -- Apply Xcode11 changes [\#4153](https://github.com/danielgindi/Charts/pull/4153) ([liuxuan30](https://github.com/liuxuan30)) -- Fixes \#4099: Line renderer did not render lines if their coordinates fell outside of the viewport. [\#4100](https://github.com/danielgindi/Charts/pull/4100) ([4np](https://github.com/4np)) -- Fix line chart x axis animation \#4093, also close \#3960 [\#4094](https://github.com/danielgindi/Charts/pull/4094) ([liuxuan30](https://github.com/liuxuan30)) -- Update License [\#4055](https://github.com/danielgindi/Charts/pull/4055) ([jobinsjohn](https://github.com/jobinsjohn)) -- fixed stacked chart bug when there are different stacks on columns. [\#4029](https://github.com/danielgindi/Charts/pull/4029) ([Scalman](https://github.com/Scalman)) -- Fix Swift Package Manager compile issue [\#4017](https://github.com/danielgindi/Charts/pull/4017) ([rynecheow](https://github.com/rynecheow)) -- Added a safety check before an unsafe array operation [\#4006](https://github.com/danielgindi/Charts/pull/4006) ([UberNick](https://github.com/UberNick)) -- fix \#3975 \(pie chart highlight disabled will lead to empty slice\) [\#3996](https://github.com/danielgindi/Charts/pull/3996) ([liuxuan30](https://github.com/liuxuan30)) -- For \#3917. make init\(label: String?\) convenient initializer [\#3973](https://github.com/danielgindi/Charts/pull/3973) ([liuxuan30](https://github.com/liuxuan30)) -- Avoid passing NaN to CoreGraphics API \(Fixes \#1626\) [\#2568](https://github.com/danielgindi/Charts/pull/2568) ([chiahan1123](https://github.com/chiahan1123)) - -## [v3.3.0](https://github.com/danielgindi/Charts/tree/v3.3.0) (2019-04-24) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.2.2...v3.3.0) - -**Implemented enhancements:** - -- Provide pre-compiled universal binary [\#3867](https://github.com/danielgindi/Charts/issues/3867) -- Renamed `values` to `entries` to reflect the property's type [\#3847](https://github.com/danielgindi/Charts/pull/3847) ([jjatie](https://github.com/jjatie)) - -**Fixed bugs:** - -- Pie chart with vertical orientation clips last legend entry [\#3860](https://github.com/danielgindi/Charts/issues/3860) - -**Closed issues:** - -- 雷达图的拐点是怎么设置的 [\#3964](https://github.com/danielgindi/Charts/issues/3964) -- BarChartView没有从0开始 [\#3963](https://github.com/danielgindi/Charts/issues/3963) -- version 3.3 using spm results invalid string error [\#3962](https://github.com/danielgindi/Charts/issues/3962) -- 折线图能分页吗 就是滑动到最左边 网络请求再加载数据 [\#3961](https://github.com/danielgindi/Charts/issues/3961) -- BarChartView problem on dataset count changed [\#3958](https://github.com/danielgindi/Charts/issues/3958) -- No Such Module 'Charts' [\#3955](https://github.com/danielgindi/Charts/issues/3955) -- drawing asynchronous [\#3952](https://github.com/danielgindi/Charts/issues/3952) -- demo can not run [\#3951](https://github.com/danielgindi/Charts/issues/3951) -- BarChartView extends all bars to bottom when all values are negative [\#3949](https://github.com/danielgindi/Charts/issues/3949) -- xcode10.2,swift5,chart version 3.3.0 [\#3948](https://github.com/danielgindi/Charts/issues/3948) -- Compiling for iOS 8.1, but module 'Charts' has a minimum deployment target of iOS 8.4 [\#3946](https://github.com/danielgindi/Charts/issues/3946) -- X轴的Label显示间隔会随着值的增加而变大, 能控制显示间隔吗? [\#3943](https://github.com/danielgindi/Charts/issues/3943) -- the first point of LineChartView is not displayed, and so is demo [\#3938](https://github.com/danielgindi/Charts/issues/3938) -- why????? [\#3934](https://github.com/danielgindi/Charts/issues/3934) -- The “Swift Language Version” \(SWIFT\_VERSION\) build setting must be set to a supported value for targets which use Swift. Supported values are: 4.0, 4.2, 5.0. This setting can be set in the build settings editor. [\#3932](https://github.com/danielgindi/Charts/issues/3932) -- error: SWIFT\_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0. \(in target 'Charts'\) [\#3929](https://github.com/danielgindi/Charts/issues/3929) -- 最新版更新后的问题 [\#3927](https://github.com/danielgindi/Charts/issues/3927) -- How can i get CenterEntry in the View when i setted the MaxVisibleRange? [\#3925](https://github.com/danielgindi/Charts/issues/3925) -- EXC\_BAD\_ACCESS error on PieChart [\#3923](https://github.com/danielgindi/Charts/issues/3923) -- The first dot doesn't show up when I use lineChart [\#3915](https://github.com/danielgindi/Charts/issues/3915) -- Swift 5 Support w/ Cocoapods [\#3913](https://github.com/danielgindi/Charts/issues/3913) -- HOW to create pie chart like below image . https://user-images.githubusercontent.com/20434573/54804603-1d31fa80-4c9a-11e9-9960-00cf7c7d117d.png [\#3908](https://github.com/danielgindi/Charts/issues/3908) -- x Axis grid line origin is wrong ! maybe a bug, anxious!!! [\#3904](https://github.com/danielgindi/Charts/issues/3904) -- why not use CAShapeLayer? [\#3903](https://github.com/danielgindi/Charts/issues/3903) -- Chart legend [\#3896](https://github.com/danielgindi/Charts/issues/3896) -- Wrong values from pixelForValues [\#3895](https://github.com/danielgindi/Charts/issues/3895) -- Cannot set labels for RadarChart [\#3893](https://github.com/danielgindi/Charts/issues/3893) -- I can't migrate the swift files\(combined chart\) in objective c project. Could please share the objective c code fully. Thanks in advance. [\#3890](https://github.com/danielgindi/Charts/issues/3890) -- Draw circle only on last value [\#3887](https://github.com/danielgindi/Charts/issues/3887) -- Mismatch left axis maximum and minimum values [\#3886](https://github.com/danielgindi/Charts/issues/3886) -- How to animate? start poisiton is not from zero. [\#3885](https://github.com/danielgindi/Charts/issues/3885) -- I want to change line chart fill colours [\#3882](https://github.com/danielgindi/Charts/issues/3882) -- Circle view is not showing for first point of line chart [\#3881](https://github.com/danielgindi/Charts/issues/3881) -- support ECG demo? [\#3880](https://github.com/danielgindi/Charts/issues/3880) -- How to remove the values given outside the circle in piechart [\#3878](https://github.com/danielgindi/Charts/issues/3878) -- file was built for x86\_64 which is not the architecture being linked \(arm64\):error: linker command failed with exit code 1 \(use -v to see invocation\) [\#3877](https://github.com/danielgindi/Charts/issues/3877) -- Clipping first and last circle from line chart IOS. [\#3873](https://github.com/danielgindi/Charts/issues/3873) -- Smoothly moving a slowly changing linechart [\#3859](https://github.com/danielgindi/Charts/issues/3859) -- Monthly X-Axis labels \(corresponding values\) in my LineChart are not at the right position [\#3858](https://github.com/danielgindi/Charts/issues/3858) -- CandleChart do not render the first candle in CombineChartView [\#3857](https://github.com/danielgindi/Charts/issues/3857) -- Have 2 or more tresholds for one graph [\#3856](https://github.com/danielgindi/Charts/issues/3856) -- Unexpected crash on 3.2.2 [\#3855](https://github.com/danielgindi/Charts/issues/3855) -- How to change the display of legends? [\#3853](https://github.com/danielgindi/Charts/issues/3853) -- I want to call a method after the chart has been dragged and stopped. How can I detect it and the chart has stopped? [\#3851](https://github.com/danielgindi/Charts/issues/3851) -- HorizontalBarChartView bar negative values position [\#3850](https://github.com/danielgindi/Charts/issues/3850) -- charts 有数据创建图表后,点击按钮将数据置为空则崩溃 [\#3849](https://github.com/danielgindi/Charts/issues/3849) -- No circle is drawn on a line chart when there is only one data. \(version 3.2.2 only\) [\#3848](https://github.com/danielgindi/Charts/issues/3848) -- slice color [\#3844](https://github.com/danielgindi/Charts/issues/3844) -- BarChartView showing consecutive values in xAxis [\#3843](https://github.com/danielgindi/Charts/issues/3843) -- How to hide those icons? [\#3842](https://github.com/danielgindi/Charts/issues/3842) -- Swift 4.2: 'values' is deprecated Warnings [\#3840](https://github.com/danielgindi/Charts/issues/3840) -- Y-axis values draw error [\#3837](https://github.com/danielgindi/Charts/issues/3837) -- Horizontal Bar Chart Value Labels Cut Off [\#3836](https://github.com/danielgindi/Charts/issues/3836) -- The right Y axis displays incorrect values that does not fit the chart [\#3835](https://github.com/danielgindi/Charts/issues/3835) -- How to align labels on left side and put values inside bars on HorizontalBarChartView? \[HELP WANTED\] [\#3833](https://github.com/danielgindi/Charts/issues/3833) -- How to show the tooltip like value when clicked on candle of candleStick chart [\#3832](https://github.com/danielgindi/Charts/issues/3832) -- In line chart, can I make all labels in Chart area even with changing yOffset? [\#3829](https://github.com/danielgindi/Charts/issues/3829) -- Multiline value labels on BarChart. [\#3826](https://github.com/danielgindi/Charts/issues/3826) -- how can I spin the selected slice of piechart to top. [\#3825](https://github.com/danielgindi/Charts/issues/3825) -- Update Cocoapods [\#3773](https://github.com/danielgindi/Charts/issues/3773) -- Select circles on line chart [\#3307](https://github.com/danielgindi/Charts/issues/3307) - -**Merged pull requests:** - -- Fix horizontal bar chart not drawing values and add unit tests [\#3906](https://github.com/danielgindi/Charts/pull/3906) ([liuxuan30](https://github.com/liuxuan30)) -- fix \#3860. maxHeight didn't count the last label [\#3900](https://github.com/danielgindi/Charts/pull/3900) ([liuxuan30](https://github.com/liuxuan30)) -- Migrating to built-in algorithms [\#3892](https://github.com/danielgindi/Charts/pull/3892) ([jjatie](https://github.com/jjatie)) -- Use a stock iterator instead of a custom one. [\#3891](https://github.com/danielgindi/Charts/pull/3891) ([phughes](https://github.com/phughes)) -- Removed unnecessary \#if statements and unified style to align with Xc… [\#3884](https://github.com/danielgindi/Charts/pull/3884) ([jjatie](https://github.com/jjatie)) -- Velocity samples calculation [\#3883](https://github.com/danielgindi/Charts/pull/3883) ([jjatie](https://github.com/jjatie)) -- Minor updates for Swift 5 [\#3874](https://github.com/danielgindi/Charts/pull/3874) ([jjatie](https://github.com/jjatie)) -- Replace AnyObject with Any [\#3864](https://github.com/danielgindi/Charts/pull/3864) ([jjatie](https://github.com/jjatie)) -- Data as any [\#3863](https://github.com/danielgindi/Charts/pull/3863) ([jjatie](https://github.com/jjatie)) -- Reassess convenience initializers [\#3862](https://github.com/danielgindi/Charts/pull/3862) ([jjatie](https://github.com/jjatie)) -- HorizontalBarChar value label offset calculation [\#3854](https://github.com/danielgindi/Charts/pull/3854) ([chaaarly](https://github.com/chaaarly)) -- Create `chartViewDidEndAnimate` in ChartViewDelegate [\#3852](https://github.com/danielgindi/Charts/pull/3852) ([Lcsmarcal](https://github.com/Lcsmarcal)) -- Align `ChartLimit.LabelPosition` naming with `UIRectCorner` [\#3846](https://github.com/danielgindi/Charts/pull/3846) ([jjatie](https://github.com/jjatie)) - -## [v3.2.2](https://github.com/danielgindi/Charts/tree/v3.2.2) (2019-02-13) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.2.1...v3.2.2) - -**Implemented enhancements:** - -- 【PieChart】Please support multiple colors for valueline. [\#3480](https://github.com/danielgindi/Charts/issues/3480) - -**Fixed bugs:** - -- CombinedChartView's candleData don't display in v3.2.0 [\#3662](https://github.com/danielgindi/Charts/issues/3662) -- Incorrect behavior for AxisBase.axisMaxLabels [\#3656](https://github.com/danielgindi/Charts/issues/3656) -- Horizontal Bar Chart legend issue [\#3301](https://github.com/danielgindi/Charts/issues/3301) - -**Closed issues:** - -- barchartview draw value in bottom of chart [\#3827](https://github.com/danielgindi/Charts/issues/3827) -- Regarding to label of axis, I think it displays .03 instead of 0.03 [\#3824](https://github.com/danielgindi/Charts/issues/3824) -- Bar Chart Not Showing Colours Correctly [\#3823](https://github.com/danielgindi/Charts/issues/3823) -- Pie Chart on click show value on label. Does anyone know how to do it? [\#3822](https://github.com/danielgindi/Charts/issues/3822) -- chartTranslated in a Pie Chart is not called [\#3821](https://github.com/danielgindi/Charts/issues/3821) -- Issue creating a simple line chart [\#3820](https://github.com/danielgindi/Charts/issues/3820) -- How to save image of scrollable graph [\#3819](https://github.com/danielgindi/Charts/issues/3819) -- Candle charts not showing candles on swift 4.2 [\#3818](https://github.com/danielgindi/Charts/issues/3818) -- How to get a value from line graph if there is more than one lines [\#3817](https://github.com/danielgindi/Charts/issues/3817) -- Multiple colors for the same line [\#3816](https://github.com/danielgindi/Charts/issues/3816) -- Memory Leaks in subclass of LineChartView [\#3813](https://github.com/danielgindi/Charts/issues/3813) -- Distortion When Animating Height of Auto Layout `LineChartView` [\#3811](https://github.com/danielgindi/Charts/issues/3811) -- How to show break in line chart for more than one graph? [\#3810](https://github.com/danielgindi/Charts/issues/3810) -- PIE Chart Colors not properly set [\#3809](https://github.com/danielgindi/Charts/issues/3809) -- A Question to contribution [\#3808](https://github.com/danielgindi/Charts/issues/3808) -- When y value is equal ,HorizontalBarChartView only show integer [\#3806](https://github.com/danielgindi/Charts/issues/3806) -- Highlight per drag not working! [\#3805](https://github.com/danielgindi/Charts/issues/3805) -- chartTranslated is called when no translation happened [\#3803](https://github.com/danielgindi/Charts/issues/3803) -- Xcode10 real machine operation error! [\#3802](https://github.com/danielgindi/Charts/issues/3802) -- Bar Width issue after reset the data [\#3801](https://github.com/danielgindi/Charts/issues/3801) -- Performance issue: drawCircles\(context: CGContext\) in LineChart [\#3798](https://github.com/danielgindi/Charts/issues/3798) -- LineChartView Y-Aixs label'number inaccuracy [\#3794](https://github.com/danielgindi/Charts/issues/3794) -- charts在特定范围内的参考坐标精度问题 [\#3793](https://github.com/danielgindi/Charts/issues/3793) -- Change chart legend show order [\#3791](https://github.com/danielgindi/Charts/issues/3791) -- hello,I don't want to display the pie chart by zero percent. How can I do this [\#3790](https://github.com/danielgindi/Charts/issues/3790) -- how to center legend text of LineChartView? [\#3789](https://github.com/danielgindi/Charts/issues/3789) -- How to Plot only for the available x axis and leave the rest of the x axis blank? [\#3788](https://github.com/danielgindi/Charts/issues/3788) -- Custom chart marker [\#3787](https://github.com/danielgindi/Charts/issues/3787) -- How to shift xAxis values to right? [\#3785](https://github.com/danielgindi/Charts/issues/3785) -- How to disable Accessibility support? [\#3782](https://github.com/danielgindi/Charts/issues/3782) -- Feature: Add option to draw limit lines on top of data [\#3781](https://github.com/danielgindi/Charts/issues/3781) -- Legend spacing issue with LineChart and colors\[\] [\#3780](https://github.com/danielgindi/Charts/issues/3780) -- How to change value line length for each value in pieChartView [\#3776](https://github.com/danielgindi/Charts/issues/3776) -- Crash on the function isDrawingValuesAllowed [\#3772](https://github.com/danielgindi/Charts/issues/3772) -- How to let y axis line show same space when axisMinimum = 0? [\#3771](https://github.com/danielgindi/Charts/issues/3771) -- Xcode 10.1 pod install Charts open project error!!! [\#3769](https://github.com/danielgindi/Charts/issues/3769) -- Is it possible to make some gaps on a same line plot? [\#3765](https://github.com/danielgindi/Charts/issues/3765) -- Is it possible to draw custom shape on chart and handle touch on it [\#3763](https://github.com/danielgindi/Charts/issues/3763) -- Start slice automatically seleted in pie chart [\#3762](https://github.com/danielgindi/Charts/issues/3762) -- How to change color when press down on pie chart? [\#3761](https://github.com/danielgindi/Charts/issues/3761) -- notifyDataSetChanged\(\) crash when datapoint is highlighted in LineChartView [\#3759](https://github.com/danielgindi/Charts/issues/3759) -- BarChartView display half in first bar when change from group bar to bar only [\#3757](https://github.com/danielgindi/Charts/issues/3757) -- Description of Bar doesn't appear in Horizontal BarChartView [\#3756](https://github.com/danielgindi/Charts/issues/3756) -- Chart spacing between xAxis Labels [\#3755](https://github.com/danielgindi/Charts/issues/3755) -- Granularity makes my app crash because require index from zero [\#3753](https://github.com/danielgindi/Charts/issues/3753) -- this counter will make your app being crash in particular case [\#3752](https://github.com/danielgindi/Charts/issues/3752) -- Bar Chart Drawing is wrong without setting axisminimum [\#3751](https://github.com/danielgindi/Charts/issues/3751) -- Help needed - in changing the position for Piechart in SWIFT [\#3749](https://github.com/danielgindi/Charts/issues/3749) -- When using CombinedChartView, CandleChartData cannot be displayed [\#3748](https://github.com/danielgindi/Charts/issues/3748) -- Linear chart line with different thickness of direction [\#3746](https://github.com/danielgindi/Charts/issues/3746) -- I want to try a lot of line charts corresponding to the X axis is different, how can I achieve it. [\#3745](https://github.com/danielgindi/Charts/issues/3745) -- 折线图-具体时间的数据绘制进图表问题 [\#3743](https://github.com/danielgindi/Charts/issues/3743) -- Changing lineCap doesn't work when mode is not linear/stepped [\#3739](https://github.com/danielgindi/Charts/issues/3739) -- Reverse Pie Chart animation [\#3738](https://github.com/danielgindi/Charts/issues/3738) -- How to create y-axis for empty label ? [\#3735](https://github.com/danielgindi/Charts/issues/3735) -- Different colors for above and below 0 when filling a Line Chart [\#3733](https://github.com/danielgindi/Charts/issues/3733) -- How to adding multiple lines to Line Chart for swift 4.0? [\#3732](https://github.com/danielgindi/Charts/issues/3732) -- How to format y-values drawn on bar? [\#3731](https://github.com/danielgindi/Charts/issues/3731) -- how to moveViewToX and not calling setNeedsDisplay\(\) [\#3730](https://github.com/danielgindi/Charts/issues/3730) -- When using CombinedChartView, CandleChartData cannot be displayed [\#3729](https://github.com/danielgindi/Charts/issues/3729) -- Need Help. How to show labels in xAxis for GroupedBarChart? [\#3728](https://github.com/danielgindi/Charts/issues/3728) -- Force axis granularity [\#3727](https://github.com/danielgindi/Charts/issues/3727) -- Y decimal values error [\#3725](https://github.com/danielgindi/Charts/issues/3725) -- if i have 840entrys how can i set the xaxis what i want .e.g i only want to show the 0 and 840 [\#3723](https://github.com/danielgindi/Charts/issues/3723) -- if i have 840entrys how can i set the xaxis what i want .e.g i only want to show the 0 and 840 [\#3722](https://github.com/danielgindi/Charts/issues/3722) -- Align both right and left axis in the same line [\#3720](https://github.com/danielgindi/Charts/issues/3720) -- The `open var noDataTextAlignment: NSTextAlignment = .left` is missing the `@objc` so it's not exposed in Objective C. [\#3719](https://github.com/danielgindi/Charts/issues/3719) -- How to hide bottom colors & label section in Bar Chat [\#3718](https://github.com/danielgindi/Charts/issues/3718) -- Draw Line chart for non linear X-axis [\#3717](https://github.com/danielgindi/Charts/issues/3717) -- Any way to adjust the candle bar width? [\#3716](https://github.com/danielgindi/Charts/issues/3716) -- xAxis grid line in-between bar rather than center of bar [\#3713](https://github.com/danielgindi/Charts/issues/3713) -- Bubble Chart is not rendering [\#3711](https://github.com/danielgindi/Charts/issues/3711) -- Bubble Chart is not rendering [\#3710](https://github.com/danielgindi/Charts/issues/3710) -- \[Feature request\] Continue line chart beyond x-axis limits [\#3708](https://github.com/danielgindi/Charts/issues/3708) -- Use of unresolved identifier 'UIAccessibility' & Type 'UIAccessibilityTraits' \(aka 'UInt64'\) has no member 'header' [\#3707](https://github.com/danielgindi/Charts/issues/3707) -- How to draw a line chart in sections? [\#3706](https://github.com/danielgindi/Charts/issues/3706) -- \[Feature / Help\] Resize Chart based on data visibility [\#3705](https://github.com/danielgindi/Charts/issues/3705) -- \[Request / Help\] Resize Chart based on hidden / shown lines [\#3704](https://github.com/danielgindi/Charts/issues/3704) -- listening for click events in pieChartView [\#3703](https://github.com/danielgindi/Charts/issues/3703) -- How to add Strings on Left Axis in iOS-charts? [\#3702](https://github.com/danielgindi/Charts/issues/3702) -- \[Charts.BarChartDataSet setDrawIconsEnabled:\]: unrecognized selector sent to instance [\#3700](https://github.com/danielgindi/Charts/issues/3700) -- How can I set xAxis to second line? [\#3698](https://github.com/danielgindi/Charts/issues/3698) -- Add to OC project and the api is so big, How to solve this problem [\#3697](https://github.com/danielgindi/Charts/issues/3697) -- How can I call func stringForValue\(\_ value: Double, axis: AxisBase?\) -\> String [\#3696](https://github.com/danielgindi/Charts/issues/3696) -- Line chart, slide left and right to see more data? How to set it up [\#3693](https://github.com/danielgindi/Charts/issues/3693) -- Value for SWIFT\_VERSION cannot be empty. \(in target 'Charts'\) [\#3692](https://github.com/danielgindi/Charts/issues/3692) -- how to make a combine chart \(line chart + bar chart\) with leftAxis taking the top half area of the combined graph and right axis taking the bottom half [\#3690](https://github.com/danielgindi/Charts/issues/3690) -- is there any library for Gantt chart in ios swift ? please suggest me a solution..... [\#3688](https://github.com/danielgindi/Charts/issues/3688) -- Integrated to xcode10 crash [\#3687](https://github.com/danielgindi/Charts/issues/3687) -- XCode 10 app crash. [\#3686](https://github.com/danielgindi/Charts/issues/3686) -- Getting Errors in Xcode 9.2 [\#3684](https://github.com/danielgindi/Charts/issues/3684) -- How to show double vale with string in y-axis [\#3683](https://github.com/danielgindi/Charts/issues/3683) -- When I have a lot of data, how can I slide to the far right by default? [\#3682](https://github.com/danielgindi/Charts/issues/3682) -- Pie Chart - Slices are not drawn and values are overlapping [\#3679](https://github.com/danielgindi/Charts/issues/3679) -- setVisibleXRangeMaximum is behaving unexpectedly [\#3678](https://github.com/danielgindi/Charts/issues/3678) -- Getting issues after pod update. [\#3677](https://github.com/danielgindi/Charts/issues/3677) -- Pie chart and gradient [\#3674](https://github.com/danielgindi/Charts/issues/3674) -- CandleStickChartRenderer drawDataSet method does not work with CombinedChartView [\#3673](https://github.com/danielgindi/Charts/issues/3673) -- How to Hide Text? [\#3672](https://github.com/danielgindi/Charts/issues/3672) -- Memory leaks were detected also in the demo project [\#3671](https://github.com/danielgindi/Charts/issues/3671) -- Can't add two pie charts in a uiviewcontroller at same time [\#3670](https://github.com/danielgindi/Charts/issues/3670) -- ChartData ValueTextColor can not achieve a variety of colors [\#3669](https://github.com/danielgindi/Charts/issues/3669) -- PieChartView settings color is Invalid [\#3668](https://github.com/danielgindi/Charts/issues/3668) -- DrawValuesEnabled variable unreachable \(Swift 4.2\) [\#3665](https://github.com/danielgindi/Charts/issues/3665) -- Failed to verify bitcode in Charts.framework [\#3663](https://github.com/danielgindi/Charts/issues/3663) -- \[3.2.0\] Excessive Memory leaks in Swift 4.2 related to LineChartView, not present in 3.1.1 w/Swift 4 [\#3649](https://github.com/danielgindi/Charts/issues/3649) -- BarChart - xAxis Labels disappear if not a min of 2 on the screen [\#2854](https://github.com/danielgindi/Charts/issues/2854) -- 柱状图一直横向拉伸, 持续差不多 15s 就崩溃了 [\#2642](https://github.com/danielgindi/Charts/issues/2642) -- Any one try to integrate with SpriteKit/SKScene ? [\#2129](https://github.com/danielgindi/Charts/issues/2129) - -**Merged pull requests:** - -- Add Collection conformances to ChartDataSet types [\#3815](https://github.com/danielgindi/Charts/pull/3815) ([jjatie](https://github.com/jjatie)) -- Fix condition that is checked before `chartTranslated` delegate method call [\#3804](https://github.com/danielgindi/Charts/pull/3804) ([anton-filimonov](https://github.com/anton-filimonov)) -- fix \#3719 [\#3778](https://github.com/danielgindi/Charts/pull/3778) ([liuxuan30](https://github.com/liuxuan30)) -- Turned gradient components and locations into constants [\#3775](https://github.com/danielgindi/Charts/pull/3775) ([jjatie](https://github.com/jjatie)) -- add chartScaled\(\) call after double tap in BarLineChartViewBase [\#3770](https://github.com/danielgindi/Charts/pull/3770) ([artemiusmk](https://github.com/artemiusmk)) -- Fixes sharp edges on the line chart [\#3764](https://github.com/danielgindi/Charts/pull/3764) ([stokatyan](https://github.com/stokatyan)) -- Fix applying lineCap value for line chart data sets \(Fixes \#3739\) [\#3740](https://github.com/danielgindi/Charts/pull/3740) ([anton-filimonov](https://github.com/anton-filimonov)) -- Update README.md [\#3737](https://github.com/danielgindi/Charts/pull/3737) ([justinlew](https://github.com/justinlew)) -- Fix legend offset bug for horizontal bar chart \(Fixes \#3301\) [\#3736](https://github.com/danielgindi/Charts/pull/3736) ([SvenMuc](https://github.com/SvenMuc)) -- Fix wrong assignment to axisMaxLabels property [\#3721](https://github.com/danielgindi/Charts/pull/3721) ([ggirotto](https://github.com/ggirotto)) -- Add missing properties to copy\(with:\) methods [\#3715](https://github.com/danielgindi/Charts/pull/3715) ([dstranz](https://github.com/dstranz)) -- Multiple colors for valueline \(Fixes \#3480\) [\#3709](https://github.com/danielgindi/Charts/pull/3709) ([AlexeiGitH](https://github.com/AlexeiGitH)) -- Fix memory leak after rendering [\#3680](https://github.com/danielgindi/Charts/pull/3680) ([YusukeOba](https://github.com/YusukeOba)) -- fix issue \#3662 [\#3664](https://github.com/danielgindi/Charts/pull/3664) ([Michael-Du](https://github.com/Michael-Du)) -- Make NSUIAccessibilityElement initializer public. [\#3654](https://github.com/danielgindi/Charts/pull/3654) ([417-72KI](https://github.com/417-72KI)) -- improvements in barRect height calculation [\#3650](https://github.com/danielgindi/Charts/pull/3650) ([potato04](https://github.com/potato04)) -- Update document to latest format [\#3621](https://github.com/danielgindi/Charts/pull/3621) ([kemchenj](https://github.com/kemchenj)) -- Feature - ChartView Pan Ended Delegate Call [\#3612](https://github.com/danielgindi/Charts/pull/3612) ([AntonTheDev](https://github.com/AntonTheDev)) -- Axis Renderers Cleanup [\#3164](https://github.com/danielgindi/Charts/pull/3164) ([jjatie](https://github.com/jjatie)) - -## [v3.2.1](https://github.com/danielgindi/Charts/tree/v3.2.1) (2018-10-08) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.2.0...v3.2.1) - -**Closed issues:** - -- Getting error after updating XCode to 10 from 9.4 [\#3661](https://github.com/danielgindi/Charts/issues/3661) -- Bar Chart with horizondal scroll on clicking button. [\#3660](https://github.com/danielgindi/Charts/issues/3660) -- How to change the piechart' valueLineColor and valueTextColor color individually [\#3658](https://github.com/danielgindi/Charts/issues/3658) -- Update to Swift 4.2 [\#3655](https://github.com/danielgindi/Charts/issues/3655) -- I am trying to use charts. for ios app. I am using cocoa pod for dependency setup. After setup i am trying to build the code it throwing compile errors. [\#3653](https://github.com/danielgindi/Charts/issues/3653) -- Type 'RunLoop' has no member 'Mode' [\#3652](https://github.com/danielgindi/Charts/issues/3652) -- Module compiled with Swift 4.1.2 cannot be imported by the Swift 4.2 [\#3651](https://github.com/danielgindi/Charts/issues/3651) -- Type 'RunLoop' has no member 'Mode' [\#3648](https://github.com/danielgindi/Charts/issues/3648) -- As of todays update, I am running into this issue. 'common' renamed RunLoopMode.commonModes [\#3647](https://github.com/danielgindi/Charts/issues/3647) -- Change circleHoleColor for one point [\#3646](https://github.com/danielgindi/Charts/issues/3646) -- This API is not working with Swift 4.1.. even after taking V3.2 of Charts API also.. I fixed it myself :\( [\#3645](https://github.com/danielgindi/Charts/issues/3645) -- Help building Charts Demo [\#3643](https://github.com/danielgindi/Charts/issues/3643) -- Limit line label orientation [\#3641](https://github.com/danielgindi/Charts/issues/3641) -- Is it possible to zoom into a range of values? [\#3639](https://github.com/danielgindi/Charts/issues/3639) -- Not working with SDK-Swift 4.2 [\#3635](https://github.com/danielgindi/Charts/issues/3635) -- getting the error that let is implicitly final please change from open to public in Xcode10 GM Seed [\#3634](https://github.com/danielgindi/Charts/issues/3634) -- How to optimize when the amount of data is large [\#3633](https://github.com/danielgindi/Charts/issues/3633) -- Adding mathematical function plotting [\#3632](https://github.com/danielgindi/Charts/issues/3632) -- Color shadow inside piechart [\#3631](https://github.com/danielgindi/Charts/issues/3631) -- I can not set one label on y axis. [\#3630](https://github.com/danielgindi/Charts/issues/3630) -- where is the code for draw the xAxis and yAxis indicateLine [\#3628](https://github.com/danielgindi/Charts/issues/3628) -- Is it possible to add a vertical label for Y-Axis? Or anyone working on it? [\#3627](https://github.com/danielgindi/Charts/issues/3627) -- Adding dashed lines in between bars in bar graph [\#3626](https://github.com/danielgindi/Charts/issues/3626) -- Create Line chart and/or Bar chart from String Array [\#3625](https://github.com/danielgindi/Charts/issues/3625) -- Change data if button press [\#3624](https://github.com/danielgindi/Charts/issues/3624) -- Pie Chart and Legend [\#3622](https://github.com/danielgindi/Charts/issues/3622) -- Add labels to marker or create custom marker view [\#3620](https://github.com/danielgindi/Charts/issues/3620) -- is there any way we can change the values font size for ipad in the same code? [\#3618](https://github.com/danielgindi/Charts/issues/3618) -- Reg: Display Min and Max Point in a PopUp [\#3617](https://github.com/danielgindi/Charts/issues/3617) -- Charts ScaleX problem [\#3616](https://github.com/danielgindi/Charts/issues/3616) -- CombinedChartView - EXC\_BAD\_ACCESS with doubleTapToZoomEnabled [\#3614](https://github.com/danielgindi/Charts/issues/3614) -- BarChartView How to set the fixed width and spacing? [\#3609](https://github.com/danielgindi/Charts/issues/3609) -- How can I combine two lineCharts? [\#3607](https://github.com/danielgindi/Charts/issues/3607) -- 'Charts/Charts-Swift.h' file not found [\#3603](https://github.com/danielgindi/Charts/issues/3603) -- Combined Chart with Horizontal Bar chart and a Line chart [\#3600](https://github.com/danielgindi/Charts/issues/3600) -- Design customization [\#3597](https://github.com/danielgindi/Charts/issues/3597) -- Move pie chart to specific location in the view [\#3595](https://github.com/danielgindi/Charts/issues/3595) -- Adding text data points to axis [\#3592](https://github.com/danielgindi/Charts/issues/3592) -- Performance hit [\#3585](https://github.com/danielgindi/Charts/issues/3585) -- Multiple colours for setValueTextColor and xAxis label with NSAttributedString [\#3566](https://github.com/danielgindi/Charts/issues/3566) -- Can't set a fixed width for YAxis with outside style. [\#3565](https://github.com/danielgindi/Charts/issues/3565) -- Switch from Grouped Bar chart back to normal [\#3551](https://github.com/danielgindi/Charts/issues/3551) -- X or Y axis interval of the labels [\#3547](https://github.com/danielgindi/Charts/issues/3547) -- How can I plot all Axis Value? [\#3540](https://github.com/danielgindi/Charts/issues/3540) -- When the number of numeric numbers on the Y axis does not agree, the right of the multiple charts will not be aligned. [\#3347](https://github.com/danielgindi/Charts/issues/3347) - -## [v3.2.0](https://github.com/danielgindi/Charts/tree/v3.2.0) (2018-09-17) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.1.1...v3.2.0) - -**Fixed bugs:** - -- Remove noDataText [\#3396](https://github.com/danielgindi/Charts/issues/3396) - -**Closed issues:** - -- Xcode 10 beta & Swift 4.2 support [\#3623](https://github.com/danielgindi/Charts/issues/3623) -- CombinedChartView not population correctly [\#3619](https://github.com/danielgindi/Charts/issues/3619) -- How to remove Cubic Line chart value? [\#3615](https://github.com/danielgindi/Charts/issues/3615) -- How to set Y axis to display different colors of label [\#3611](https://github.com/danielgindi/Charts/issues/3611) -- Installation with carthage error!!! [\#3610](https://github.com/danielgindi/Charts/issues/3610) -- xcodebuild archive error [\#3606](https://github.com/danielgindi/Charts/issues/3606) -- swift library added successfully, but can't reach any of the interfaces [\#3605](https://github.com/danielgindi/Charts/issues/3605) -- BarChart draw sum of values above bar [\#3604](https://github.com/danielgindi/Charts/issues/3604) -- iOS 12 [\#3601](https://github.com/danielgindi/Charts/issues/3601) -- v [\#3598](https://github.com/danielgindi/Charts/issues/3598) -- Compilation errors with Swift 4.1 [\#3596](https://github.com/danielgindi/Charts/issues/3596) -- Bar Chart highlights last clicked bar [\#3594](https://github.com/danielgindi/Charts/issues/3594) -- Remove hightlight, when swipe ends. Or just catch event when swipe ends [\#3588](https://github.com/danielgindi/Charts/issues/3588) -- bars did not displayed as expect [\#3586](https://github.com/danielgindi/Charts/issues/3586) -- what about the property 'gradientPositions' on branch 4.0.0, and how to use [\#3584](https://github.com/danielgindi/Charts/issues/3584) -- Creating markers for Radar Charts [\#3582](https://github.com/danielgindi/Charts/issues/3582) -- How to display value on touch? [\#3581](https://github.com/danielgindi/Charts/issues/3581) -- LineChart \(gradient fill\) is not working in Swift 4 [\#3580](https://github.com/danielgindi/Charts/issues/3580) -- Is there a way to use Line Chart with custom xAxis? [\#3579](https://github.com/danielgindi/Charts/issues/3579) -- Xaxis MutliLine and Value Multiline [\#3575](https://github.com/danielgindi/Charts/issues/3575) -- REACT NATIVE CHART ISSUE [\#3574](https://github.com/danielgindi/Charts/issues/3574) -- Data labels not shown when mutable array of entries used. [\#3573](https://github.com/danielgindi/Charts/issues/3573) -- Grid background color extends beyond data sets [\#3572](https://github.com/danielgindi/Charts/issues/3572) -- real time plot [\#3571](https://github.com/danielgindi/Charts/issues/3571) -- Add shadow effect for pie chart [\#3570](https://github.com/danielgindi/Charts/issues/3570) -- The target “Charts” contains source code developed with Swift 2.x. Xcode 9 does not support building or migrating Swift 2.x targets. [\#3569](https://github.com/danielgindi/Charts/issues/3569) -- What is the best way to show around 100'000 values? [\#3568](https://github.com/danielgindi/Charts/issues/3568) -- CandleChart In CombinedChartView not work [\#3567](https://github.com/danielgindi/Charts/issues/3567) -- the x axis label is not in the right position when I used groupBarChart [\#3564](https://github.com/danielgindi/Charts/issues/3564) -- Bar Charts with only top outline like line chart [\#3562](https://github.com/danielgindi/Charts/issues/3562) -- How to fill the area between two lines on LineChart [\#3561](https://github.com/danielgindi/Charts/issues/3561) -- How to support rose chart? [\#3560](https://github.com/danielgindi/Charts/issues/3560) -- How I can get unselected entry [\#3559](https://github.com/danielgindi/Charts/issues/3559) -- Custom x-axis labels won't show without backing data [\#3557](https://github.com/danielgindi/Charts/issues/3557) -- Cannot build Charts project using Carthage [\#3555](https://github.com/danielgindi/Charts/issues/3555) -- Customizing bar chart [\#3554](https://github.com/danielgindi/Charts/issues/3554) -- Line Chart: Can't display icons unless data labels are also displayed [\#3553](https://github.com/danielgindi/Charts/issues/3553) -- How to enable highlight to some datapoints only when chart is zoomed [\#3552](https://github.com/danielgindi/Charts/issues/3552) -- 关于OC项目引入Charts IPA体积过大的问题 [\#3549](https://github.com/danielgindi/Charts/issues/3549) -- X or Y unit?How to do? [\#3545](https://github.com/danielgindi/Charts/issues/3545) -- Why my chart have line on zero on yAXis [\#3544](https://github.com/danielgindi/Charts/issues/3544) -- Value of type 'EnumeratedSequence\<\[CGPoint\]\>' has no member 'compactMap' [\#3543](https://github.com/danielgindi/Charts/issues/3543) -- Show Axis unit in last label [\#3542](https://github.com/danielgindi/Charts/issues/3542) -- In iOS-Charts how to hide one of Y axis grid lines. [\#3541](https://github.com/danielgindi/Charts/issues/3541) -- Highlighting on a scrollable line graph [\#3539](https://github.com/danielgindi/Charts/issues/3539) -- disable gradient fill Linechart [\#3537](https://github.com/danielgindi/Charts/issues/3537) -- Undefined symbols for architecture - import issues [\#3536](https://github.com/danielgindi/Charts/issues/3536) -- Horizontal Bar Chart Bar Collapsing [\#3535](https://github.com/danielgindi/Charts/issues/3535) -- How to remove space between line chart and top legend [\#3534](https://github.com/danielgindi/Charts/issues/3534) -- Scrolling of bar chart is not working initially. [\#3532](https://github.com/danielgindi/Charts/issues/3532) -- Remove DataSet label [\#3531](https://github.com/danielgindi/Charts/issues/3531) -- HorizontalBarChartView 横向柱状图Y轴问题 [\#3530](https://github.com/danielgindi/Charts/issues/3530) -- 怎么设置柱状图的宽度不变 [\#3529](https://github.com/danielgindi/Charts/issues/3529) -- Is it possible to show the values of a horizontal stacked bar chart centered? [\#3526](https://github.com/danielgindi/Charts/issues/3526) -- how to change LineChartDataSet without strange redraw issues? [\#3525](https://github.com/danielgindi/Charts/issues/3525) -- I want to add image in left side of line graph when we scroll the image is also scroll [\#3521](https://github.com/danielgindi/Charts/issues/3521) -- Fixed label at axis origin [\#3519](https://github.com/danielgindi/Charts/issues/3519) -- Horizontal bar charts labels max out too early [\#3517](https://github.com/danielgindi/Charts/issues/3517) -- multiple PieCharts in on Screen [\#3516](https://github.com/danielgindi/Charts/issues/3516) -- First and Last Bars are not displaying full bars in CombinedChartView [\#3515](https://github.com/danielgindi/Charts/issues/3515) -- Line chart does not render correctly [\#3514](https://github.com/danielgindi/Charts/issues/3514) -- Line chart with LineChartView the line is lower than the minimum values [\#3513](https://github.com/danielgindi/Charts/issues/3513) -- Bar chart is plotting for empty value and Line chart is not appeared in CombinedChartView [\#3511](https://github.com/danielgindi/Charts/issues/3511) -- The shape of graph becomes smaller and smaller in RadarChartGraph [\#3510](https://github.com/danielgindi/Charts/issues/3510) -- not able to display x-axis labels like \(jun, july\) in line chart [\#3509](https://github.com/danielgindi/Charts/issues/3509) -- Move points on LineChart with Pan Gesture [\#3508](https://github.com/danielgindi/Charts/issues/3508) -- 32 bit Device not handling high x-values [\#3507](https://github.com/danielgindi/Charts/issues/3507) -- How do you override the getFormattedValue\(\) method when it doesn't exist? [\#3506](https://github.com/danielgindi/Charts/issues/3506) -- drawBarShadowEnabled is crashing in swift 4 [\#3505](https://github.com/danielgindi/Charts/issues/3505) -- x,y axis and guidelines hide on grah reload [\#3503](https://github.com/danielgindi/Charts/issues/3503) -- 显示float问题 [\#3501](https://github.com/danielgindi/Charts/issues/3501) -- App Crash in release mode not in debug mode [\#3499](https://github.com/danielgindi/Charts/issues/3499) -- Arrow on axis end [\#3498](https://github.com/danielgindi/Charts/issues/3498) -- LineChartView setup "set.mode = LineChartModeCubicBezier",The wave-peak trough of the smooth chart shows no value and deviates from these points [\#3497](https://github.com/danielgindi/Charts/issues/3497) -- Errors when trying to compile a project using Charts [\#3496](https://github.com/danielgindi/Charts/issues/3496) -- Need Help I want to Make 2 lines of X axis label and x axis label background color [\#3495](https://github.com/danielgindi/Charts/issues/3495) -- Getting current xAxis value [\#3494](https://github.com/danielgindi/Charts/issues/3494) -- where to catch the function about marker disappears or appears with dataEntrance [\#3493](https://github.com/danielgindi/Charts/issues/3493) -- Get chart image without rendering chart [\#3492](https://github.com/danielgindi/Charts/issues/3492) -- Cant able to set XAxis Range for custom DateTime formatter [\#3491](https://github.com/danielgindi/Charts/issues/3491) -- How to set the accuracy of data, such as two decimal places, e.g 2.32, 3.21. [\#3490](https://github.com/danielgindi/Charts/issues/3490) -- FFT graphs? [\#3489](https://github.com/danielgindi/Charts/issues/3489) -- Is there a better way to easily add highest and lowest value in candlestick chart [\#3488](https://github.com/danielgindi/Charts/issues/3488) -- Remove piechart center white area [\#3487](https://github.com/danielgindi/Charts/issues/3487) -- xAxis label is croped when using custom valueFormatter [\#3485](https://github.com/danielgindi/Charts/issues/3485) -- Change location of left axis labels [\#3484](https://github.com/danielgindi/Charts/issues/3484) -- How to plot multiple yValue but display selected xValue in xAxis Label? [\#3483](https://github.com/danielgindi/Charts/issues/3483) -- Bubble Charts Choose not jump into the method “chartValueSelected...”? [\#3482](https://github.com/danielgindi/Charts/issues/3482) -- How to plot time value format on x-axis in real time graph [\#3481](https://github.com/danielgindi/Charts/issues/3481) -- How to remove Right side vertical line and values in LineChartView [\#3478](https://github.com/danielgindi/Charts/issues/3478) -- Bar Chart View acting weird \(zooming\) [\#3477](https://github.com/danielgindi/Charts/issues/3477) -- Is their anyway to show legend in rows and columns format? [\#3476](https://github.com/danielgindi/Charts/issues/3476) -- Duplicate Y-axis values while pitching the graph moving up [\#3475](https://github.com/danielgindi/Charts/issues/3475) -- getValuesByTouchPoint / UIView coords to graph coords [\#3474](https://github.com/danielgindi/Charts/issues/3474) -- Pie Chart label not show if its value 0 [\#3473](https://github.com/danielgindi/Charts/issues/3473) -- Build failed [\#3472](https://github.com/danielgindi/Charts/issues/3472) -- What will be the version of pod if I am running on swift 2.3 ? [\#3471](https://github.com/danielgindi/Charts/issues/3471) -- Using SPM results in a "dependency graph is unresolvable" error. [\#3470](https://github.com/danielgindi/Charts/issues/3470) -- Demo is not compiling [\#3469](https://github.com/danielgindi/Charts/issues/3469) -- Question [\#3466](https://github.com/danielgindi/Charts/issues/3466) -- need help [\#3464](https://github.com/danielgindi/Charts/issues/3464) -- bar Chart legend always show one label [\#3462](https://github.com/danielgindi/Charts/issues/3462) -- Monitor rotation angle [\#3461](https://github.com/danielgindi/Charts/issues/3461) -- when clicking chartView,How to prompt multiple markerView [\#3460](https://github.com/danielgindi/Charts/issues/3460) -- The chart will draw incorrectly if LineChart leftAxis.axisMinimum does not start at zero [\#3458](https://github.com/danielgindi/Charts/issues/3458) -- Grouped bar chart plotting wrong !! [\#3457](https://github.com/danielgindi/Charts/issues/3457) -- 为什么我设置X轴不显示 [\#3456](https://github.com/danielgindi/Charts/issues/3456) -- how to set string values on x axis in bar chart? please help [\#3455](https://github.com/danielgindi/Charts/issues/3455) -- Left axis and right axis not same zero line [\#3454](https://github.com/danielgindi/Charts/issues/3454) -- How can make HorizontalBarChart dont start at zero? [\#3453](https://github.com/danielgindi/Charts/issues/3453) -- Can't customise X-axis grid line labels in time value line chart. [\#3452](https://github.com/danielgindi/Charts/issues/3452) -- xAxis gridlines are missing [\#3451](https://github.com/danielgindi/Charts/issues/3451) -- How to add attributed string in Xaxis labels [\#3450](https://github.com/danielgindi/Charts/issues/3450) -- 点击0这一列,所有的柱状图都高亮,可以吗 [\#3449](https://github.com/danielgindi/Charts/issues/3449) -- how to use 'LineChartView' to draw a line between nonzero values? [\#3448](https://github.com/danielgindi/Charts/issues/3448) -- The maximum value of the histogram is not shown. [\#3447](https://github.com/danielgindi/Charts/issues/3447) -- The Y-axis numerical display problem. [\#3446](https://github.com/danielgindi/Charts/issues/3446) -- Is it possible to show x-Axis gridlines when there's only one ChartDataEntry? [\#3444](https://github.com/danielgindi/Charts/issues/3444) -- Chart callback events [\#3443](https://github.com/danielgindi/Charts/issues/3443) -- Help needed with Grouped Horizontal Bar Chart [\#3442](https://github.com/danielgindi/Charts/issues/3442) -- Candlestick doesn't work when x does not start at 0 [\#3441](https://github.com/danielgindi/Charts/issues/3441) -- Is there a callback method? [\#3439](https://github.com/danielgindi/Charts/issues/3439) -- oc项目集成Charts,上架打包失败,提示ERROR ITMS-90171: "Invalid Bundle Structure - The binary file '时间炼.app/Frameworks/Charts.framework/Charts' is not permitted. Your app can’t contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-structure for information on the iOS app bundle structure."。新手,求解答!Thanks [\#3438](https://github.com/danielgindi/Charts/issues/3438) -- Axis label alignment with labelRotationAngle [\#3437](https://github.com/danielgindi/Charts/issues/3437) -- Show grid with axis deactivated [\#3436](https://github.com/danielgindi/Charts/issues/3436) -- Error: cannot use instance member '\_viewPortHandler' within property initializer; property initializers run before 'self' is available [\#3434](https://github.com/danielgindi/Charts/issues/3434) -- remove labels [\#3433](https://github.com/danielgindi/Charts/issues/3433) -- How to set the number of lines for the label of xAxis of HorizontalBarChartView ? [\#3431](https://github.com/danielgindi/Charts/issues/3431) -- xAxis labelText too long, it can not draw complete. [\#3430](https://github.com/danielgindi/Charts/issues/3430) -- Weird crash [\#3427](https://github.com/danielgindi/Charts/issues/3427) -- Why does the default value of the Y label take the decimal point? [\#3426](https://github.com/danielgindi/Charts/issues/3426) -- Why won't the viewport move to the last X value of my line chart? [\#3425](https://github.com/danielgindi/Charts/issues/3425) -- How to disable highlight for some specific values [\#3423](https://github.com/danielgindi/Charts/issues/3423) -- IAxisValueFormatter Error: Index out of range [\#3422](https://github.com/danielgindi/Charts/issues/3422) -- can we animate SelectionShift when selecting a segment of pie chart? [\#3420](https://github.com/danielgindi/Charts/issues/3420) -- Y-axis minimum scale deviation problem. [\#3419](https://github.com/danielgindi/Charts/issues/3419) -- How do you set the scale of the Y-axis? [\#3418](https://github.com/danielgindi/Charts/issues/3418) -- BarLineChartViewBase doubleTapGestureRecognized [\#3417](https://github.com/danielgindi/Charts/issues/3417) -- Remove the box from the pie chart. [\#3416](https://github.com/danielgindi/Charts/issues/3416) -- Unable to set transparent color or clear color to the graphs background. [\#3414](https://github.com/danielgindi/Charts/issues/3414) -- BarChartView has no TouchUpInside event, only TouchDown event. [\#3411](https://github.com/danielgindi/Charts/issues/3411) -- YAxis,the integer bit is missing, showing.0 or.00 [\#3410](https://github.com/danielgindi/Charts/issues/3410) -- touchesEnded can't be called in chart view? [\#3409](https://github.com/danielgindi/Charts/issues/3409) -- Is it possible to show date values in the Stacked BarChart? [\#3408](https://github.com/danielgindi/Charts/issues/3408) -- Passing STRING values to X-Axis currently the SetDataCount is accepting only INT and Double data types [\#3407](https://github.com/danielgindi/Charts/issues/3407) -- compactMap build error [\#3405](https://github.com/danielgindi/Charts/issues/3405) -- Marker in CombinedChart is displayed incorrectly. [\#3404](https://github.com/danielgindi/Charts/issues/3404) -- I need to customize the column chart [\#3401](https://github.com/danielgindi/Charts/issues/3401) -- YAxis show the value .0 or .00 [\#3400](https://github.com/danielgindi/Charts/issues/3400) -- How to do BarChart \(grouped DataSets\)\(OC\)? [\#3399](https://github.com/danielgindi/Charts/issues/3399) -- Can't build success with xcode toolchains swift 4.0.3 release [\#3398](https://github.com/danielgindi/Charts/issues/3398) -- pod not install in xcode 9.3 version [\#3397](https://github.com/danielgindi/Charts/issues/3397) -- Lag during scroll [\#3395](https://github.com/danielgindi/Charts/issues/3395) -- Hide percents on PieChartDiagram when it's so small [\#3394](https://github.com/danielgindi/Charts/issues/3394) -- Value of type 'BarChartDataEntries' has no member 'unit' [\#3393](https://github.com/danielgindi/Charts/issues/3393) -- BarChart 1st bar offset [\#3392](https://github.com/danielgindi/Charts/issues/3392) -- Open up Access Modifiers? [\#3391](https://github.com/danielgindi/Charts/issues/3391) -- ld: warning: directory not found for option '-F/Users/hansenpen/Library/Developer/Xcode/DerivedData/CS\_PROJECT\_-\_ALPHA-hglwyidqwcstjvejzxikmednefgv/Build/Products/Debug-iphonesimulator/Charts' ld: framework not found Charts clang: error: linker command failed with exit code 1 \(use -v to see invocation\) [\#3390](https://github.com/danielgindi/Charts/issues/3390) -- How to install charts Framework using Xcode 9.1 [\#3388](https://github.com/danielgindi/Charts/issues/3388) -- Unable to compile swift 3.2 code from xcode 9.3. I am using 3.1.1 version of charts. [\#3387](https://github.com/danielgindi/Charts/issues/3387) -- why there is flexible space between the BarChatView and the xAxis ? sometimes the space are nil but sometimes the space exist . when it happens the xAxis will draw rect inside the PilaView . it doesn't connected with the XAxisLabelPosition attribute . i cann't figured it out [\#3386](https://github.com/danielgindi/Charts/issues/3386) -- Error building project [\#3385](https://github.com/danielgindi/Charts/issues/3385) -- missing property in latest LineChartView [\#3383](https://github.com/danielgindi/Charts/issues/3383) -- minOffset not working [\#3382](https://github.com/danielgindi/Charts/issues/3382) -- Display Real time data like pulseRate. [\#3381](https://github.com/danielgindi/Charts/issues/3381) -- Grouped bar chart shows up as stacked bar chart after migration. [\#3380](https://github.com/danielgindi/Charts/issues/3380) -- Candle stick chart cds.setBarSpace\(\) not working [\#3379](https://github.com/danielgindi/Charts/issues/3379) -- Line chart fill color goes above/below zeroline [\#3377](https://github.com/danielgindi/Charts/issues/3377) -- Charts Pod not working with Xcode 9.3 \(Swift 4.1\) [\#3376](https://github.com/danielgindi/Charts/issues/3376) -- Can any one know how to draw this charts [\#3375](https://github.com/danielgindi/Charts/issues/3375) -- Compile error on newest ChartsDemo-iOS project [\#3373](https://github.com/danielgindi/Charts/issues/3373) -- ChartIndexAxisValueFormatter Not working in line charts [\#3371](https://github.com/danielgindi/Charts/issues/3371) -- Line Graph xValue [\#3367](https://github.com/danielgindi/Charts/issues/3367) -- xAxis labels are not aligned with grouped bar, when data is more [\#3364](https://github.com/danielgindi/Charts/issues/3364) -- Select the data point programmatically and the highLight is NAN [\#3363](https://github.com/danielgindi/Charts/issues/3363) -- Layout issue with chart legend [\#3359](https://github.com/danielgindi/Charts/issues/3359) -- Is it possible to draw the line on top of a custom XAxisRenderer? [\#3348](https://github.com/danielgindi/Charts/issues/3348) -- How to set x-axis labels with selected round with color. [\#3345](https://github.com/danielgindi/Charts/issues/3345) -- How to hide the grid background on some bar [\#3342](https://github.com/danielgindi/Charts/issues/3342) -- Space between axis line and axis label [\#3336](https://github.com/danielgindi/Charts/issues/3336) -- Can't manage to align plots with x axis values [\#3332](https://github.com/danielgindi/Charts/issues/3332) -- Show the last x axis label on bar chart [\#3324](https://github.com/danielgindi/Charts/issues/3324) -- HorizontalBarChartView display partial data [\#3320](https://github.com/danielgindi/Charts/issues/3320) -- 如何在滑动代理中获取当前中心位置所对应的数据源的索引 [\#3318](https://github.com/danielgindi/Charts/issues/3318) -- Visible max and min Y Values [\#2600](https://github.com/danielgindi/Charts/issues/2600) -- Invert xAxis label [\#2504](https://github.com/danielgindi/Charts/issues/2504) -- @junito1209 please explain what are you doing on Charts wiki page [\#2261](https://github.com/danielgindi/Charts/issues/2261) -- Crash Observed when AxisRenderer interval is becoming NaN [\#2168](https://github.com/danielgindi/Charts/issues/2168) -- Problem selecting bubbles on the same xIndex [\#2060](https://github.com/danielgindi/Charts/issues/2060) - -**Merged pull requests:** - -- Add Swift version 4.1 to podspec [\#3608](https://github.com/danielgindi/Charts/pull/3608) ([larryonoff](https://github.com/larryonoff)) -- update barRect.size.height calculation [\#3587](https://github.com/danielgindi/Charts/pull/3587) ([potato04](https://github.com/potato04)) -- Add label colors to legend entries [\#3558](https://github.com/danielgindi/Charts/pull/3558) ([petester42](https://github.com/petester42)) -- Support inlune bubble viz selection [\#3548](https://github.com/danielgindi/Charts/pull/3548) ([chuynadamas](https://github.com/chuynadamas)) -- fix the error title for demo [\#3528](https://github.com/danielgindi/Charts/pull/3528) ([yangasahi](https://github.com/yangasahi)) -- Changes for Swift 4.2, Xcode 10 and iOS 12 [\#3522](https://github.com/danielgindi/Charts/pull/3522) ([jlcanale](https://github.com/jlcanale)) -- Accessibility Support for \(most\) Chart types [\#3520](https://github.com/danielgindi/Charts/pull/3520) ([mathewa6](https://github.com/mathewa6)) -- Changed comment that referenced getFormattedValue\(\) method in IValueFormatter [\#3518](https://github.com/danielgindi/Charts/pull/3518) ([JCMcLovin](https://github.com/JCMcLovin)) -- Fix merge conflicts in \#3218 [\#3500](https://github.com/danielgindi/Charts/pull/3500) ([petester42](https://github.com/petester42)) -- Make legendRenderer property public in order to be externally customizable [\#3445](https://github.com/danielgindi/Charts/pull/3445) ([nagykatalin](https://github.com/nagykatalin)) -- Fix broken demo link in readme [\#3440](https://github.com/danielgindi/Charts/pull/3440) ([robert-cronin](https://github.com/robert-cronin)) -- Added clamping function for `Comparable` [\#3435](https://github.com/danielgindi/Charts/pull/3435) ([jjatie](https://github.com/jjatie)) -- Fix CocoaPods compilation [\#3432](https://github.com/danielgindi/Charts/pull/3432) ([larryonoff](https://github.com/larryonoff)) -- update candle chart view options in demo project [\#3424](https://github.com/danielgindi/Charts/pull/3424) ([cuong1112035](https://github.com/cuong1112035)) -- Add Objective-c compatible for turning off drag in X and Y Axis separately [\#3421](https://github.com/danielgindi/Charts/pull/3421) ([lennonhe](https://github.com/lennonhe)) -- Added gradient line drawing to LineChartRenderer. based on PR \#3142 [\#3415](https://github.com/danielgindi/Charts/pull/3415) ([larryonoff](https://github.com/larryonoff)) -- Add more render options for y axis labels [\#3406](https://github.com/danielgindi/Charts/pull/3406) ([alexrepty](https://github.com/alexrepty)) -- Refactored ChartData [\#3169](https://github.com/danielgindi/Charts/pull/3169) ([jjatie](https://github.com/jjatie)) -- Dataset logic cleanup [\#3001](https://github.com/danielgindi/Charts/pull/3001) ([jjatie](https://github.com/jjatie)) -- Added value text rotation [\#2200](https://github.com/danielgindi/Charts/pull/2200) ([chinh-tran](https://github.com/chinh-tran)) - -## [v3.1.1](https://github.com/danielgindi/Charts/tree/v3.1.1) (2018-04-02) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.1.1...v3.1.1) - -## [3.1.1](https://github.com/danielgindi/Charts/tree/3.1.1) (2018-04-02) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.1.0...3.1.1) - -**Fixed bugs:** - -- ChartsDemo-Swift crashes [\#3327](https://github.com/danielgindi/Charts/issues/3327) - -**Closed issues:** - -- Why does yVals start with a negative number when the data is empty? [\#3374](https://github.com/danielgindi/Charts/issues/3374) -- Compile Error [\#3372](https://github.com/danielgindi/Charts/issues/3372) -- Y Axis need to add Time slots for current day [\#3368](https://github.com/danielgindi/Charts/issues/3368) -- inconsistent include of UIKit vs AppKit [\#3362](https://github.com/danielgindi/Charts/issues/3362) -- Crash Issue in BarChartData [\#3361](https://github.com/danielgindi/Charts/issues/3361) -- How can we format the LABEL used for values? [\#3354](https://github.com/danielgindi/Charts/issues/3354) -- Remove value labels padding [\#3350](https://github.com/danielgindi/Charts/issues/3350) -- Does Charts support real-time drawing [\#3344](https://github.com/danielgindi/Charts/issues/3344) -- Constant for Bar width and space [\#3343](https://github.com/danielgindi/Charts/issues/3343) -- Bar Graph groupBars function issue [\#1966](https://github.com/danielgindi/Charts/issues/1966) -- bar chart from dates [\#1963](https://github.com/danielgindi/Charts/issues/1963) -- A crash of CombinedChartView,when touch on the chart view\(chas\) [\#1957](https://github.com/danielgindi/Charts/issues/1957) -- Graph doesn't display on older iPads [\#1954](https://github.com/danielgindi/Charts/issues/1954) -- Regarding deprecated xValues [\#1947](https://github.com/danielgindi/Charts/issues/1947) -- Charts being overlaid inside UICollectionView using dequeueReusableCell [\#1943](https://github.com/danielgindi/Charts/issues/1943) -- We are unable to split the label in two lines. [\#1941](https://github.com/danielgindi/Charts/issues/1941) -- Make releases so they follow the Semantic Versioning \(SemVer\) [\#1930](https://github.com/danielgindi/Charts/issues/1930) -- Marker Position [\#1876](https://github.com/danielgindi/Charts/issues/1876) -- Charts 3.0 unable to draw discontinuous line chart [\#1866](https://github.com/danielgindi/Charts/issues/1866) -- Radar charts custom labels [\#1840](https://github.com/danielgindi/Charts/issues/1840) -- Unable to subclass [\#1838](https://github.com/danielgindi/Charts/issues/1838) -- offset goes wrong when using mutiple bar chart in combined chart [\#1813](https://github.com/danielgindi/Charts/issues/1813) -- Histogram Example? [\#1792](https://github.com/danielgindi/Charts/issues/1792) -- Sunburst Chart [\#1715](https://github.com/danielgindi/Charts/issues/1715) -- Line chart with preview [\#1520](https://github.com/danielgindi/Charts/issues/1520) -- Get scroll position of dragable line chart [\#1272](https://github.com/danielgindi/Charts/issues/1272) -- Trend line in scatter chart? [\#1263](https://github.com/danielgindi/Charts/issues/1263) -- Can we use custom image instead of Circle in line chart? [\#1206](https://github.com/danielgindi/Charts/issues/1206) -- Legend with NSAttributedString and multiple lines on Vertical [\#1193](https://github.com/danielgindi/Charts/issues/1193) -- Trim the legend view [\#1192](https://github.com/danielgindi/Charts/issues/1192) -- Chart auto min/max does not take into account second line [\#1136](https://github.com/danielgindi/Charts/issues/1136) -- Add different colorHoleColor for different datapoints in a LineChart iOS Charts [\#1104](https://github.com/danielgindi/Charts/issues/1104) -- How to remove marker programatically [\#1097](https://github.com/danielgindi/Charts/issues/1097) -- Overlapping issues in x and y axis values [\#1048](https://github.com/danielgindi/Charts/issues/1048) -- Enhancement: Horizontal Combined Chart [\#1041](https://github.com/danielgindi/Charts/issues/1041) -- Enhancement: Linked x-axis or stacked y-axis. [\#1022](https://github.com/danielgindi/Charts/issues/1022) -- Scale or zoom to particular axis or point in Combined chart view [\#993](https://github.com/danielgindi/Charts/issues/993) -- Max Value Y - Axis = 1 , How to set Y-Axis increment Y- Value ? [\#989](https://github.com/danielgindi/Charts/issues/989) -- Drawing value for the WholeStack only [\#926](https://github.com/danielgindi/Charts/issues/926) -- Pie chart Y values overlap [\#779](https://github.com/danielgindi/Charts/issues/779) -- Swift Package Manager [\#753](https://github.com/danielgindi/Charts/issues/753) -- Stacked bar chart with different number of rects [\#744](https://github.com/danielgindi/Charts/issues/744) -- The label value position with the same yAxis and different value. [\#724](https://github.com/danielgindi/Charts/issues/724) -- Minimum / maximum scale causes the chart to slide sideways when trying to pinch zoom further [\#437](https://github.com/danielgindi/Charts/issues/437) -- Top and bottom grid line diverging widths [\#411](https://github.com/danielgindi/Charts/issues/411) - -**Merged pull requests:** - -- Swift 4.1 [\#3370](https://github.com/danielgindi/Charts/pull/3370) ([jjatie](https://github.com/jjatie)) -- Update ILineRadarChartDataSet.swift [\#3366](https://github.com/danielgindi/Charts/pull/3366) ([Ewg777](https://github.com/Ewg777)) -- Add option to disable clipping data to contentRect [\#3360](https://github.com/danielgindi/Charts/pull/3360) ([wtmoose](https://github.com/wtmoose)) - -## [v3.1.0](https://github.com/danielgindi/Charts/tree/v3.1.0) (2018-03-22) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.1.0...v3.1.0) - -## [3.1.0](https://github.com/danielgindi/Charts/tree/3.1.0) (2018-03-22) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.0.5...3.1.0) - -**Fixed bugs:** - -- Bug in ZoomViewJob? [\#3299](https://github.com/danielgindi/Charts/issues/3299) -- BarChartView bug if set barWidth was 1.0? [\#3213](https://github.com/danielgindi/Charts/issues/3213) -- Scatter circle disappear when chart scaled [\#3185](https://github.com/danielgindi/Charts/issues/3185) -- PieChart `highlightValue\(x:y:dataSetIndex:\)` should provide error for dataSetIndex \> 1 [\#3146](https://github.com/danielgindi/Charts/issues/3146) -- PieChart size is extremely small in a UITableViewCell [\#3108](https://github.com/danielgindi/Charts/issues/3108) -- Handling critical Y values with autoScaleMinMaxEnabled [\#2053](https://github.com/danielgindi/Charts/issues/2053) -- Charts 3.0 - Error: this application, or a library it uses, has passed an invalid numeric value \(NaN, or not-a-number\) to CoreGraphics API and this value is being ignored [\#1626](https://github.com/danielgindi/Charts/issues/1626) - -**Closed issues:** - -- Programatically passed renderer is corrupting animations [\#3349](https://github.com/danielgindi/Charts/issues/3349) -- How to show Integer value [\#3346](https://github.com/danielgindi/Charts/issues/3346) -- Does not build on Xcode 8.3.3 & Swift 3 [\#3341](https://github.com/danielgindi/Charts/issues/3341) -- how to use pod 'Charts' into objective c project , i create header file to use swift , but what should i do after create header file ? [\#3338](https://github.com/danielgindi/Charts/issues/3338) -- How to show all labels in xAxis ? [\#3337](https://github.com/danielgindi/Charts/issues/3337) -- How to set the interval in X axis label [\#3335](https://github.com/danielgindi/Charts/issues/3335) -- Line chart with solid and dashed line [\#3334](https://github.com/danielgindi/Charts/issues/3334) -- Code signing is required for product type 'Application' in SDK 'iOS 11.2' [\#3333](https://github.com/danielgindi/Charts/issues/3333) -- My project within framework target and pod Charts into my framework target can't load Charts framework [\#3328](https://github.com/danielgindi/Charts/issues/3328) -- Swift 4.1 compilation warnings [\#3323](https://github.com/danielgindi/Charts/issues/3323) -- Two Horizontal grid lines always appear above Base Axis line [\#3322](https://github.com/danielgindi/Charts/issues/3322) -- BalloonMarker support swift 3 ? [\#3321](https://github.com/danielgindi/Charts/issues/3321) -- Unable to get horizontal scrolling in bar chart [\#3319](https://github.com/danielgindi/Charts/issues/3319) -- Horizontal Bar Chart xAxis formatted label textColor [\#3317](https://github.com/danielgindi/Charts/issues/3317) -- Wrong dataSetIndex in stringForValue delegate method [\#3314](https://github.com/danielgindi/Charts/issues/3314) -- Limit line in the left and right drag or zoom can be fixed [\#3313](https://github.com/danielgindi/Charts/issues/3313) -- Save picture crash in demos on iOS 11+ [\#3311](https://github.com/danielgindi/Charts/issues/3311) -- How to display reload text in iOS-Charts? [\#3310](https://github.com/danielgindi/Charts/issues/3310) -- Can't show Label text in XAxis [\#3308](https://github.com/danielgindi/Charts/issues/3308) -- Straight lines [\#3306](https://github.com/danielgindi/Charts/issues/3306) -- Values on X axis issue [\#3304](https://github.com/danielgindi/Charts/issues/3304) -- when setInverted\(true\) in the leftAxis of CombinedChart, the candleStickData doesnot show ? [\#3303](https://github.com/danielgindi/Charts/issues/3303) -- HorizontalBarChart X axe labels duplicated [\#3300](https://github.com/danielgindi/Charts/issues/3300) -- how can i change label color? [\#3298](https://github.com/danielgindi/Charts/issues/3298) -- value granularity [\#3296](https://github.com/danielgindi/Charts/issues/3296) -- Better way to manage Stacked Bar Chart Value labels? [\#3295](https://github.com/danielgindi/Charts/issues/3295) -- Remove Y axis border line in Line Graph [\#3294](https://github.com/danielgindi/Charts/issues/3294) -- XAxisRenderer not called [\#3293](https://github.com/danielgindi/Charts/issues/3293) -- How to display string value on xAxis label in line chart [\#3292](https://github.com/danielgindi/Charts/issues/3292) -- how to change the color of text that displayed below the chart ios swift 3 [\#3288](https://github.com/danielgindi/Charts/issues/3288) -- color in BalloonMarker is never used [\#3287](https://github.com/danielgindi/Charts/issues/3287) -- Question: LineChart variable line thickness? [\#3285](https://github.com/danielgindi/Charts/issues/3285) -- Modify selected slice [\#3284](https://github.com/danielgindi/Charts/issues/3284) -- Put shadow under slice [\#3283](https://github.com/danielgindi/Charts/issues/3283) -- How can I take selected value index in Pie Chart [\#3282](https://github.com/danielgindi/Charts/issues/3282) -- hide other label when one slice of pie chart was selected [\#3281](https://github.com/danielgindi/Charts/issues/3281) -- How to show custom x and y axis details in LineChart in objective c ??? [\#3280](https://github.com/danielgindi/Charts/issues/3280) -- I need to put dates from an array on xAxis [\#3277](https://github.com/danielgindi/Charts/issues/3277) -- Is there a way to round the corners of the BalloonMarker? [\#3276](https://github.com/danielgindi/Charts/issues/3276) -- Set values not showing until chart is zoomed [\#3275](https://github.com/danielgindi/Charts/issues/3275) -- How to add gap between chart and legend? [\#3274](https://github.com/danielgindi/Charts/issues/3274) -- LineChart : How to show the grid in right axis [\#3271](https://github.com/danielgindi/Charts/issues/3271) -- How to custom axis' label in horizontal bar chart [\#3270](https://github.com/danielgindi/Charts/issues/3270) -- LineChart: How to fix space between point on xAxis [\#3269](https://github.com/danielgindi/Charts/issues/3269) -- Line Chart Issue in CombinedChartView [\#3268](https://github.com/danielgindi/Charts/issues/3268) -- LineChartRenderer - drawHighlighted:context:indices: [\#3267](https://github.com/danielgindi/Charts/issues/3267) -- Scatter Bar Char - Plots on axis \(0,0\) partially visible [\#3266](https://github.com/danielgindi/Charts/issues/3266) -- is it support the ios 7??? [\#3263](https://github.com/danielgindi/Charts/issues/3263) -- Combined chart for candlestick + bar [\#3262](https://github.com/danielgindi/Charts/issues/3262) -- setScatterShape applied to Legend also [\#3261](https://github.com/danielgindi/Charts/issues/3261) -- ChartDataSet min and max values not recalculated when calling clear\(\) [\#3260](https://github.com/danielgindi/Charts/issues/3260) -- How to realize the Line and the bar Chart in the same one Chart? [\#3259](https://github.com/danielgindi/Charts/issues/3259) -- '\_xBounds' and other variables inaccessible due to 'internal' protection level workaround [\#3258](https://github.com/danielgindi/Charts/issues/3258) -- //view\_line\_graph.centerViewTo\(xValue: Double\(dataEntries\[pos\].x\) , yValue: Double\(dataEntries\[pos\].y\), axis: YAxis.AxisDependency.right\) [\#3257](https://github.com/danielgindi/Charts/issues/3257) -- dyld: Library not loaded: @rpath/Charts.framework/Charts [\#3250](https://github.com/danielgindi/Charts/issues/3250) -- X Axis disapeared [\#3249](https://github.com/danielgindi/Charts/issues/3249) -- Save zoom state [\#3248](https://github.com/danielgindi/Charts/issues/3248) -- leftAxis label bug? [\#3246](https://github.com/danielgindi/Charts/issues/3246) -- x-axis label jumps when zoomed in and side scrolling. [\#3245](https://github.com/danielgindi/Charts/issues/3245) -- avoidFirstLastClippingEnabled not working and set last circleColor a different value [\#3244](https://github.com/danielgindi/Charts/issues/3244) -- Got totally 50 errors after install CocoaPods ..! I am using Swift 4.0 [\#3243](https://github.com/danielgindi/Charts/issues/3243) -- Error in Library When added pod file [\#3242](https://github.com/danielgindi/Charts/issues/3242) -- How to do multiple data on x axis? [\#3241](https://github.com/danielgindi/Charts/issues/3241) -- Missing entries in PieChartDataEntry legends. [\#3240](https://github.com/danielgindi/Charts/issues/3240) -- Candle Stick does not show [\#3239](https://github.com/danielgindi/Charts/issues/3239) -- How i give LineChart Entry using x index and y value in Charts '3.0.4'? help wanted [\#3238](https://github.com/danielgindi/Charts/issues/3238) -- ChartDataEntry with icons shows scatter shape at same time [\#3237](https://github.com/danielgindi/Charts/issues/3237) -- HorizontalBarChart - Right axis label starts with the highest value up to the same value [\#3235](https://github.com/danielgindi/Charts/issues/3235) -- Carthage Charts [\#3234](https://github.com/danielgindi/Charts/issues/3234) -- 3.0.5 Bar chart xAxis valueFormatter regression - no data points shown. [\#3233](https://github.com/danielgindi/Charts/issues/3233) -- Pin the graph on one side while zooming [\#3232](https://github.com/danielgindi/Charts/issues/3232) -- yAxisMaximum auto-increment RadarChartView [\#3231](https://github.com/danielgindi/Charts/issues/3231) -- Compile issue after install pod 'Chart' [\#3230](https://github.com/danielgindi/Charts/issues/3230) -- corner line chart [\#3227](https://github.com/danielgindi/Charts/issues/3227) -- Make specific pieChart segment stick out and go back to normal size, animated [\#3224](https://github.com/danielgindi/Charts/issues/3224) -- Dash line and highlighted top value [\#3221](https://github.com/danielgindi/Charts/issues/3221) -- Why is the xAxis Value Formater so often called? [\#3220](https://github.com/danielgindi/Charts/issues/3220) -- How easy is to add some technical indicators? [\#3219](https://github.com/danielgindi/Charts/issues/3219) -- How to set X-Axis data to bottom of chart with strings data? [\#3212](https://github.com/danielgindi/Charts/issues/3212) -- how to drag the LineChartView [\#3211](https://github.com/danielgindi/Charts/issues/3211) -- Release 3.0.5 contains version number inconsistencies [\#3210](https://github.com/danielgindi/Charts/issues/3210) -- Unable to Hide PieChart Legends. [\#3209](https://github.com/danielgindi/Charts/issues/3209) -- Recent release with my Swift3 project [\#3208](https://github.com/danielgindi/Charts/issues/3208) -- Cannot set double value in Combined chart line chart. [\#3205](https://github.com/danielgindi/Charts/issues/3205) -- Bar charts with different column widths [\#3204](https://github.com/danielgindi/Charts/issues/3204) -- Labels on x-axes not linked to chart data points [\#3203](https://github.com/danielgindi/Charts/issues/3203) -- Remark: The AppCoda tutorial is outdated [\#3196](https://github.com/danielgindi/Charts/issues/3196) -- Unable to set strings as values in x axis of linechart [\#3195](https://github.com/danielgindi/Charts/issues/3195) -- drag event issie [\#3194](https://github.com/danielgindi/Charts/issues/3194) -- Custom XAxisRenderer labels are shifting around when scrolling [\#3193](https://github.com/danielgindi/Charts/issues/3193) -- How to asynchronous drawings LineChart? [\#3192](https://github.com/danielgindi/Charts/issues/3192) -- How do I listen to the left or right to the end of the event when I zoom in on the lineCharts? [\#3184](https://github.com/danielgindi/Charts/issues/3184) -- Want to delete color set beside legend label [\#3180](https://github.com/danielgindi/Charts/issues/3180) -- How to show/hide Stacked Bar Chart yValue? [\#3175](https://github.com/danielgindi/Charts/issues/3175) -- Readme needs to be updated for 3.0.5 [\#3170](https://github.com/danielgindi/Charts/issues/3170) -- Add Axis description to Charts Framework [\#3168](https://github.com/danielgindi/Charts/issues/3168) -- ChartViewDelegate not called when barChart is out of screen [\#3165](https://github.com/danielgindi/Charts/issues/3165) -- dash line \(separators\) in between in bars. [\#3163](https://github.com/danielgindi/Charts/issues/3163) -- StackedBarChart Value on middle of each stacked bar chart [\#3162](https://github.com/danielgindi/Charts/issues/3162) -- ChartLimitLine Label Position [\#3161](https://github.com/danielgindi/Charts/issues/3161) -- bar chat [\#3158](https://github.com/danielgindi/Charts/issues/3158) -- Bar coloring [\#3157](https://github.com/danielgindi/Charts/issues/3157) -- HorizontalBarChart doesn't display bar draw values when bar is partially off ViewPort [\#3155](https://github.com/danielgindi/Charts/issues/3155) -- X-Axis Labels not showing [\#3154](https://github.com/danielgindi/Charts/issues/3154) -- How to make highlight scrolling on chart not trigger parent scrollView? \[help\] [\#3153](https://github.com/danielgindi/Charts/issues/3153) -- How to fill the color like the marked part of this following picture? Thanks a lot! [\#3144](https://github.com/danielgindi/Charts/issues/3144) -- finger leaves the chart area [\#3128](https://github.com/danielgindi/Charts/issues/3128) -- Technical Support in Github [\#3126](https://github.com/danielgindi/Charts/issues/3126) -- Plotting the bar from top to bottom \(in reverse manner\) [\#3125](https://github.com/danielgindi/Charts/issues/3125) -- pieChart Data name overlap [\#3109](https://github.com/danielgindi/Charts/issues/3109) -- LineChart with different colors based on values. [\#3107](https://github.com/danielgindi/Charts/issues/3107) -- AxisBase Value Formatter [\#3105](https://github.com/danielgindi/Charts/issues/3105) -- Multiple charts in same view [\#3103](https://github.com/danielgindi/Charts/issues/3103) -- Draw dotted x-axis timeline [\#3102](https://github.com/danielgindi/Charts/issues/3102) -- PieChart value labels are overlaping when values are between 0 to 9 [\#2948](https://github.com/danielgindi/Charts/issues/2948) -- xValues on X-Axis for non-continuous dates [\#2398](https://github.com/danielgindi/Charts/issues/2398) -- y-labels position is wrong,when i set autoScaleMinMaxEnabled = YES [\#2379](https://github.com/danielgindi/Charts/issues/2379) -- Distance between chart legend and the horizontal bar chart is to big in case of rotated labels [\#2138](https://github.com/danielgindi/Charts/issues/2138) -- How to set LabelCount bigger than 25 in HorizatalBarView [\#2085](https://github.com/danielgindi/Charts/issues/2085) - -**Merged pull requests:** - -- bump to 3.1 release [\#3357](https://github.com/danielgindi/Charts/pull/3357) ([liuxuan30](https://github.com/liuxuan30)) -- Refactors -\[tableView:cellForRowAtIndexPath:\] [\#3326](https://github.com/danielgindi/Charts/pull/3326) ([valeriyvan](https://github.com/valeriyvan)) -- minor bug fix in favor of 3.1 release [\#3312](https://github.com/danielgindi/Charts/pull/3312) ([liuxuan30](https://github.com/liuxuan30)) -- add pie chart unit tests [\#3297](https://github.com/danielgindi/Charts/pull/3297) ([liuxuan30](https://github.com/liuxuan30)) -- Align Objc and Swift demos balloon marker [\#3291](https://github.com/danielgindi/Charts/pull/3291) ([liuxuan30](https://github.com/liuxuan30)) -- for \#3146. add a warning message if pie chart has more than one data set [\#3286](https://github.com/danielgindi/Charts/pull/3286) ([liuxuan30](https://github.com/liuxuan30)) -- Issue templates [\#3278](https://github.com/danielgindi/Charts/pull/3278) ([jjatie](https://github.com/jjatie)) -- Min and Max reset when clearing ChartDataSet \(Fixes \#3260\) [\#3265](https://github.com/danielgindi/Charts/pull/3265) ([carlo-](https://github.com/carlo-)) -- Restored old performance in ChartDataSet [\#3216](https://github.com/danielgindi/Charts/pull/3216) ([jjatie](https://github.com/jjatie)) -- Support other bundle than main MarkerView.viewFromXib\(\) [\#3215](https://github.com/danielgindi/Charts/pull/3215) ([charlymr](https://github.com/charlymr)) -- BubbleChart uses correct colour for index now. [\#3202](https://github.com/danielgindi/Charts/pull/3202) ([jjatie](https://github.com/jjatie)) -- Added custom text alignment for noData [\#3199](https://github.com/danielgindi/Charts/pull/3199) ([jjatie](https://github.com/jjatie)) -- Call setNeedsDisplay\(\) to trigger render noDataText [\#3198](https://github.com/danielgindi/Charts/pull/3198) ([liuxuan30](https://github.com/liuxuan30)) -- Updated README for 3.0.5 [\#3183](https://github.com/danielgindi/Charts/pull/3183) ([jjatie](https://github.com/jjatie)) -- Balloon Marker indicates position of data [\#3181](https://github.com/danielgindi/Charts/pull/3181) ([jjatie](https://github.com/jjatie)) -- Fixed a duplicated assignment compared with obj-c code. [\#3179](https://github.com/danielgindi/Charts/pull/3179) ([canapio](https://github.com/canapio)) -- Fixed X-Axis Labels Not Showing \(\#3154\) [\#3174](https://github.com/danielgindi/Charts/pull/3174) ([leedsalex](https://github.com/leedsalex)) -- fix programatical unhighlighting for BarCharView [\#3159](https://github.com/danielgindi/Charts/pull/3159) ([jekahy](https://github.com/jekahy)) -- Removed optionality from valueFormatter where appropriate [\#3106](https://github.com/danielgindi/Charts/pull/3106) ([jjatie](https://github.com/jjatie)) -- Moved the default value formatter [\#3088](https://github.com/danielgindi/Charts/pull/3088) ([jjatie](https://github.com/jjatie)) -- Utils Cleanup [\#3054](https://github.com/danielgindi/Charts/pull/3054) ([jjatie](https://github.com/jjatie)) -- weak -\> unowned [\#3039](https://github.com/danielgindi/Charts/pull/3039) ([jjatie](https://github.com/jjatie)) -- Fix BalloonMarker's text position calculation, consider insets [\#3035](https://github.com/danielgindi/Charts/pull/3035) ([yangcaimu](https://github.com/yangcaimu)) -- Chartdata collection refactor [\#3024](https://github.com/danielgindi/Charts/pull/3024) ([jjatie](https://github.com/jjatie)) -- Chartdata collection conformance [\#3023](https://github.com/danielgindi/Charts/pull/3023) ([jjatie](https://github.com/jjatie)) -- Give the users customizable axis label limits \(Fixes \#2085\) [\#2894](https://github.com/danielgindi/Charts/pull/2894) ([igzrobertoestrada](https://github.com/igzrobertoestrada)) -- For \#2840. add dataIndex parameter in `highlightValue\(\)` calls [\#2852](https://github.com/danielgindi/Charts/pull/2852) ([liuxuan30](https://github.com/liuxuan30)) -- fix \#2356 crash if floor\(10.0 \* intervalMagnitude\) is 0.0 [\#2377](https://github.com/danielgindi/Charts/pull/2377) ([liuxuan30](https://github.com/liuxuan30)) -- Fixes the distance issue between the legend and the horizontal bar chart \(Fixes \#2138\) [\#2214](https://github.com/danielgindi/Charts/pull/2214) ([SvenMuc](https://github.com/SvenMuc)) - -## [3.0.5](https://github.com/danielgindi/Charts/tree/3.0.5) (2018-01-08) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.0.5...3.0.5) - -## [v3.0.5](https://github.com/danielgindi/Charts/tree/v3.0.5) (2018-01-08) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.0.4...v3.0.5) - -**Implemented enhancements:** - -- range, and therefore interval, is NaN in computeAxisValues [\#2845](https://github.com/danielgindi/Charts/issues/2845) -- Crash when calling `func highlightValue\(x: Double, dataSetIndex: Int, callDelegate: Bool\)` [\#2840](https://github.com/danielgindi/Charts/issues/2840) - -**Fixed bugs:** - -- Combined Chart, when highlight is active, bars hides line [\#3091](https://github.com/danielgindi/Charts/issues/3091) -- A problem of CombinedChartView's YAxis [\#1830](https://github.com/danielgindi/Charts/issues/1830) - -**Closed issues:** - -- Command /bin/sh failed with exit code 1 [\#3156](https://github.com/danielgindi/Charts/issues/3156) -- Xcode 9 / Swift 4 issue with current master [\#3152](https://github.com/danielgindi/Charts/issues/3152) -- Is it possible to show value on touch next to highlight position? [\#3151](https://github.com/danielgindi/Charts/issues/3151) -- Remove legend [\#3150](https://github.com/danielgindi/Charts/issues/3150) -- Add a shadow to the line chart [\#3148](https://github.com/danielgindi/Charts/issues/3148) -- Missing alternate x-axis labels on line chart [\#3139](https://github.com/danielgindi/Charts/issues/3139) -- Can the histogram set the corner? [\#3138](https://github.com/danielgindi/Charts/issues/3138) -- Charts demo ipa file request [\#3137](https://github.com/danielgindi/Charts/issues/3137) -- Main Thread Checker: UI API called on background thread. [\#3129](https://github.com/danielgindi/Charts/issues/3129) -- How to get X\_axis touch points coordinates in radar graph [\#3127](https://github.com/danielgindi/Charts/issues/3127) -- Division by zero crash in AxisRendererBase [\#3124](https://github.com/danielgindi/Charts/issues/3124) -- why bar chart non start at zero [\#3123](https://github.com/danielgindi/Charts/issues/3123) -- BarChart - Show X-Axis with Step as 1 [\#3122](https://github.com/danielgindi/Charts/issues/3122) -- Have Line Graph Value Labels Above/Below Independently [\#3120](https://github.com/danielgindi/Charts/issues/3120) -- Corner Radius on Grid Background [\#3119](https://github.com/danielgindi/Charts/issues/3119) -- ChartsDemo doesn't compile [\#3116](https://github.com/danielgindi/Charts/issues/3116) -- Rounded line chart [\#3115](https://github.com/danielgindi/Charts/issues/3115) -- value of barChart covered by title [\#3113](https://github.com/danielgindi/Charts/issues/3113) -- PieChartView Can not highlight which i want to highlighted [\#3110](https://github.com/danielgindi/Charts/issues/3110) -- How to scroll bar chart if max values to show? [\#3101](https://github.com/danielgindi/Charts/issues/3101) -- Is it possible to draw a chart like this? [\#3097](https://github.com/danielgindi/Charts/issues/3097) -- How to disable the rotation option of pie charts in iOS charts? [\#3096](https://github.com/danielgindi/Charts/issues/3096) -- How to disable the rotation option of pie charts in iOS charts? [\#3095](https://github.com/danielgindi/Charts/issues/3095) -- 数据空值处理问题 [\#3094](https://github.com/danielgindi/Charts/issues/3094) -- how to display the integer values on pie chart instead of float? [\#3093](https://github.com/danielgindi/Charts/issues/3093) -- Line Chart point colours depend on value at each point [\#3090](https://github.com/danielgindi/Charts/issues/3090) -- how to cancel highlights when the drag gesture ends [\#3089](https://github.com/danielgindi/Charts/issues/3089) -- why my value is .50 ?Why not 0.5? How to do? [\#3083](https://github.com/danielgindi/Charts/issues/3083) -- how to use String in YAxis, rather than Double? [\#3082](https://github.com/danielgindi/Charts/issues/3082) -- Scrolling axis [\#3081](https://github.com/danielgindi/Charts/issues/3081) -- Clipping of values in line graph [\#3077](https://github.com/danielgindi/Charts/issues/3077) -- \[LineChart\] Ignore / don't plot first or end value [\#3075](https://github.com/danielgindi/Charts/issues/3075) -- Which attribute control the yellow line,like the picture? [\#3074](https://github.com/danielgindi/Charts/issues/3074) -- Archive error using swift 4.0 [\#3072](https://github.com/danielgindi/Charts/issues/3072) -- How can I have a chart like this one? [\#3070](https://github.com/danielgindi/Charts/issues/3070) -- Module compiled with Swift 4.0 cannot be imported in Swift 3.2.3 [\#3068](https://github.com/danielgindi/Charts/issues/3068) -- Unable to make chart look like IOS Stock App after trying every mode \(LineChartModeLinear = 0, LineChartModeStepped = 1, LineChartModeCubicBezier = 2, LineChartModeHorizontalBezier = 3\) of LineChartDataSet [\#3066](https://github.com/danielgindi/Charts/issues/3066) -- Cannot Select barChar column [\#3065](https://github.com/danielgindi/Charts/issues/3065) -- Updating data in LineChart takes up to 30 seconds [\#3064](https://github.com/danielgindi/Charts/issues/3064) -- How to sync the scrolling of 2 charts [\#3063](https://github.com/danielgindi/Charts/issues/3063) -- Line chart with bottom spacing and custom position y-labels at min and max values [\#3059](https://github.com/danielgindi/Charts/issues/3059) -- 'characters' is deprecated: Please use String or Substring directly [\#3057](https://github.com/danielgindi/Charts/issues/3057) -- Pod to OC error [\#3053](https://github.com/danielgindi/Charts/issues/3053) -- How to represent a null value,It's like the picture? not 0 [\#3052](https://github.com/danielgindi/Charts/issues/3052) -- dyld library not loaded @rpath/charts.framework/charts reason : image not found XCode 9.1 MacOS version 10.12.6 [\#3050](https://github.com/danielgindi/Charts/issues/3050) -- Can't change the border width of circle point in line chart. [\#3049](https://github.com/danielgindi/Charts/issues/3049) -- Charts library is not working in Swift 4 Xcode 9 [\#3048](https://github.com/danielgindi/Charts/issues/3048) -- Create an image of the entire chart [\#3037](https://github.com/danielgindi/Charts/issues/3037) -- lineChartView only enables one data set to be with icons [\#3036](https://github.com/danielgindi/Charts/issues/3036) -- Add charts to UIView programatically [\#3033](https://github.com/danielgindi/Charts/issues/3033) -- Only disable animation for adding values [\#3031](https://github.com/danielgindi/Charts/issues/3031) -- BarChartDataSet with only negative values doesn't call stringForValue on formatter [\#3030](https://github.com/danielgindi/Charts/issues/3030) -- Please provide an example for pieradarchart [\#3029](https://github.com/danielgindi/Charts/issues/3029) -- Multiple charts in a collection view [\#3028](https://github.com/danielgindi/Charts/issues/3028) -- Bubbles chart [\#3027](https://github.com/danielgindi/Charts/issues/3027) -- delete [\#3025](https://github.com/danielgindi/Charts/issues/3025) -- How to change position xAxis Label on the Top Bar Chart ? [\#3022](https://github.com/danielgindi/Charts/issues/3022) -- How to decrease space between chartData ? Is there any parameter ? [\#3021](https://github.com/danielgindi/Charts/issues/3021) -- 已解决 [\#3020](https://github.com/danielgindi/Charts/issues/3020) -- Drawing min mix median lines [\#3017](https://github.com/danielgindi/Charts/issues/3017) -- Installation error through cocapods [\#3016](https://github.com/danielgindi/Charts/issues/3016) -- Swift 4.0.2 not compatible [\#3015](https://github.com/danielgindi/Charts/issues/3015) -- Error NSAttributedStringKey.font on Xcode 9.1 Swift 4 with Charts \(3.0.4\) [\#3014](https://github.com/danielgindi/Charts/issues/3014) -- Double Bar Lines [\#3013](https://github.com/danielgindi/Charts/issues/3013) -- Same zero line for left and right axis [\#3011](https://github.com/danielgindi/Charts/issues/3011) -- How to get version 3.0.2 ? [\#3009](https://github.com/danielgindi/Charts/issues/3009) -- How can I scroll to previous data? [\#3006](https://github.com/danielgindi/Charts/issues/3006) -- Crashing in X-axis render method. [\#3004](https://github.com/danielgindi/Charts/issues/3004) -- How to align yAxis at zero point? [\#2989](https://github.com/danielgindi/Charts/issues/2989) -- Line Chart View not drawn because Date values in xAxis \(not sorted Ascending/Descending\) ? [\#2988](https://github.com/danielgindi/Charts/issues/2988) -- Showing .0, .00 accoding the the decimal places insted of 0 in graphs [\#2987](https://github.com/danielgindi/Charts/issues/2987) -- How to select one of them in the first time。 [\#2985](https://github.com/danielgindi/Charts/issues/2985) -- 当饼状图的数据为0%的时候,左下角有个多余的字母N,问题已解决,有遇到这个问题的请私聊我 [\#2984](https://github.com/danielgindi/Charts/issues/2984) -- Scale to particular x-axis range in line chart [\#2979](https://github.com/danielgindi/Charts/issues/2979) -- ChartViewDelegate [\#2978](https://github.com/danielgindi/Charts/issues/2978) -- What is the compatible version with Xcode 8.3.3 ? [\#2977](https://github.com/danielgindi/Charts/issues/2977) -- ScatterChartDataSet troubles with alignments. [\#2976](https://github.com/danielgindi/Charts/issues/2976) -- Uneven X-Axis values for a line chart [\#2975](https://github.com/danielgindi/Charts/issues/2975) -- Stacked bar chart value label clipped [\#2974](https://github.com/danielgindi/Charts/issues/2974) -- Pie chart monochrome or gradient fill not support [\#2973](https://github.com/danielgindi/Charts/issues/2973) -- PieChart:- PieChart not completely show. [\#2972](https://github.com/danielgindi/Charts/issues/2972) -- Error after updating to Xcode 9.1 [\#2970](https://github.com/danielgindi/Charts/issues/2970) -- Add cornerRadius to vertical highlighter line and draw circle only on highlight [\#2969](https://github.com/danielgindi/Charts/issues/2969) -- How can I don't draw lines when data absent at some point? [\#2968](https://github.com/danielgindi/Charts/issues/2968) -- How to use your file directly to my project without pod installation? [\#2964](https://github.com/danielgindi/Charts/issues/2964) -- Line chart lines are clipped [\#2963](https://github.com/danielgindi/Charts/issues/2963) -- Marker with multiple datasets [\#2962](https://github.com/danielgindi/Charts/issues/2962) -- how do i run it in xcode 9?? [\#2958](https://github.com/danielgindi/Charts/issues/2958) -- Regarding Xcode version [\#2957](https://github.com/danielgindi/Charts/issues/2957) -- Cannot align chart description on left instead of right [\#2956](https://github.com/danielgindi/Charts/issues/2956) -- change color of bar chart programmatically ? [\#2954](https://github.com/danielgindi/Charts/issues/2954) -- Remove or change line color in chart [\#2953](https://github.com/danielgindi/Charts/issues/2953) -- Show line bar position per seconds [\#2952](https://github.com/danielgindi/Charts/issues/2952) -- Add Two Custom Marker views on linechart graph [\#2951](https://github.com/danielgindi/Charts/issues/2951) -- Display high and low value in chart but Displayed one only [\#2947](https://github.com/danielgindi/Charts/issues/2947) -- Change LineChartDataSet label color not value color. [\#2944](https://github.com/danielgindi/Charts/issues/2944) -- when dataset value is increases then the graph value is misplace . and i am showing three bar in one group. and also show the integer value in particular bar above. [\#2938](https://github.com/danielgindi/Charts/issues/2938) -- Errors after conversion to Swift4 NSAttributedStringKey [\#2937](https://github.com/danielgindi/Charts/issues/2937) -- xAxis setLabelsToSkip and valuesObjc want to have replace api [\#2936](https://github.com/danielgindi/Charts/issues/2936) -- xAxis value is started with 0 but it not coordinate with y axis 0 value [\#2935](https://github.com/danielgindi/Charts/issues/2935) -- line charts with many gradients according the value [\#2934](https://github.com/danielgindi/Charts/issues/2934) -- Xcode 9.1 - Characters is deprecated [\#2933](https://github.com/danielgindi/Charts/issues/2933) -- How to add corner radius to balloonmarker [\#2932](https://github.com/danielgindi/Charts/issues/2932) -- leftAxis and rightAxis didn't show up [\#2931](https://github.com/danielgindi/Charts/issues/2931) -- Errors when importing BalloonMarker [\#2928](https://github.com/danielgindi/Charts/issues/2928) -- Bar chart does not start at zero. [\#2927](https://github.com/danielgindi/Charts/issues/2927) -- The following binaries use incompatible versions of Swift [\#2926](https://github.com/danielgindi/Charts/issues/2926) -- Change the color of a specific X-Axis label and the corresponding data value in a line chart using Charts framework [\#2925](https://github.com/danielgindi/Charts/issues/2925) -- Adding corner radius on top of Bar [\#2924](https://github.com/danielgindi/Charts/issues/2924) -- I want to change colour of the label text on the x-axis where it's highlighted. [\#2923](https://github.com/danielgindi/Charts/issues/2923) -- How to give Gradient colour for limit line in linechartviewDataSet [\#2922](https://github.com/danielgindi/Charts/issues/2922) -- Gradient colour for stroke line horizantally .It is possible in android [\#2921](https://github.com/danielgindi/Charts/issues/2921) -- y axis range not automatically recalculated when adding entry to data set [\#2920](https://github.com/danielgindi/Charts/issues/2920) -- Build framework from project [\#2919](https://github.com/danielgindi/Charts/issues/2919) -- How to draw a diagram above the axis labels? [\#2918](https://github.com/danielgindi/Charts/issues/2918) -- - [\#2917](https://github.com/danielgindi/Charts/issues/2917) -- How to use IValueFormatter in stacked bar chart [\#2916](https://github.com/danielgindi/Charts/issues/2916) -- Use of unresolved identifier NSAttributedStringKey in Xcode 8.3.2 for swift 3 [\#2915](https://github.com/danielgindi/Charts/issues/2915) -- Barchart with rounded bar style [\#2912](https://github.com/danielgindi/Charts/issues/2912) -- Animate adding single point [\#2911](https://github.com/danielgindi/Charts/issues/2911) -- Crash [\#2910](https://github.com/danielgindi/Charts/issues/2910) -- Multi Window [\#2909](https://github.com/danielgindi/Charts/issues/2909) -- how can I unhighlight any slice selected before in PieChart ? [\#2908](https://github.com/danielgindi/Charts/issues/2908) -- Barchart DefaultValueFormatter dataSetIndex always 0 [\#2907](https://github.com/danielgindi/Charts/issues/2907) -- LineChartDataSet Multi color [\#2906](https://github.com/danielgindi/Charts/issues/2906) -- How to disconnect data points? [\#2905](https://github.com/danielgindi/Charts/issues/2905) -- Licensing question [\#2904](https://github.com/danielgindi/Charts/issues/2904) -- A way to add values to labels on x axis? [\#2903](https://github.com/danielgindi/Charts/issues/2903) -- Update cocoapods.org version [\#2902](https://github.com/danielgindi/Charts/issues/2902) -- noDataText for PieChartView isn't working. [\#2901](https://github.com/danielgindi/Charts/issues/2901) -- xcode9 alert swift question [\#2900](https://github.com/danielgindi/Charts/issues/2900) -- Dynamically set the bar width [\#2898](https://github.com/danielgindi/Charts/issues/2898) -- Marker action [\#2897](https://github.com/danielgindi/Charts/issues/2897) -- Filler line for acceptable range of values in LineChart [\#2896](https://github.com/danielgindi/Charts/issues/2896) -- Pie chart full view [\#2895](https://github.com/danielgindi/Charts/issues/2895) -- Problem with BalloonMarker in lineChart [\#2892](https://github.com/danielgindi/Charts/issues/2892) -- OS X Bar chart Demo highlight and stacked color are inconsistent [\#2890](https://github.com/danielgindi/Charts/issues/2890) -- Problem with charts in UITableView cells [\#2888](https://github.com/danielgindi/Charts/issues/2888) -- drawing xAxis ratio values [\#2885](https://github.com/danielgindi/Charts/issues/2885) -- Xcode 9 compatibility [\#2883](https://github.com/danielgindi/Charts/issues/2883) -- Large Whitespace Between X-Axis Labels and Legend [\#2882](https://github.com/danielgindi/Charts/issues/2882) -- help about performance issues about line charts [\#2881](https://github.com/danielgindi/Charts/issues/2881) -- Animation on PieChartView [\#2880](https://github.com/danielgindi/Charts/issues/2880) -- Scrolling chart after setting lineChart.xAxis.axisMaximum = someValue [\#2879](https://github.com/danielgindi/Charts/issues/2879) -- "chartValueSelected" is not getting called in customView [\#2878](https://github.com/danielgindi/Charts/issues/2878) -- curve line [\#2877](https://github.com/danielgindi/Charts/issues/2877) -- Swift 4 issue [\#2876](https://github.com/danielgindi/Charts/issues/2876) -- 不显示百分号了 [\#2873](https://github.com/danielgindi/Charts/issues/2873) -- LineChartView: Using two different colors in one dataset [\#2871](https://github.com/danielgindi/Charts/issues/2871) -- xcode 9.0 errors after installing pod 'Charts' [\#2869](https://github.com/danielgindi/Charts/issues/2869) -- Change scroll direction HorizontalBarChartView x-axis from top to bottom chart [\#2868](https://github.com/danielgindi/Charts/issues/2868) -- Set names of X-axis and Y-axis itself \(not their labels\) [\#2867](https://github.com/danielgindi/Charts/issues/2867) -- 'characters' is deprecated: Please use String or Substring directly [\#2866](https://github.com/danielgindi/Charts/issues/2866) -- Syntax error in pod [\#2865](https://github.com/danielgindi/Charts/issues/2865) -- Filled Line Chart [\#2863](https://github.com/danielgindi/Charts/issues/2863) -- How can I highlight a specific slice of the PieChart? [\#2862](https://github.com/danielgindi/Charts/issues/2862) -- How can I make the chart rotate completely, 360, 720 on a button click ? [\#2861](https://github.com/danielgindi/Charts/issues/2861) -- How can I make the chart rotate completely, 360, 720 on a button click ? [\#2860](https://github.com/danielgindi/Charts/issues/2860) -- xcode9 pod install have a problem [\#2856](https://github.com/danielgindi/Charts/issues/2856) -- can I implement stacked bar with rounded corners ? [\#2855](https://github.com/danielgindi/Charts/issues/2855) -- Updating Charts to 3.0.4 and Swift 4 doesn't work [\#2851](https://github.com/danielgindi/Charts/issues/2851) -- How to add string labels to XAxis horizontal bar in Charts framework\(swift 3\) [\#2850](https://github.com/danielgindi/Charts/issues/2850) -- How to show off numbers in HorizontalBar [\#2849](https://github.com/danielgindi/Charts/issues/2849) -- In Multiple bar chart Unable to set Values more than 4 bar in under given year.. [\#2847](https://github.com/danielgindi/Charts/issues/2847) -- Type 'NSAttributedStringKey' \(aka 'NSString'\) has no member 'font' [\#2844](https://github.com/danielgindi/Charts/issues/2844) -- Install charts via cocapods pulls back old version 3.0.2 [\#2843](https://github.com/danielgindi/Charts/issues/2843) -- xcode 9.0 compile ERROR: "static var 'defaultFormatter' is not public" [\#2842](https://github.com/danielgindi/Charts/issues/2842) -- Pass String to LineChartData [\#2841](https://github.com/danielgindi/Charts/issues/2841) -- Customised graph with ranges\(Normal-blue and Warning-yellow\) also with it's legend [\#2838](https://github.com/danielgindi/Charts/issues/2838) -- using UIGraphicsGetCurrentContext in MarkerImage subclass [\#2835](https://github.com/danielgindi/Charts/issues/2835) -- How to show BarChartDataSet with descending x values? [\#2834](https://github.com/danielgindi/Charts/issues/2834) -- getTransformer function doesn't work properly when AxisDependency is set to right [\#2833](https://github.com/danielgindi/Charts/issues/2833) -- Grouped Bar chart X-axis and Bar Alignment [\#2832](https://github.com/danielgindi/Charts/issues/2832) -- How to create a custom Marker from Xib - Swift [\#2831](https://github.com/danielgindi/Charts/issues/2831) -- does not support new Objective-C project with Xcode 9 [\#2830](https://github.com/danielgindi/Charts/issues/2830) -- radarChart default labelCount [\#2829](https://github.com/danielgindi/Charts/issues/2829) -- NSDecimalNumber instead of Double [\#2828](https://github.com/danielgindi/Charts/issues/2828) -- LineChart 填充 [\#2825](https://github.com/danielgindi/Charts/issues/2825) -- Swift: Different colours for circles in one LineChartDataSet [\#2824](https://github.com/danielgindi/Charts/issues/2824) -- Unable to update Chart library [\#2823](https://github.com/danielgindi/Charts/issues/2823) -- xMin, xMax, yMin, yMax not recalculated to zero on .clear\(\) [\#2822](https://github.com/danielgindi/Charts/issues/2822) -- OS X errors with swift 4 [\#2819](https://github.com/danielgindi/Charts/issues/2819) -- I want to add marker image from line chart in swift 4.0 [\#2818](https://github.com/danielgindi/Charts/issues/2818) -- ChartMarkerView not able to subclass of swift class [\#2817](https://github.com/danielgindi/Charts/issues/2817) -- Type 'NSAttributedStringKey' \(aka 'NSString'\) has no member 'font' [\#2816](https://github.com/danielgindi/Charts/issues/2816) -- StackedBarChart isn't stacking bars [\#2815](https://github.com/danielgindi/Charts/issues/2815) -- Cocoapod 3.0.4 [\#2814](https://github.com/danielgindi/Charts/issues/2814) -- Error aplication Thread in ios 11 with version 3.0.4 [\#2812](https://github.com/danielgindi/Charts/issues/2812) -- Cannot compile with version 3.0.3 and Xcode 9 due to incompatible Swift version [\#2810](https://github.com/danielgindi/Charts/issues/2810) -- I have the version 3.0.4 but when compile project I has an error [\#2809](https://github.com/danielgindi/Charts/issues/2809) -- 拖动的时候 会强烈抖动 [\#2808](https://github.com/danielgindi/Charts/issues/2808) -- Version 3.0.4 doesn't appear via Cocoapods [\#2807](https://github.com/danielgindi/Charts/issues/2807) -- Bump Pod Version [\#2805](https://github.com/danielgindi/Charts/issues/2805) -- module 'Charts' not found when dray it into target [\#2803](https://github.com/danielgindi/Charts/issues/2803) -- How to get y-axis values "Int" to "Double" [\#2799](https://github.com/danielgindi/Charts/issues/2799) -- The line chart enlarged is crash [\#2797](https://github.com/danielgindi/Charts/issues/2797) -- How to change the entrylabel\(i.e, 90%\) color in PieChart [\#2794](https://github.com/danielgindi/Charts/issues/2794) -- Chart Grid Lines Don't Always Draw [\#2791](https://github.com/danielgindi/Charts/issues/2791) -- Charts.framework: No such file or directory [\#2789](https://github.com/danielgindi/Charts/issues/2789) -- Memory Leak in Horizontal Bar Chart [\#2745](https://github.com/danielgindi/Charts/issues/2745) -- axisDependency does not work [\#2258](https://github.com/danielgindi/Charts/issues/2258) -- HorizontalBarChart does not update labels correctly [\#2257](https://github.com/danielgindi/Charts/issues/2257) - -**Merged pull requests:** - -- Syncing 4.0.0 with master [\#3160](https://github.com/danielgindi/Charts/pull/3160) ([jjatie](https://github.com/jjatie)) -- Subclassing of LegendRenderer didn't take any effect [\#3149](https://github.com/danielgindi/Charts/pull/3149) ([l-lemesev](https://github.com/l-lemesev)) -- Update ViewPortHandler.swift [\#3143](https://github.com/danielgindi/Charts/pull/3143) ([ParkinWu](https://github.com/ParkinWu)) -- Renderer protocols [\#3136](https://github.com/danielgindi/Charts/pull/3136) ([jjatie](https://github.com/jjatie)) -- Update 4.0.0 with master [\#3135](https://github.com/danielgindi/Charts/pull/3135) ([jjatie](https://github.com/jjatie)) -- Fix axis label disappear when zooming in deep enough [\#3132](https://github.com/danielgindi/Charts/pull/3132) ([liuxuan30](https://github.com/liuxuan30)) -- Updating 4.0.0 with latest changes in master [\#3130](https://github.com/danielgindi/Charts/pull/3130) ([jjatie](https://github.com/jjatie)) -- add option to build demo projects unit tests on iOS [\#3121](https://github.com/danielgindi/Charts/pull/3121) ([liuxuan30](https://github.com/liuxuan30)) -- Makes ChartsDemo compiling again [\#3117](https://github.com/danielgindi/Charts/pull/3117) ([valeriyvan](https://github.com/valeriyvan)) -- Fixed using wrong axis \(Issue \#2257\) [\#3114](https://github.com/danielgindi/Charts/pull/3114) ([defranke](https://github.com/defranke)) -- for \#3061 fix animation crash [\#3098](https://github.com/danielgindi/Charts/pull/3098) ([liuxuan30](https://github.com/liuxuan30)) -- Refactored ChartUtils method into CGPoint extension [\#3087](https://github.com/danielgindi/Charts/pull/3087) ([jjatie](https://github.com/jjatie)) -- Moved ChartUtils drawing methods into CGContext extension [\#3086](https://github.com/danielgindi/Charts/pull/3086) ([jjatie](https://github.com/jjatie)) -- for \#2745. chart should be weak. [\#3078](https://github.com/danielgindi/Charts/pull/3078) ([liuxuan30](https://github.com/liuxuan30)) -- Fix a bug may cause infinite loop. [\#3073](https://github.com/danielgindi/Charts/pull/3073) ([JyHu](https://github.com/JyHu)) -- Chartviewbase redundant ivar [\#3045](https://github.com/danielgindi/Charts/pull/3045) ([jjatie](https://github.com/jjatie)) -- Removed `isKind\(of:\)` [\#3044](https://github.com/danielgindi/Charts/pull/3044) ([jjatie](https://github.com/jjatie)) -- Removed redundant ivars in BarLineChartViewBase [\#3043](https://github.com/danielgindi/Charts/pull/3043) ([jjatie](https://github.com/jjatie)) -- fileprivate -\> private [\#3042](https://github.com/danielgindi/Charts/pull/3042) ([jjatie](https://github.com/jjatie)) -- Viewportjob minor cleanup [\#3041](https://github.com/danielgindi/Charts/pull/3041) ([jjatie](https://github.com/jjatie)) -- Removed @objc from internal properties [\#3038](https://github.com/danielgindi/Charts/pull/3038) ([jjatie](https://github.com/jjatie)) -- Minor changes to BubbleChartRenderer logic [\#3010](https://github.com/danielgindi/Charts/pull/3010) ([jjatie](https://github.com/jjatie)) -- BarChartRenderer Logic cleanup [\#3008](https://github.com/danielgindi/Charts/pull/3008) ([jjatie](https://github.com/jjatie)) -- Minor changes to Animator [\#3005](https://github.com/danielgindi/Charts/pull/3005) ([jjatie](https://github.com/jjatie)) -- Minor cleanup to Highlighter types [\#3003](https://github.com/danielgindi/Charts/pull/3003) ([jjatie](https://github.com/jjatie)) -- Resubmit of \#2730 [\#3002](https://github.com/danielgindi/Charts/pull/3002) ([jjatie](https://github.com/jjatie)) -- The backing var is not necessary. [\#3000](https://github.com/danielgindi/Charts/pull/3000) ([jjatie](https://github.com/jjatie)) -- Minor refactoring of Formatter logic [\#2998](https://github.com/danielgindi/Charts/pull/2998) ([jjatie](https://github.com/jjatie)) -- Remove java interface convention [\#2997](https://github.com/danielgindi/Charts/pull/2997) ([jjatie](https://github.com/jjatie)) -- Removed methods and properties deprecated in 1.0 [\#2996](https://github.com/danielgindi/Charts/pull/2996) ([jjatie](https://github.com/jjatie)) -- Replaced `ChartUtils` methods with `CGSize` extensions [\#2995](https://github.com/danielgindi/Charts/pull/2995) ([jjatie](https://github.com/jjatie)) -- Replaced relevant `ChartUtils` methods with `Double` extensions [\#2994](https://github.com/danielgindi/Charts/pull/2994) ([jjatie](https://github.com/jjatie)) -- Replaced `ChartUtils.Math` in favour of an extension on `FloatingPoint` [\#2993](https://github.com/danielgindi/Charts/pull/2993) ([jjatie](https://github.com/jjatie)) -- Minor changes to logic in `ViewPortJob` subclasses. [\#2992](https://github.com/danielgindi/Charts/pull/2992) ([jjatie](https://github.com/jjatie)) -- `ChartRenderer`'s must be initialized with a chart [\#2982](https://github.com/danielgindi/Charts/pull/2982) ([jjatie](https://github.com/jjatie)) -- Animator non nil [\#2981](https://github.com/danielgindi/Charts/pull/2981) ([jjatie](https://github.com/jjatie)) -- View port handler nonnil [\#2980](https://github.com/danielgindi/Charts/pull/2980) ([jjatie](https://github.com/jjatie)) -- Add support for iPhone X [\#2967](https://github.com/danielgindi/Charts/pull/2967) ([liuxuan30](https://github.com/liuxuan30)) -- added highlightColor parameter for pie charts [\#2961](https://github.com/danielgindi/Charts/pull/2961) ([pascalherrmann](https://github.com/pascalherrmann)) -- Add Swift Package Manager support. [\#2950](https://github.com/danielgindi/Charts/pull/2950) ([BrianDoig](https://github.com/BrianDoig)) -- Fix turning off drag in X and Y axes separately. [\#2949](https://github.com/danielgindi/Charts/pull/2949) ([maciejtrybilo](https://github.com/maciejtrybilo)) -- modify for Character Alert: characters is deprecated [\#2942](https://github.com/danielgindi/Charts/pull/2942) ([suzuhiroruri](https://github.com/suzuhiroruri)) -- fix \#2890. Turned out it's multiple bar chart but not grouped [\#2891](https://github.com/danielgindi/Charts/pull/2891) ([liuxuan30](https://github.com/liuxuan30)) -- Update LICENSE [\#2887](https://github.com/danielgindi/Charts/pull/2887) ([sDaniel](https://github.com/sDaniel)) -- fix \#1830. credit from https://github.com/danielgindi/Charts/pull/2049 [\#2874](https://github.com/danielgindi/Charts/pull/2874) ([liuxuan30](https://github.com/liuxuan30)) -- duplicated code for set1 in set2 section [\#2872](https://github.com/danielgindi/Charts/pull/2872) ([liuxuan30](https://github.com/liuxuan30)) -- added DataApproximator+N extension [\#2848](https://github.com/danielgindi/Charts/pull/2848) ([666tos](https://github.com/666tos)) -- Bumped pod version [\#2806](https://github.com/danielgindi/Charts/pull/2806) ([mohpor](https://github.com/mohpor)) -- unwrap optionals [\#2698](https://github.com/danielgindi/Charts/pull/2698) ([russellbstephens](https://github.com/russellbstephens)) -- Replaced unnecessary NSObjectProtocol [\#2629](https://github.com/danielgindi/Charts/pull/2629) ([jjatie](https://github.com/jjatie)) -- Swift iOS Demos [\#2628](https://github.com/danielgindi/Charts/pull/2628) ([jjatie](https://github.com/jjatie)) -- add example playground [\#2364](https://github.com/danielgindi/Charts/pull/2364) ([thierryH91200](https://github.com/thierryH91200)) -- Compatibility with swift playgrounds [\#2335](https://github.com/danielgindi/Charts/pull/2335) ([macteo](https://github.com/macteo)) - -## [v3.0.4](https://github.com/danielgindi/Charts/tree/v3.0.4) (2017-09-21) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.0.4...v3.0.4) - -## [3.0.4](https://github.com/danielgindi/Charts/tree/3.0.4) (2017-09-21) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.0.3...3.0.4) - -**Closed issues:** - -- cocoaPod can not install branch of swift4 [\#2802](https://github.com/danielgindi/Charts/issues/2802) -- Swift 4 [\#2801](https://github.com/danielgindi/Charts/issues/2801) -- how tomake leftAxis.inverted and LineChartDataSet.fillColor not inverted [\#2798](https://github.com/danielgindi/Charts/issues/2798) -- Bar Chart Demo One Label One Color [\#2792](https://github.com/danielgindi/Charts/issues/2792) -- BarChart draw vertical dotted lines on specific bars [\#2788](https://github.com/danielgindi/Charts/issues/2788) -- How can I control the number of decimals? [\#2787](https://github.com/danielgindi/Charts/issues/2787) -- Charts “3.0.2” cannot find "BalloonMarker" [\#2786](https://github.com/danielgindi/Charts/issues/2786) -- Graphs gets cut from both ends [\#2785](https://github.com/danielgindi/Charts/issues/2785) -- Is it possible to draw multiple lineCharts with different starting points on same view? [\#2783](https://github.com/danielgindi/Charts/issues/2783) -- getFormattedLabel Index Out of Range [\#2782](https://github.com/danielgindi/Charts/issues/2782) -- Line chart right axis inset [\#2781](https://github.com/danielgindi/Charts/issues/2781) -- No type or protocol named 'IChartAxisValueFormatter' [\#2780](https://github.com/danielgindi/Charts/issues/2780) -- Zero Value is under BarChart [\#2779](https://github.com/danielgindi/Charts/issues/2779) -- App crashes while using Charts swift library in Objective C Project [\#2778](https://github.com/danielgindi/Charts/issues/2778) -- Cannot subscript a value of type '\[String : AnyObject\]' with an index of type 'NSAttributedStringKey' [\#2777](https://github.com/danielgindi/Charts/issues/2777) -- How to drag data entries to change their y value in real time. [\#2776](https://github.com/danielgindi/Charts/issues/2776) -- How to break line the legends ? [\#2775](https://github.com/danielgindi/Charts/issues/2775) -- How can I get current viewport shown x range and scale value [\#2770](https://github.com/danielgindi/Charts/issues/2770) -- How to disable scale of left YAxis? [\#2748](https://github.com/danielgindi/Charts/issues/2748) -- Bar Chart remove x if y is 0 [\#2747](https://github.com/danielgindi/Charts/issues/2747) -- How to display Negative X-Axis on LineChart [\#797](https://github.com/danielgindi/Charts/issues/797) - -**Merged pull requests:** - -- Changes for Swift 4 [\#2507](https://github.com/danielgindi/Charts/pull/2507) ([liuxuan30](https://github.com/liuxuan30)) - -## [v3.0.3](https://github.com/danielgindi/Charts/tree/v3.0.3) (2017-09-08) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.0.3...v3.0.3) - -## [3.0.3](https://github.com/danielgindi/Charts/tree/3.0.3) (2017-09-08) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.0.2...3.0.3) - -**Implemented enhancements:** - -- fatal error: Index out of range [\#2109](https://github.com/danielgindi/Charts/issues/2109) - -**Fixed bugs:** - -- Crash in YAxisRendererRadarChart [\#2356](https://github.com/danielgindi/Charts/issues/2356) -- Fatal error when providing multiple data sets in PieChartData [\#2099](https://github.com/danielgindi/Charts/issues/2099) - -**Closed issues:** - -- X Values Hidden On Bar Graph [\#2774](https://github.com/danielgindi/Charts/issues/2774) -- How to add new real-time data to lineChart ? [\#2773](https://github.com/danielgindi/Charts/issues/2773) -- Avoid xAxis limit-labels display in a one-bar BarChart. [\#2771](https://github.com/danielgindi/Charts/issues/2771) -- zoom at particular position via code [\#2769](https://github.com/danielgindi/Charts/issues/2769) -- how to use HorizontalBarChart with decimal number as xAxis [\#2768](https://github.com/danielgindi/Charts/issues/2768) -- Cannot rescale Y-axis even if changing axisMinimum and axisMaximum [\#2766](https://github.com/danielgindi/Charts/issues/2766) -- I want to change ValueFormat of BarChartDataSet. I can't change it. [\#2764](https://github.com/danielgindi/Charts/issues/2764) -- Changing x-label formats from one line to word-wrapped is awkward [\#2763](https://github.com/danielgindi/Charts/issues/2763) -- chartValueSelected not getting value from Max Value [\#2762](https://github.com/danielgindi/Charts/issues/2762) -- Dual YAxis [\#2761](https://github.com/danielgindi/Charts/issues/2761) -- How to set the position of the values top on BarChartView? [\#2759](https://github.com/danielgindi/Charts/issues/2759) -- Line chart xAxis cut left or right in iphone 5 [\#2758](https://github.com/danielgindi/Charts/issues/2758) -- TableView does not scroll vertically after graph is rendered to cells [\#2757](https://github.com/danielgindi/Charts/issues/2757) -- Fill the color between two line charts using IFillFormatter [\#2756](https://github.com/danielgindi/Charts/issues/2756) -- How to use custom view for labels of xAxis? [\#2755](https://github.com/danielgindi/Charts/issues/2755) -- Chart not consistently showing data [\#2753](https://github.com/danielgindi/Charts/issues/2753) -- Obtaining current number of points being rendered in zoomed viewing window [\#2752](https://github.com/danielgindi/Charts/issues/2752) -- Barchart starting above X-Axis [\#2751](https://github.com/danielgindi/Charts/issues/2751) -- Getting the position of Data array of entry: ChartDataEntry via chartValueSelected\(args\) method [\#2750](https://github.com/danielgindi/Charts/issues/2750) -- Create Simple Bar Chart [\#2749](https://github.com/danielgindi/Charts/issues/2749) -- iOS8 simulator crashed iOS 8模拟器崩溃在画Y轴线的地方 [\#2746](https://github.com/danielgindi/Charts/issues/2746) -- Chart displays values, but no bars [\#2744](https://github.com/danielgindi/Charts/issues/2744) -- Can not inherit Charts to subclass some cutomize charts [\#2743](https://github.com/danielgindi/Charts/issues/2743) -- CandleStick fill colors not showing [\#2742](https://github.com/danielgindi/Charts/issues/2742) -- Bar chart click on outside of bar calling delegate [\#2741](https://github.com/danielgindi/Charts/issues/2741) -- Resize chart after adding limit line [\#2739](https://github.com/danielgindi/Charts/issues/2739) -- Pie chart entry icon get cut [\#2738](https://github.com/danielgindi/Charts/issues/2738) -- How can I set ValuePosition for individual slices? [\#2736](https://github.com/danielgindi/Charts/issues/2736) -- You can't slide along the X-axis [\#2735](https://github.com/danielgindi/Charts/issues/2735) -- Candlechart zooming disable interaction with viewcontroller [\#2734](https://github.com/danielgindi/Charts/issues/2734) -- 2 datasets, one should only display one label at the top [\#2733](https://github.com/danielgindi/Charts/issues/2733) -- How do I change the color of the text on top of the bars? [\#2732](https://github.com/danielgindi/Charts/issues/2732) -- Can't subclass BarChartRenderer due to 'fileprivate' status of many properties [\#2731](https://github.com/danielgindi/Charts/issues/2731) -- Left axis axisMinimum inside a TableviewCell does not work [\#2729](https://github.com/danielgindi/Charts/issues/2729) -- How to set minimum displayed Y axis value [\#2728](https://github.com/danielgindi/Charts/issues/2728) -- Custom Text Axis X Horizontal Bar Chart [\#2726](https://github.com/danielgindi/Charts/issues/2726) -- Crash when use in Notification Content Extension [\#2725](https://github.com/danielgindi/Charts/issues/2725) -- Problems encountered with charts [\#2724](https://github.com/danielgindi/Charts/issues/2724) -- Can I use Charts in Swift 4? [\#2723](https://github.com/danielgindi/Charts/issues/2723) -- Add gradient to bar chart [\#2722](https://github.com/danielgindi/Charts/issues/2722) -- Draw bar chart from axisMinimum instead of 0 [\#2721](https://github.com/danielgindi/Charts/issues/2721) -- Different Charts-Swifg.h when simulator and iphone [\#2720](https://github.com/danielgindi/Charts/issues/2720) -- Viewport transX jumping when zooming Y scale \(dynamic/realtime data\) [\#2719](https://github.com/danielgindi/Charts/issues/2719) -- Align X labels with Charts [\#2718](https://github.com/danielgindi/Charts/issues/2718) -- iOS swift3 Chart xaxis duplicate value issue for linechartview [\#2715](https://github.com/danielgindi/Charts/issues/2715) -- Label Position xAxis Radar Chart [\#2714](https://github.com/danielgindi/Charts/issues/2714) -- Showing actual value IN ADDITION to percentage, in a pie slice? [\#2713](https://github.com/danielgindi/Charts/issues/2713) -- Fail to display any thing in line chart. [\#2712](https://github.com/danielgindi/Charts/issues/2712) -- How to decrees column width size in LineChart [\#2710](https://github.com/danielgindi/Charts/issues/2710) -- Runtime EXC\_BAD\_ACCESS with barchart whiles zoom in [\#2709](https://github.com/danielgindi/Charts/issues/2709) -- How to format values on barchart [\#2708](https://github.com/danielgindi/Charts/issues/2708) -- where do I find ioscharts.framework? [\#2707](https://github.com/danielgindi/Charts/issues/2707) -- Add horizontal line at certain value on Y-Axis? [\#2706](https://github.com/danielgindi/Charts/issues/2706) -- BarChart does not render with multiple data sets [\#2705](https://github.com/danielgindi/Charts/issues/2705) -- Balloon Marker: making it work in line chart inside combined view [\#2703](https://github.com/danielgindi/Charts/issues/2703) -- IValueFormatter text showing More than one Time [\#2700](https://github.com/danielgindi/Charts/issues/2700) -- Disable bar selection or highlight? [\#2699](https://github.com/danielgindi/Charts/issues/2699) -- Increase Yaxis Labes According to the max values. [\#2696](https://github.com/danielgindi/Charts/issues/2696) -- xAxis scrolling in combineChartView [\#2695](https://github.com/danielgindi/Charts/issues/2695) -- How to highlight at specific entry ? [\#2693](https://github.com/danielgindi/Charts/issues/2693) -- Horizontal bar charts 'Y' values are getting overlapped with '0' [\#2691](https://github.com/danielgindi/Charts/issues/2691) -- Two ChartViews own the same Xaxis [\#2690](https://github.com/danielgindi/Charts/issues/2690) -- issues about BarChartView [\#2689](https://github.com/danielgindi/Charts/issues/2689) -- Tap Gesture Handler callback method [\#2686](https://github.com/danielgindi/Charts/issues/2686) -- How to draw dashed circles for values? [\#2685](https://github.com/danielgindi/Charts/issues/2685) -- How to Redraw the charts? [\#2684](https://github.com/danielgindi/Charts/issues/2684) -- BarChartView top border not showing [\#2682](https://github.com/danielgindi/Charts/issues/2682) -- Drawing horizontal dashed lines except on x-axis line? [\#2681](https://github.com/danielgindi/Charts/issues/2681) -- X-Axis Date values not displaying properly? [\#2680](https://github.com/danielgindi/Charts/issues/2680) -- Dashed border on highlighted bar - BarChart [\#2675](https://github.com/danielgindi/Charts/issues/2675) -- ChartFill - I would like to fill above the line [\#2674](https://github.com/danielgindi/Charts/issues/2674) -- Anyone have iOS charts working with Xcode 9 Beta? [\#2673](https://github.com/danielgindi/Charts/issues/2673) -- Change Scale on Y Axis for CombinedChart [\#2672](https://github.com/danielgindi/Charts/issues/2672) -- Y-axis with text [\#2671](https://github.com/danielgindi/Charts/issues/2671) -- Show only 2 labels on xAxis in CombinedChartView [\#2670](https://github.com/danielgindi/Charts/issues/2670) -- Graphing just a part of the data [\#2669](https://github.com/danielgindi/Charts/issues/2669) -- How to add texts/image into a chart? [\#2667](https://github.com/danielgindi/Charts/issues/2667) -- Is it possible to scroll without Zooming/ Scaling ? [\#2666](https://github.com/danielgindi/Charts/issues/2666) -- Use Charts in Swift3,Error [\#2664](https://github.com/danielgindi/Charts/issues/2664) -- Custom highlighter/marker [\#2663](https://github.com/danielgindi/Charts/issues/2663) -- Display programatically a marker on a chart [\#2662](https://github.com/danielgindi/Charts/issues/2662) -- Scrollview inside Marker [\#2661](https://github.com/danielgindi/Charts/issues/2661) -- Bitcode Problem [\#2660](https://github.com/danielgindi/Charts/issues/2660) -- Fix Marker on center even when chart is scaled or dragged [\#2659](https://github.com/danielgindi/Charts/issues/2659) -- How to add marker to center position in ios charts while scrolling horizontally with increasing scaleX and enabling drag [\#2658](https://github.com/danielgindi/Charts/issues/2658) -- Y Axis scales display format [\#2657](https://github.com/danielgindi/Charts/issues/2657) -- Marker and long press gesture... [\#2656](https://github.com/danielgindi/Charts/issues/2656) -- Pie chart Crash [\#2655](https://github.com/danielgindi/Charts/issues/2655) -- YAxisValues:"Zero" of the integer part is not displayed when the YAxis coordinate is zero [\#2653](https://github.com/danielgindi/Charts/issues/2653) -- Memory leak when valueFormatter is set [\#2652](https://github.com/danielgindi/Charts/issues/2652) -- autoScaleMinMaxEnabled, axisMaximum and axisMinimum [\#2651](https://github.com/danielgindi/Charts/issues/2651) -- Draw X-Axis labels with dates keeping index of x-axis independent like before [\#2648](https://github.com/danielgindi/Charts/issues/2648) -- About ChartHighLight [\#2647](https://github.com/danielgindi/Charts/issues/2647) -- Start value from X-Axis [\#2646](https://github.com/danielgindi/Charts/issues/2646) -- Combined chart with horizontal bar and bubble [\#2644](https://github.com/danielgindi/Charts/issues/2644) -- I have a problem with compiling [\#2643](https://github.com/danielgindi/Charts/issues/2643) -- How to implement custom dataset in objective-c? [\#2639](https://github.com/danielgindi/Charts/issues/2639) -- I am not able to set values on the bar in simple bar chart. [\#2638](https://github.com/danielgindi/Charts/issues/2638) -- Swift based Charts library increased application size when used for objective c based project [\#2637](https://github.com/danielgindi/Charts/issues/2637) -- 使用CombinedChartView绘制柱形图,如何只让当前bar视图显示灰色背影。 [\#2636](https://github.com/danielgindi/Charts/issues/2636) -- OHLC charts... [\#2635](https://github.com/danielgindi/Charts/issues/2635) -- unable to set string values on x-axis in grouped bar chart . [\#2632](https://github.com/danielgindi/Charts/issues/2632) -- How to set group width in multiple bar chart? [\#2631](https://github.com/danielgindi/Charts/issues/2631) -- override renderLegend\(context: CGContext\) [\#2630](https://github.com/danielgindi/Charts/issues/2630) -- Changing chart's type without creating a new object... [\#2627](https://github.com/danielgindi/Charts/issues/2627) -- Using Charts in NSStackView [\#2626](https://github.com/danielgindi/Charts/issues/2626) -- Does PieChart support multiple columns of vertical legend? [\#2625](https://github.com/danielgindi/Charts/issues/2625) -- I need this method: setShowOnlyMinMax [\#2624](https://github.com/danielgindi/Charts/issues/2624) -- Unable to use this library in Objective-c . [\#2623](https://github.com/danielgindi/Charts/issues/2623) -- 计算柱形图的宽度和设定间隙 [\#2622](https://github.com/danielgindi/Charts/issues/2622) -- How to adjust RadarChartView text from the bottom of the height? [\#2621](https://github.com/danielgindi/Charts/issues/2621) -- How to give all pie-slices a rounded edge? [\#2620](https://github.com/danielgindi/Charts/issues/2620) -- Alternative color to fill in radar chart [\#2617](https://github.com/danielgindi/Charts/issues/2617) -- About gradient color for lineChartView [\#2615](https://github.com/danielgindi/Charts/issues/2615) -- Invalid bundle [\#2614](https://github.com/danielgindi/Charts/issues/2614) -- Want to display circles at data points on a line graph only if the data has changed or is about to change [\#2613](https://github.com/danielgindi/Charts/issues/2613) -- Swift language Version. [\#2612](https://github.com/danielgindi/Charts/issues/2612) -- Linker Command Fail error [\#2611](https://github.com/danielgindi/Charts/issues/2611) -- xAxis's first lable always on the left [\#2610](https://github.com/danielgindi/Charts/issues/2610) -- when i Creat one LineChartData objc. it's draws Three points [\#2609](https://github.com/danielgindi/Charts/issues/2609) -- i wanna display Char form with no data. but with Y Values. [\#2608](https://github.com/danielgindi/Charts/issues/2608) -- Is there any way to get the xaxis value when chart scroll end specific area? [\#2607](https://github.com/danielgindi/Charts/issues/2607) -- Memory Leak in Legend and ArrayBufferProtocol [\#2606](https://github.com/danielgindi/Charts/issues/2606) -- fatal error due to call to computeAxisValues during call to notifyDataSetChanged [\#2605](https://github.com/danielgindi/Charts/issues/2605) -- Bar Chart & label displayed wrongly when dataset count changes [\#2603](https://github.com/danielgindi/Charts/issues/2603) -- BarChart.Axis label change starting index when .rightAxix is enabled [\#2602](https://github.com/danielgindi/Charts/issues/2602) -- Spacing between left axis labels [\#2601](https://github.com/danielgindi/Charts/issues/2601) -- React Native support [\#2598](https://github.com/danielgindi/Charts/issues/2598) -- Not able to see yAxis label while changing position of that label [\#2596](https://github.com/danielgindi/Charts/issues/2596) -- About stacked bar value label postion [\#2595](https://github.com/danielgindi/Charts/issues/2595) -- Invalid Bundle - Xcode 9 Beta 2 [\#2593](https://github.com/danielgindi/Charts/issues/2593) -- Stacked bar always show last value [\#2592](https://github.com/danielgindi/Charts/issues/2592) -- Use Charts in App Extension [\#2590](https://github.com/danielgindi/Charts/issues/2590) -- About bar and line combined [\#2589](https://github.com/danielgindi/Charts/issues/2589) -- Draw graph of a function [\#2588](https://github.com/danielgindi/Charts/issues/2588) -- Scrolling chart [\#2587](https://github.com/danielgindi/Charts/issues/2587) -- How change value double to value int format? [\#2586](https://github.com/danielgindi/Charts/issues/2586) -- stringForValue value [\#2585](https://github.com/danielgindi/Charts/issues/2585) -- Invalid architecture... support arm64. [\#2584](https://github.com/danielgindi/Charts/issues/2584) -- Line chart with blank data show Y axis label incorrect on iPhone 5 [\#2583](https://github.com/danielgindi/Charts/issues/2583) -- 'M\_PI' is deprecated: Please use 'Double.pi' or '.pi' to get the value of correct type and avoid casting. [\#2580](https://github.com/danielgindi/Charts/issues/2580) -- 0 lost when the value less than 1.0,why? [\#2579](https://github.com/danielgindi/Charts/issues/2579) -- Error Library not loaded: @rpath/libswiftAppKit.dylib [\#2578](https://github.com/danielgindi/Charts/issues/2578) -- CenterText/Description Text overruns onto PieChart [\#2577](https://github.com/danielgindi/Charts/issues/2577) -- Hide specific legend not all [\#2576](https://github.com/danielgindi/Charts/issues/2576) -- horizontal barchart each bar have different maximum value [\#2575](https://github.com/danielgindi/Charts/issues/2575) -- Barchart fixed interval in left axis [\#2574](https://github.com/danielgindi/Charts/issues/2574) -- Change color of Bar chart data label [\#2573](https://github.com/danielgindi/Charts/issues/2573) -- Visible ChartDataEntry when zoomed in? [\#2572](https://github.com/danielgindi/Charts/issues/2572) -- Changing color of the bar graph [\#2571](https://github.com/danielgindi/Charts/issues/2571) -- Custom bar chart highlight style [\#2570](https://github.com/danielgindi/Charts/issues/2570) -- How to show LineChart with icon [\#2566](https://github.com/danielgindi/Charts/issues/2566) -- how to do Paging [\#2565](https://github.com/danielgindi/Charts/issues/2565) -- Range float bars [\#2564](https://github.com/danielgindi/Charts/issues/2564) -- Cropping left axis labels and missing some values [\#2563](https://github.com/danielgindi/Charts/issues/2563) -- How to create a custom marker view in line chart for showing x values as well [\#2562](https://github.com/danielgindi/Charts/issues/2562) -- HorizontalBarChartView:when i set Xvalue = 0,1,2,3..... HorizontalBarChartView some X dont show [\#2559](https://github.com/danielgindi/Charts/issues/2559) -- But I hope also have the valueFonts property set for each font size, like valueColors [\#2558](https://github.com/danielgindi/Charts/issues/2558) -- charts uses iphone show "No architectures to compile for \(ONLY\_ACTIVE\_ARCH=YES, active arch=arm64, VALID\_ARCHS=i386 x86\_64 \)". [\#2557](https://github.com/danielgindi/Charts/issues/2557) -- Caching charts [\#2555](https://github.com/danielgindi/Charts/issues/2555) -- How to add X axis values in the balloon marker view in IOS Charts? [\#2554](https://github.com/danielgindi/Charts/issues/2554) -- One label for each data point - Line Chart - SOLUTION FOUND [\#2553](https://github.com/danielgindi/Charts/issues/2553) -- PieChart legend.yOffset bug [\#2552](https://github.com/danielgindi/Charts/issues/2552) -- PieChart legend.yOffset bug [\#2551](https://github.com/danielgindi/Charts/issues/2551) -- Duplicates x-axis labels are plotted separately in graph? [\#2549](https://github.com/danielgindi/Charts/issues/2549) -- How to set the label count for X axis ? [\#2548](https://github.com/danielgindi/Charts/issues/2548) -- Hide graph label if value fall below a certain threshold/minimum [\#2547](https://github.com/danielgindi/Charts/issues/2547) -- BarChar Position Label [\#2546](https://github.com/danielgindi/Charts/issues/2546) -- Swift language upgrade required [\#2544](https://github.com/danielgindi/Charts/issues/2544) -- BarChartDataEntry different value than value display for each BarChartDataSet [\#2543](https://github.com/danielgindi/Charts/issues/2543) -- LineChartDataSet why there is no valueFonts [\#2542](https://github.com/danielgindi/Charts/issues/2542) -- Need swift combined chart demo. [\#2540](https://github.com/danielgindi/Charts/issues/2540) -- Pie Chart Highlighted region [\#2536](https://github.com/danielgindi/Charts/issues/2536) -- Replace the value label without redraw the bar. [\#2535](https://github.com/danielgindi/Charts/issues/2535) -- Lines on Horizontal Bar Chart [\#2532](https://github.com/danielgindi/Charts/issues/2532) -- Cannot convert value of type 'AutoreleasingUnsafeMutablePointer\' to expected argument type 'AutoreleasingUnsafeMutablePointer\?' [\#2530](https://github.com/danielgindi/Charts/issues/2530) -- zoom programatically, reset the zoom, set the highlight and moving the X-Axis and the Y-Axis to the middle [\#2529](https://github.com/danielgindi/Charts/issues/2529) -- BarGraph - 0 values - Bar Offset [\#2528](https://github.com/danielgindi/Charts/issues/2528) -- Chart displays intermittently [\#2527](https://github.com/danielgindi/Charts/issues/2527) -- Changing BarChart xAxis label position [\#2526](https://github.com/danielgindi/Charts/issues/2526) -- Create PDF Of Charts [\#2525](https://github.com/danielgindi/Charts/issues/2525) -- What is the equivalent of "onChartDoubleTapped"? [\#2524](https://github.com/danielgindi/Charts/issues/2524) -- Delegate Memory Leak [\#2523](https://github.com/danielgindi/Charts/issues/2523) -- Chart is sometimes not showing data on Plus devices [\#2521](https://github.com/danielgindi/Charts/issues/2521) -- How to run in Xcode 9 \(beta\) [\#2520](https://github.com/danielgindi/Charts/issues/2520) -- HorizontalBarChartView offset X [\#2519](https://github.com/danielgindi/Charts/issues/2519) -- Line not showing in LineChart [\#2518](https://github.com/danielgindi/Charts/issues/2518) -- Displaying float values in bar chart label. [\#2517](https://github.com/danielgindi/Charts/issues/2517) -- Not working with Xcode 9 Beta1 [\#2514](https://github.com/danielgindi/Charts/issues/2514) -- PieChart: Identify univocally a specific entry [\#2513](https://github.com/danielgindi/Charts/issues/2513) -- Right Align Y Value Labels for Horizontal Bar Chart [\#2512](https://github.com/danielgindi/Charts/issues/2512) -- Swift 3 Cubic line chart [\#2510](https://github.com/danielgindi/Charts/issues/2510) -- Inserting dataPoint "labels" in Radar Chart [\#2508](https://github.com/danielgindi/Charts/issues/2508) -- How to remove decimals from y values in iOS Charts? [\#2506](https://github.com/danielgindi/Charts/issues/2506) -- Add background to chart's legend [\#2505](https://github.com/danielgindi/Charts/issues/2505) -- Combine Bar, Line and Pie chart [\#2503](https://github.com/danielgindi/Charts/issues/2503) -- Chart not in centre of view [\#2502](https://github.com/danielgindi/Charts/issues/2502) -- Can't use different Charts Framework with different versions of Xcode [\#2499](https://github.com/danielgindi/Charts/issues/2499) -- How to change the label colors of certain XAxis values? [\#2498](https://github.com/danielgindi/Charts/issues/2498) -- Chart points are being clipped out in ScatterChart [\#2496](https://github.com/danielgindi/Charts/issues/2496) -- PieChart render very small [\#2495](https://github.com/danielgindi/Charts/issues/2495) -- Bar values inside bar horizontally? [\#2494](https://github.com/danielgindi/Charts/issues/2494) -- I used Charts in my iOS project and when I start to zoom the chart labels on xAxis get repeated again and again. How can I fix my problem? [\#2493](https://github.com/danielgindi/Charts/issues/2493) -- linechart shadow [\#2492](https://github.com/danielgindi/Charts/issues/2492) -- Set a fixed bar width in BarChartView [\#2491](https://github.com/danielgindi/Charts/issues/2491) -- Linechart inverted [\#2490](https://github.com/danielgindi/Charts/issues/2490) -- Pie chart not accepting more than one dataSet [\#2489](https://github.com/danielgindi/Charts/issues/2489) -- Graph x-axis values not displaying in swift 3.0 [\#2488](https://github.com/danielgindi/Charts/issues/2488) -- How to round corner in Radar Charts? [\#2487](https://github.com/danielgindi/Charts/issues/2487) -- Display header label on xAxis and yAxis [\#2485](https://github.com/danielgindi/Charts/issues/2485) -- XAxis label issue with multiple/grouped bar chart [\#2481](https://github.com/danielgindi/Charts/issues/2481) -- After integration, the project package becomes bigger. [\#2480](https://github.com/danielgindi/Charts/issues/2480) -- Pinch to Zoom is not working as expected over Bar Chart [\#2479](https://github.com/danielgindi/Charts/issues/2479) -- Two markers on one line \[LineChartView\] [\#2476](https://github.com/danielgindi/Charts/issues/2476) -- Adjust the spacing between bars. \(not grouped\) [\#2475](https://github.com/danielgindi/Charts/issues/2475) -- Issue with order of x-values and Multi LineChart [\#2474](https://github.com/danielgindi/Charts/issues/2474) -- Show Integer values on LineChart [\#2473](https://github.com/danielgindi/Charts/issues/2473) -- Loading a blank chart [\#2472](https://github.com/danielgindi/Charts/issues/2472) -- LineChart isn't shown correct [\#2471](https://github.com/danielgindi/Charts/issues/2471) -- Device Orientation not detected when using Charts module [\#2469](https://github.com/danielgindi/Charts/issues/2469) -- How to set spacing between bars? [\#2467](https://github.com/danielgindi/Charts/issues/2467) -- what happened to sliceSpace function in piechartdataset? [\#2466](https://github.com/danielgindi/Charts/issues/2466) -- How to scroll between charts on carousel [\#2465](https://github.com/danielgindi/Charts/issues/2465) -- PieChartData and NSNumberFormatter memory leak about demo project [\#2464](https://github.com/danielgindi/Charts/issues/2464) -- Custom View within the PieChart Center [\#2463](https://github.com/danielgindi/Charts/issues/2463) -- toggle highlight for pie chart slice [\#2462](https://github.com/danielgindi/Charts/issues/2462) -- HorizontalBarChartView [\#2461](https://github.com/danielgindi/Charts/issues/2461) -- Cubic Line Distorted [\#2459](https://github.com/danielgindi/Charts/issues/2459) -- Plotband support [\#2458](https://github.com/danielgindi/Charts/issues/2458) -- Bubble charts: Can i set the size same to all the bubbles? [\#2456](https://github.com/danielgindi/Charts/issues/2456) -- Single point on line chart not showing - Swift 3 [\#2455](https://github.com/danielgindi/Charts/issues/2455) -- Plotting large amount of data slows down the Graph. [\#2454](https://github.com/danielgindi/Charts/issues/2454) -- Error on Manually adding on my project [\#2453](https://github.com/danielgindi/Charts/issues/2453) -- How to implement Gantt charts using iOS-Charts? [\#2451](https://github.com/danielgindi/Charts/issues/2451) -- How come I can't set a default color theme in ChartColorTemplate.swift? [\#2450](https://github.com/danielgindi/Charts/issues/2450) -- What is relation between the BubbleSize and the axis value?Can we control the size of Bubble in Bubble Chart? [\#2448](https://github.com/danielgindi/Charts/issues/2448) -- chart 3.0 xAxis labels not mapped [\#2447](https://github.com/danielgindi/Charts/issues/2447) -- fatal error: Index out of range while subclassing renderer [\#2446](https://github.com/danielgindi/Charts/issues/2446) -- Bug in line chart yAxis when range are less than 1 [\#2445](https://github.com/danielgindi/Charts/issues/2445) -- Help with custom graphic/chart [\#2442](https://github.com/danielgindi/Charts/issues/2442) -- PieChart center Attributed Text [\#2441](https://github.com/danielgindi/Charts/issues/2441) -- PieChart center Attributed Text [\#2440](https://github.com/danielgindi/Charts/issues/2440) -- show tooltip on click [\#2438](https://github.com/danielgindi/Charts/issues/2438) -- Got Error : “\_OBJC\_CLASS\_$\_\_TtC10ChartsDemo12XYMarkerView” in Charts [\#2437](https://github.com/danielgindi/Charts/issues/2437) -- Change color label over circle [\#2436](https://github.com/danielgindi/Charts/issues/2436) -- How to set labels based on max and min value of the plot? [\#2434](https://github.com/danielgindi/Charts/issues/2434) -- How to make the pie chart selected by default? [\#2431](https://github.com/danielgindi/Charts/issues/2431) -- Animate 3 dataSets one by one [\#2428](https://github.com/danielgindi/Charts/issues/2428) -- Marker points on wrong position [\#2426](https://github.com/danielgindi/Charts/issues/2426) -- Legend leak in version 3.0.1 [\#2425](https://github.com/danielgindi/Charts/issues/2425) -- Show Two Circles in Pie Chart [\#2424](https://github.com/danielgindi/Charts/issues/2424) -- restrainViewPort is not working. Chart stays the same! [\#2423](https://github.com/danielgindi/Charts/issues/2423) -- Line Chart show value on specific coordinate [\#2420](https://github.com/danielgindi/Charts/issues/2420) -- Is it possible to extend the gesture handler? [\#2419](https://github.com/danielgindi/Charts/issues/2419) -- Memory Leak in BarChartView Data [\#2416](https://github.com/danielgindi/Charts/issues/2416) -- Track Scroll Left or Right [\#2415](https://github.com/danielgindi/Charts/issues/2415) -- How can I add the xVals to LineChartData object? [\#2412](https://github.com/danielgindi/Charts/issues/2412) -- Line chart doesn't redraw correctly after removeEntry\(\) [\#2411](https://github.com/danielgindi/Charts/issues/2411) -- Bar width [\#2410](https://github.com/danielgindi/Charts/issues/2410) -- There is no way to restrict zoom level after certain zoom level [\#2409](https://github.com/danielgindi/Charts/issues/2409) -- Half Pie Chart no full view [\#2408](https://github.com/danielgindi/Charts/issues/2408) -- How to use gradient colors for each column in a histogram? [\#2407](https://github.com/danielgindi/Charts/issues/2407) -- Fill line chart when drag with two fingers [\#2405](https://github.com/danielgindi/Charts/issues/2405) -- chartValueSelected Delegate Method Not Called [\#2404](https://github.com/danielgindi/Charts/issues/2404) -- Draw bar line even though the value is zero [\#2403](https://github.com/danielgindi/Charts/issues/2403) -- Adding line/dataset on line chart that already has a line [\#2401](https://github.com/danielgindi/Charts/issues/2401) -- help with labels [\#2400](https://github.com/danielgindi/Charts/issues/2400) -- 'Charts/Charts.h' file not found when tried build using "XCODEBUILD" command in terminal [\#2397](https://github.com/danielgindi/Charts/issues/2397) -- moveViewToX\(\) has no affect on a chart whose frame has not been set yet [\#2395](https://github.com/danielgindi/Charts/issues/2395) -- Appending Units\(i.e. m/s, mpg, etc\) to yaxis?? [\#2394](https://github.com/danielgindi/Charts/issues/2394) -- Chart Top label Issue [\#2392](https://github.com/danielgindi/Charts/issues/2392) -- How to just draw one circle value for LineChartView [\#2391](https://github.com/danielgindi/Charts/issues/2391) -- Support for 3D charts [\#2389](https://github.com/danielgindi/Charts/issues/2389) -- Y Axis range calculation is incorrect for Bar Charts [\#2386](https://github.com/danielgindi/Charts/issues/2386) -- Is having a ChartViewBase inside a custom UIView even possible? [\#2384](https://github.com/danielgindi/Charts/issues/2384) -- "chartValueSelected" is not getting called. [\#2383](https://github.com/danielgindi/Charts/issues/2383) -- Does it support XO line\(American CandleStick\)? [\#2382](https://github.com/danielgindi/Charts/issues/2382) -- Chart Won't Display [\#2381](https://github.com/danielgindi/Charts/issues/2381) -- autoScaleMinMaxEnabled Not Working [\#2374](https://github.com/danielgindi/Charts/issues/2374) -- Graph is being drawn outside of visible area [\#2373](https://github.com/danielgindi/Charts/issues/2373) -- Compile error on Release build configuration [\#2372](https://github.com/danielgindi/Charts/issues/2372) -- moveViewToX clips bar [\#2370](https://github.com/danielgindi/Charts/issues/2370) -- swift 3.x -\> New ChartMarker? [\#2369](https://github.com/danielgindi/Charts/issues/2369) -- Crash on computeAxisValues of Bar Chart [\#2368](https://github.com/danielgindi/Charts/issues/2368) -- How to properly reset zoom on data refresh? [\#2367](https://github.com/danielgindi/Charts/issues/2367) -- What is the meaning of xValue in moveViewToAnimated? [\#2366](https://github.com/danielgindi/Charts/issues/2366) -- Horizontal Bar Chart rightAxis default maximum space [\#2363](https://github.com/danielgindi/Charts/issues/2363) -- Why my LineChartDataSet's line is behind the bar? [\#2354](https://github.com/danielgindi/Charts/issues/2354) -- charts2.5 bottom line render issue [\#2352](https://github.com/danielgindi/Charts/issues/2352) -- Limit the number of bars to 10 when the x-axis is made of strings [\#2351](https://github.com/danielgindi/Charts/issues/2351) -- Not able to plot values in linechart [\#2349](https://github.com/danielgindi/Charts/issues/2349) -- Text in Marker [\#2348](https://github.com/danielgindi/Charts/issues/2348) -- PieChart overlay lines or dots for select slices in the pie chart [\#2347](https://github.com/danielgindi/Charts/issues/2347) -- Multiple colors grid background [\#2346](https://github.com/danielgindi/Charts/issues/2346) -- The direction of the two BarChart [\#2345](https://github.com/danielgindi/Charts/issues/2345) -- how to format y-axix values [\#2343](https://github.com/danielgindi/Charts/issues/2343) -- different Bar color based on values [\#2342](https://github.com/danielgindi/Charts/issues/2342) -- XCode wants to convert Chart [\#2341](https://github.com/danielgindi/Charts/issues/2341) -- Population Pyramid [\#2340](https://github.com/danielgindi/Charts/issues/2340) -- Not all labels shown on horizontal bar chart with large datasets [\#2339](https://github.com/danielgindi/Charts/issues/2339) -- Using ChartViewBase as the type and instantiating the chart later as a specific type [\#2338](https://github.com/danielgindi/Charts/issues/2338) -- Remove Highlight from bar graph [\#2337](https://github.com/danielgindi/Charts/issues/2337) -- Set diffent style to single line graph [\#2336](https://github.com/danielgindi/Charts/issues/2336) -- change the color of the highlight point [\#2334](https://github.com/danielgindi/Charts/issues/2334) -- Extra space to the right of chart [\#2333](https://github.com/danielgindi/Charts/issues/2333) -- xcode 8.3 swift 3.1 [\#2332](https://github.com/danielgindi/Charts/issues/2332) -- AxisDependencyRight Question~~ [\#2331](https://github.com/danielgindi/Charts/issues/2331) -- Module Charts not found XCODE 8.1 Error [\#2330](https://github.com/danielgindi/Charts/issues/2330) -- How to remove Grid [\#2329](https://github.com/danielgindi/Charts/issues/2329) -- The spacing between the two points is wider than the distance between the labels [\#2327](https://github.com/danielgindi/Charts/issues/2327) -- Skipped installing realm-cocoa.framework binary due to the error: [\#2326](https://github.com/danielgindi/Charts/issues/2326) -- Pie Chart view as Int instead of double on segment? [\#2325](https://github.com/danielgindi/Charts/issues/2325) -- Not able to give X axis Values [\#2324](https://github.com/danielgindi/Charts/issues/2324) -- Labels to PieChart? v 3.0.2 [\#2323](https://github.com/danielgindi/Charts/issues/2323) -- How to prevent static data sets from redrawing and hogging CPU [\#2322](https://github.com/danielgindi/Charts/issues/2322) -- BarChart xAxis labels a moving [\#2321](https://github.com/danielgindi/Charts/issues/2321) -- How to add a fade background for data values [\#2320](https://github.com/danielgindi/Charts/issues/2320) -- Limit Line after update to 3.0.2 no longer shown [\#2319](https://github.com/danielgindi/Charts/issues/2319) -- Charts v3.0.2 does not build using Carthage [\#2317](https://github.com/danielgindi/Charts/issues/2317) -- spaceMin and spaceMax are not percentages [\#2314](https://github.com/danielgindi/Charts/issues/2314) -- API for increasing or decreasing condition for CandleStick Chart [\#2311](https://github.com/danielgindi/Charts/issues/2311) -- Create Tag to include 'fix for Xcode 8.3' [\#2309](https://github.com/danielgindi/Charts/issues/2309) -- Ambiguous use of 'data' [\#2304](https://github.com/danielgindi/Charts/issues/2304) -- Default backgroundColor \(nil\) displays as black instead of clear. [\#2222](https://github.com/danielgindi/Charts/issues/2222) -- pdf report with Line Chart blurry from iphone 7 [\#2204](https://github.com/danielgindi/Charts/issues/2204) -- how to add Values to Pie Chart? and how to show complete pie chart instead of doughnut [\#2150](https://github.com/danielgindi/Charts/issues/2150) -- 'LineChartView' is unavailable: cannot find Swift declaration for this class [\#2145](https://github.com/danielgindi/Charts/issues/2145) -- Display label MMyyyy for barChart [\#2142](https://github.com/danielgindi/Charts/issues/2142) -- barSpace attribute [\#2137](https://github.com/danielgindi/Charts/issues/2137) -- Bar Chart, Shifting Y Position [\#2134](https://github.com/danielgindi/Charts/issues/2134) -- highlightValue is throwing "fatal error: Index out of range" in Combined Chart [\#2076](https://github.com/danielgindi/Charts/issues/2076) - -**Merged pull requests:** - -- Update xcode project for xcode 9 [\#2767](https://github.com/danielgindi/Charts/pull/2767) ([petester42](https://github.com/petester42)) -- Fixed value setter on PieChartDataEntry [\#2754](https://github.com/danielgindi/Charts/pull/2754) ([martnst](https://github.com/martnst)) -- Conform to macOS api changes in swift 3.2 [\#2717](https://github.com/danielgindi/Charts/pull/2717) ([ohbargain](https://github.com/ohbargain)) -- Fix CombinedChartView not draw markers [\#2702](https://github.com/danielgindi/Charts/pull/2702) ([xzysun](https://github.com/xzysun)) -- Reduce build time with minor reference refactor [\#2679](https://github.com/danielgindi/Charts/pull/2679) ([xinranw](https://github.com/xinranw)) -- Fix Typo: Probider -\> Provider [\#2650](https://github.com/danielgindi/Charts/pull/2650) ([russellbstephens](https://github.com/russellbstephens)) -- Adding a third party tutorial [\#2604](https://github.com/danielgindi/Charts/pull/2604) ([osianSmith](https://github.com/osianSmith)) -- fix \#2099, avoid crash when some chart only allow 1 data set [\#2500](https://github.com/danielgindi/Charts/pull/2500) ([liuxuan30](https://github.com/liuxuan30)) -- tutorial link added to readme [\#2484](https://github.com/danielgindi/Charts/pull/2484) ([annalizhaz](https://github.com/annalizhaz)) -- Allow turning off drag in X and Y axes separately. [\#2413](https://github.com/danielgindi/Charts/pull/2413) ([maciejtrybilo](https://github.com/maciejtrybilo)) -- Run view port jobs afterwards \(Fixes \#2395\) [\#2396](https://github.com/danielgindi/Charts/pull/2396) ([feosuna1](https://github.com/feosuna1)) -- Minor improvements in BalloonMarker.swift [\#2393](https://github.com/danielgindi/Charts/pull/2393) ([valeriyvan](https://github.com/valeriyvan)) -- remove build for ci tests procedure, use `clean test` directly [\#2388](https://github.com/danielgindi/Charts/pull/2388) ([liuxuan30](https://github.com/liuxuan30)) -- Update Travis config for Xcode 8.3 and fix test failures [\#2378](https://github.com/danielgindi/Charts/pull/2378) ([liuxuan30](https://github.com/liuxuan30)) -- Fix Simple Bar Chart Demo, switch use of x and y values [\#2365](https://github.com/danielgindi/Charts/pull/2365) ([franqueli](https://github.com/franqueli)) -- Bug fixing with one line, updating ChartViewBase.swift [\#2355](https://github.com/danielgindi/Charts/pull/2355) ([Eric0625](https://github.com/Eric0625)) -- Fixed, If the last value is the max or min, the range will be wrong [\#2229](https://github.com/danielgindi/Charts/pull/2229) ([aelam](https://github.com/aelam)) -- fix \#2222 move default backgroundColor to initialize\(\) [\#2228](https://github.com/danielgindi/Charts/pull/2228) ([liuxuan30](https://github.com/liuxuan30)) -- Fix \#1879. Similar cut in half issue in scatter chart like others [\#1891](https://github.com/danielgindi/Charts/pull/1891) ([liuxuan30](https://github.com/liuxuan30)) - -## [v3.0.2](https://github.com/danielgindi/Charts/tree/v3.0.2) (2017-04-02) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.0.2...v3.0.2) - -## [3.0.2](https://github.com/danielgindi/Charts/tree/3.0.2) (2017-04-02) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.0.1...3.0.2) - -**Implemented enhancements:** - -- Plotting Realm data in Swift. RLMResults not available [\#898](https://github.com/danielgindi/Charts/issues/898) - -**Fixed bugs:** - -- \[Bug\] Double BarChart second value text mispaced [\#1191](https://github.com/danielgindi/Charts/issues/1191) -- \: CGAffineTransformInvert: singular matrix [\#802](https://github.com/danielgindi/Charts/issues/802) - -**Closed issues:** - -- Please give option for installing via Swift Package Manager too [\#2313](https://github.com/danielgindi/Charts/issues/2313) -- Adjust spacing between axis labels and axes? [\#2310](https://github.com/danielgindi/Charts/issues/2310) -- \*PieChart\* Get color of top 3 largest percent [\#2308](https://github.com/danielgindi/Charts/issues/2308) -- Set the x axis data problems, and 2.3.0 apis are quite different.Need your help [\#2307](https://github.com/danielgindi/Charts/issues/2307) -- little issue with chart custoemView size & chart data [\#2305](https://github.com/danielgindi/Charts/issues/2305) -- hello,A small problem. [\#2303](https://github.com/danielgindi/Charts/issues/2303) -- Running 1 of 1 custom shell scripts [\#2302](https://github.com/danielgindi/Charts/issues/2302) -- Multiple warnings xCode 8.3 [\#2298](https://github.com/danielgindi/Charts/issues/2298) -- Remove color label in pie-chart [\#2297](https://github.com/danielgindi/Charts/issues/2297) -- Charts 2.3 with Swift 3 \(xCode 8.3\) [\#2295](https://github.com/danielgindi/Charts/issues/2295) -- Modify Marker before showing value [\#2294](https://github.com/danielgindi/Charts/issues/2294) -- Xcode 8.3: 62 deprecation warnings [\#2293](https://github.com/danielgindi/Charts/issues/2293) -- Fix warning for Xcode8.3 [\#2292](https://github.com/danielgindi/Charts/issues/2292) -- Chart Selected function is not called on click of every Bar. [\#2291](https://github.com/danielgindi/Charts/issues/2291) -- “Swift Language Version” [\#2290](https://github.com/danielgindi/Charts/issues/2290) -- Swift 3.1 support [\#2288](https://github.com/danielgindi/Charts/issues/2288) -- Swift 3.1 Build [\#2287](https://github.com/danielgindi/Charts/issues/2287) -- ChartTouchDelegate never called [\#2286](https://github.com/danielgindi/Charts/issues/2286) -- Radar map size setting [\#2284](https://github.com/danielgindi/Charts/issues/2284) -- How do I set the radar map size? [\#2283](https://github.com/danielgindi/Charts/issues/2283) -- Adjust circle radius for individual line chart data point [\#2282](https://github.com/danielgindi/Charts/issues/2282) -- Get current axis interval between labels [\#2281](https://github.com/danielgindi/Charts/issues/2281) -- Only allow slice space for the selected item in a pie chart [\#2278](https://github.com/danielgindi/Charts/issues/2278) -- PieChartDataSet [\#2277](https://github.com/danielgindi/Charts/issues/2277) -- I want to un-highlight a line chart when dragging has stopped, among other things. Am I missing it? Thanks [\#2276](https://github.com/danielgindi/Charts/issues/2276) -- Demo for Swift 3 [\#2274](https://github.com/danielgindi/Charts/issues/2274) -- Getting the percentage and label for a slice [\#2273](https://github.com/danielgindi/Charts/issues/2273) -- Line chart - LineChartDataSet Background color. [\#2272](https://github.com/danielgindi/Charts/issues/2272) -- place image at top of each bar in bar graph [\#2271](https://github.com/danielgindi/Charts/issues/2271) -- How to draw circle at the end of a data set on line chart [\#2270](https://github.com/danielgindi/Charts/issues/2270) -- when i install pod 'Charts'. its install Old Version Of library 2.3 and give me error convert code into latest swift. [\#2269](https://github.com/danielgindi/Charts/issues/2269) -- ChartsDemo Buildtime Error: No such module 'RealmSwift' [\#2268](https://github.com/danielgindi/Charts/issues/2268) -- Total Data [\#2267](https://github.com/danielgindi/Charts/issues/2267) -- Line Chart Highlight, Remove X axis line and display label [\#2266](https://github.com/danielgindi/Charts/issues/2266) -- Increasing bar width in grouped sets of BarChartView [\#2263](https://github.com/danielgindi/Charts/issues/2263) -- lineChart.leftAxis.startAtZeroEnabled is not available in Swift 3 library [\#2262](https://github.com/danielgindi/Charts/issues/2262) -- Can't find highlightcolor [\#2256](https://github.com/danielgindi/Charts/issues/2256) -- Custom yAxis values [\#2254](https://github.com/danielgindi/Charts/issues/2254) -- Dynamic generate Int values for axis [\#2253](https://github.com/danielgindi/Charts/issues/2253) -- viewController can't be dealloc [\#2252](https://github.com/danielgindi/Charts/issues/2252) -- How to include a gap between data points & lines [\#2251](https://github.com/danielgindi/Charts/issues/2251) -- Highlight particular X and Y coordinations in the iOS charts [\#2250](https://github.com/danielgindi/Charts/issues/2250) -- Bar shapes are overlapped with other bars [\#2248](https://github.com/danielgindi/Charts/issues/2248) -- Xaxis Label value in range \(2.5-5.0,5.0-7.5\) [\#2246](https://github.com/danielgindi/Charts/issues/2246) -- Multiline axis labels are cut off [\#2244](https://github.com/danielgindi/Charts/issues/2244) -- Problems with creating CombinedChart \(Line + grouped BarChart\) in Swift 3.0 [\#2243](https://github.com/danielgindi/Charts/issues/2243) -- Convert to Current Swift Syntax [\#2242](https://github.com/danielgindi/Charts/issues/2242) -- Line chart real time data - memory leak [\#2241](https://github.com/danielgindi/Charts/issues/2241) -- Radar chart bug - grey view shown on 6 plus and 7 plus [\#2238](https://github.com/danielgindi/Charts/issues/2238) -- How to set dual axis in line chart [\#2237](https://github.com/danielgindi/Charts/issues/2237) -- Tableview stuttering when rendering a pie chart [\#2234](https://github.com/danielgindi/Charts/issues/2234) -- Set vertical legend [\#2233](https://github.com/danielgindi/Charts/issues/2233) -- how to join XAxisLabel in MultipleBarChart under every Bar [\#2232](https://github.com/danielgindi/Charts/issues/2232) -- Custom xAxisRenderer [\#2230](https://github.com/danielgindi/Charts/issues/2230) -- demo can not run [\#2227](https://github.com/danielgindi/Charts/issues/2227) -- Change color of lineChartDataSet when chartValueSelected [\#2226](https://github.com/danielgindi/Charts/issues/2226) -- Legend Label problem when the device changes orientation [\#2224](https://github.com/danielgindi/Charts/issues/2224) -- Legend vertical offset for horizontally aligned legends [\#2223](https://github.com/danielgindi/Charts/issues/2223) -- Don't display or load all Variables on the Left of the Bar \(iOS - Swift 3\) [\#2221](https://github.com/danielgindi/Charts/issues/2221) -- Horizontal Bar Chart lines not visible with two BarChartDataSet in chart data [\#2220](https://github.com/danielgindi/Charts/issues/2220) -- Bar chart with limit line for each Bar [\#2219](https://github.com/danielgindi/Charts/issues/2219) -- why the zero can't show at the first [\#2218](https://github.com/danielgindi/Charts/issues/2218) -- About BalloonMarker [\#2216](https://github.com/danielgindi/Charts/issues/2216) -- How can I have these values in positive? Thanks. [\#2212](https://github.com/danielgindi/Charts/issues/2212) -- Line Graph is not showing line on the Chart [\#2209](https://github.com/danielgindi/Charts/issues/2209) -- Issue of enum description [\#2208](https://github.com/danielgindi/Charts/issues/2208) -- I find a issues in HorizontalBarChartView [\#2205](https://github.com/danielgindi/Charts/issues/2205) -- My ipa\(used Charts\) is 40M ;another ipa\(unused Charts\) is 13M,how to be sliming??? [\#2203](https://github.com/danielgindi/Charts/issues/2203) -- Legend vertical offset [\#2202](https://github.com/danielgindi/Charts/issues/2202) -- Charts not showing on tvOS [\#2201](https://github.com/danielgindi/Charts/issues/2201) -- Is it enable to keep the origin visible X Range when I appended more data [\#2198](https://github.com/danielgindi/Charts/issues/2198) -- Issue with Realm [\#2195](https://github.com/danielgindi/Charts/issues/2195) -- External lines - Pie Chart [\#2194](https://github.com/danielgindi/Charts/issues/2194) -- Hide labels - Pie chart [\#2193](https://github.com/danielgindi/Charts/issues/2193) -- is two sided bar graph possible ? [\#2192](https://github.com/danielgindi/Charts/issues/2192) -- Optimisation of drawing many points on line graph [\#2190](https://github.com/danielgindi/Charts/issues/2190) -- Bar Chart with dual axis [\#2188](https://github.com/danielgindi/Charts/issues/2188) -- Customize Text inside Ballon Marker [\#2186](https://github.com/danielgindi/Charts/issues/2186) -- "Shell Script Invocation Error: Command /bin/sh failed with exit code 1' [\#2185](https://github.com/danielgindi/Charts/issues/2185) -- Increase space between bars with only one dataset and assign font for specific value and xAxis label [\#2184](https://github.com/danielgindi/Charts/issues/2184) -- "noDataText" does not work [\#2179](https://github.com/danielgindi/Charts/issues/2179) -- Change color of one label [\#2178](https://github.com/danielgindi/Charts/issues/2178) -- Line Chart not show empty values - Charts 3.0 [\#2176](https://github.com/danielgindi/Charts/issues/2176) -- Bottom Label is not printing whole array list. [\#2175](https://github.com/danielgindi/Charts/issues/2175) -- Stacked Horizontal Chart Scaling [\#2174](https://github.com/danielgindi/Charts/issues/2174) -- How to set different colors for intervals on LineChart? [\#2172](https://github.com/danielgindi/Charts/issues/2172) -- Could you tell me how to forbidden line chart scroll up and down? [\#2171](https://github.com/danielgindi/Charts/issues/2171) -- Fixed BarWidth based on Pixel for BarChart [\#2170](https://github.com/danielgindi/Charts/issues/2170) -- Branch Chart3.0-Swift2.3 not found. [\#2166](https://github.com/danielgindi/Charts/issues/2166) -- "clipValuesToContentEnabled" does not work [\#2163](https://github.com/danielgindi/Charts/issues/2163) -- BarChartView with TableView [\#2161](https://github.com/danielgindi/Charts/issues/2161) -- How to show label on x-axis at regular interval and tail end on the graph line [\#2160](https://github.com/danielgindi/Charts/issues/2160) -- Set line cap to CGMutablePath [\#2159](https://github.com/danielgindi/Charts/issues/2159) -- why we set the y value 2.57,but the chart show 3,if i set y value2.44,the chart show 2.how to do the problem. [\#2157](https://github.com/danielgindi/Charts/issues/2157) -- Demo crush !!! [\#2154](https://github.com/danielgindi/Charts/issues/2154) -- Fixing the Segmentation fault issue after Convert to Swift 3.0 [\#2151](https://github.com/danielgindi/Charts/issues/2151) -- GitHub API request failed [\#2149](https://github.com/danielgindi/Charts/issues/2149) -- y-Values and x-Values as string in barchart, [\#2147](https://github.com/danielgindi/Charts/issues/2147) -- Piechart with smooth edges? [\#2146](https://github.com/danielgindi/Charts/issues/2146) -- Pie chart highlighted slice offset [\#2144](https://github.com/danielgindi/Charts/issues/2144) -- Formatter data on OS X [\#2141](https://github.com/danielgindi/Charts/issues/2141) -- How to add dates to line chart? [\#2136](https://github.com/danielgindi/Charts/issues/2136) -- 'backgroundColor' is inaccessible due to 'internal' protection level on mac OS X [\#2135](https://github.com/danielgindi/Charts/issues/2135) -- Some object files have incompatible Objective-C category definitions. Some category metadata may be lost. All files containing Objective-C categories should be built using the same compiler. [\#2133](https://github.com/danielgindi/Charts/issues/2133) -- Any Demo of all charts in Swift 3 [\#2132](https://github.com/danielgindi/Charts/issues/2132) -- How to access the Position of labels on x axis of Combined Line and Bar chart on swift\(3.0.1\) [\#2131](https://github.com/danielgindi/Charts/issues/2131) -- Wrong Limit line positioning when axisMinimum is set to 0 [\#2128](https://github.com/danielgindi/Charts/issues/2128) -- Extremely Slow compile Times on XCode 8.2.1 and swift 3.0.2 [\#2127](https://github.com/danielgindi/Charts/issues/2127) -- How to add TrackBall and edit label above BarCharts in Charts swift2 and swift 3?? [\#2126](https://github.com/danielgindi/Charts/issues/2126) -- Xcode 8.3 Compatible [\#2125](https://github.com/danielgindi/Charts/issues/2125) -- LineChartData\(dataSets: dataSets\) Missing xVals [\#2124](https://github.com/danielgindi/Charts/issues/2124) -- How to assign custom String values to XAxis? [\#2122](https://github.com/danielgindi/Charts/issues/2122) -- Simple Radar Chart causing hang / cpu 99% [\#2121](https://github.com/danielgindi/Charts/issues/2121) -- Can i use the framework without including the whole project ? [\#2118](https://github.com/danielgindi/Charts/issues/2118) -- Undefined symbols for architecture arm64 - Charts 3.0 CocoaPods [\#2117](https://github.com/danielgindi/Charts/issues/2117) -- method setlabelstoskip missing from XAxis.swift [\#2115](https://github.com/danielgindi/Charts/issues/2115) -- SocketIOClientConfiguration.swift wont compile [\#2113](https://github.com/danielgindi/Charts/issues/2113) -- No code signing identities found: No valid signing identities \(i.e. certificate and private key pair\) were found [\#2112](https://github.com/danielgindi/Charts/issues/2112) -- Can I custom draw circle in LineChart in version 3.0 ?\[help\] [\#2104](https://github.com/danielgindi/Charts/issues/2104) -- App crash XCode 8.2 Chart version 3.0 [\#2103](https://github.com/danielgindi/Charts/issues/2103) -- Charts 3.0.1 - Align x labels \(dates\) with plots [\#2094](https://github.com/danielgindi/Charts/issues/2094) -- Demo in Swift 3 [\#2092](https://github.com/danielgindi/Charts/issues/2092) -- How to set xAxis values from array in Swift 3.0 [\#2090](https://github.com/danielgindi/Charts/issues/2090) -- error to Methode [\#2089](https://github.com/danielgindi/Charts/issues/2089) -- fitBars doesnt seems to work [\#2088](https://github.com/danielgindi/Charts/issues/2088) -- oh, no!!!!!! Demo code can't run [\#2087](https://github.com/danielgindi/Charts/issues/2087) -- In BarChartView leftAxis labels cutdown, does-not fit on screen. [\#2086](https://github.com/danielgindi/Charts/issues/2086) -- accessing .rightAxis gives EXC\_BAD\_ACCESS [\#2082](https://github.com/danielgindi/Charts/issues/2082) -- leftAxis and value overlap in lineChartView [\#2080](https://github.com/danielgindi/Charts/issues/2080) -- I want to add 4 colours to the background of the chart. The colour zones depend on the y values. [\#2079](https://github.com/danielgindi/Charts/issues/2079) -- Value labels for multiple ChartDataSets all aligned at the beginning \(left\) of each bar in HorizontalBarChart [\#2077](https://github.com/danielgindi/Charts/issues/2077) -- How to Resize Labels in Pie Chart Legend [\#2075](https://github.com/danielgindi/Charts/issues/2075) -- Bar chart data entry [\#2074](https://github.com/danielgindi/Charts/issues/2074) -- How can I have a limit zone \(in android library mpandroidchart\) like feature in this iOS library [\#2073](https://github.com/danielgindi/Charts/issues/2073) -- BarChartView is unavailable, cannot find swift declaration [\#2072](https://github.com/danielgindi/Charts/issues/2072) -- Not enable to draw custom shape which is based on the XValue or YValue ? [\#2071](https://github.com/danielgindi/Charts/issues/2071) -- Can horizontalBarChartView invert the Axis ? [\#2070](https://github.com/danielgindi/Charts/issues/2070) -- can't set different padding of each side [\#2068](https://github.com/danielgindi/Charts/issues/2068) -- Area chart with missing points [\#2067](https://github.com/danielgindi/Charts/issues/2067) -- Demo code can't run [\#2066](https://github.com/danielgindi/Charts/issues/2066) -- Positioning the XAxis inconsistent with Y-axis and the Wiki in Swift 3 [\#2065](https://github.com/danielgindi/Charts/issues/2065) -- Radar chart title [\#2061](https://github.com/danielgindi/Charts/issues/2061) -- fixed increment [\#2059](https://github.com/danielgindi/Charts/issues/2059) -- Line Chart with callouts [\#2058](https://github.com/danielgindi/Charts/issues/2058) -- Delegate ChartValueSelected Not Called. [\#2057](https://github.com/danielgindi/Charts/issues/2057) -- IValueFormatter protocol not working [\#2055](https://github.com/danielgindi/Charts/issues/2055) -- "BalloonMarker“ cannot be find in my project [\#2051](https://github.com/danielgindi/Charts/issues/2051) -- How to use marker when I use CombinedChart? [\#2046](https://github.com/danielgindi/Charts/issues/2046) -- yVals have decimal point [\#2045](https://github.com/danielgindi/Charts/issues/2045) -- LeftAxis Labels will disappear [\#2044](https://github.com/danielgindi/Charts/issues/2044) -- Can't addEntry to a set in Swift 3 [\#2043](https://github.com/danielgindi/Charts/issues/2043) -- Will not compile in existing Objective-C Project. [\#2041](https://github.com/danielgindi/Charts/issues/2041) -- labels on xAxis not showing up and incorrect values on yAxis [\#2040](https://github.com/danielgindi/Charts/issues/2040) -- xAxis.valueFormatter = self create retain cycle [\#2039](https://github.com/danielgindi/Charts/issues/2039) -- Label's point of view [\#2038](https://github.com/danielgindi/Charts/issues/2038) -- How to show limited visible xValues labels? [\#2037](https://github.com/danielgindi/Charts/issues/2037) -- BarChart XAxis between Positive & Negative Values [\#2036](https://github.com/danielgindi/Charts/issues/2036) -- Error when trying to run ChartsDemo on iOS Simulator \(image not found\) [\#2035](https://github.com/danielgindi/Charts/issues/2035) -- big snap shot [\#2034](https://github.com/danielgindi/Charts/issues/2034) -- module file's minimum deployment target is ios9.3 [\#2031](https://github.com/danielgindi/Charts/issues/2031) -- Date formatter doesn't show up properly when using multiple bars in a chart. [\#2030](https://github.com/danielgindi/Charts/issues/2030) -- Y axis dynamic sampling ? [\#2029](https://github.com/danielgindi/Charts/issues/2029) -- Convert line chart entry to take dictionary [\#2027](https://github.com/danielgindi/Charts/issues/2027) -- How to set string value line \(27 Oct\) in xAxis [\#2025](https://github.com/danielgindi/Charts/issues/2025) -- Build \[ChartsDemo\] Error : 「ChartsRealm Reason: image not found 」alaway [\#2024](https://github.com/danielgindi/Charts/issues/2024) -- \[LineChartView\] setting xAxis.axisMinimum affects xAxis.spaceMin [\#2022](https://github.com/danielgindi/Charts/issues/2022) -- c vcgffrgfffgffgfgffffrfrfrrfdfdfdfdfdfdfggkjhghghghghjhjhjhjkjkjkkkklklklklikii0987654321poijkl;';lk;l; [\#2021](https://github.com/danielgindi/Charts/issues/2021) -- How to make the highlight line work with UIPanGestureRecognizer [\#2019](https://github.com/danielgindi/Charts/issues/2019) -- BarChart Issue for plotting the value on x-axis serially [\#2017](https://github.com/danielgindi/Charts/issues/2017) -- Please help me with the Pie Charts in Charts 3.0.1. [\#2016](https://github.com/danielgindi/Charts/issues/2016) -- ipa becomes larger after using Charts [\#2015](https://github.com/danielgindi/Charts/issues/2015) -- BarChartView highlight issues [\#2014](https://github.com/danielgindi/Charts/issues/2014) -- How to set up a line chart, the starting point of the distance from the left margin, border distance end points [\#2013](https://github.com/danielgindi/Charts/issues/2013) -- mult bars not show all [\#2012](https://github.com/danielgindi/Charts/issues/2012) -- how to change legend font size? [\#2011](https://github.com/danielgindi/Charts/issues/2011) -- image instead of text in CenterText in pie chart [\#2010](https://github.com/danielgindi/Charts/issues/2010) -- Change PieChart Center Color [\#2009](https://github.com/danielgindi/Charts/issues/2009) -- Demo issues [\#2008](https://github.com/danielgindi/Charts/issues/2008) -- How to display last label in X-Axis [\#2007](https://github.com/danielgindi/Charts/issues/2007) -- One point different values on the axis X [\#2005](https://github.com/danielgindi/Charts/issues/2005) -- Hide all text/labels/values in pieChart [\#2004](https://github.com/danielgindi/Charts/issues/2004) -- it is not an issue. it is related to OHLC chart [\#2003](https://github.com/danielgindi/Charts/issues/2003) -- Disable PieChart Label in Chart [\#2002](https://github.com/danielgindi/Charts/issues/2002) -- \[LineChartViewController stringForValue:axis:\] [\#2001](https://github.com/danielgindi/Charts/issues/2001) -- Values are cut out of the window [\#2000](https://github.com/danielgindi/Charts/issues/2000) -- XAxis in top AND bottom position [\#1999](https://github.com/danielgindi/Charts/issues/1999) -- Can't compile under Xcode 8.1 with Swift 3.0 [\#1998](https://github.com/danielgindi/Charts/issues/1998) -- Always display max 5 visible bars in BarChartView [\#1997](https://github.com/danielgindi/Charts/issues/1997) -- I want touchpoint in the bar to do something [\#1996](https://github.com/danielgindi/Charts/issues/1996) -- Is there any way to change chart data label from bottom of table to top? [\#1995](https://github.com/danielgindi/Charts/issues/1995) -- Installation not clear, for me [\#1994](https://github.com/danielgindi/Charts/issues/1994) -- Add space between bar chart [\#1993](https://github.com/danielgindi/Charts/issues/1993) -- How to fix the distance between each point on the X-coordinate? [\#1992](https://github.com/danielgindi/Charts/issues/1992) -- How to add tips to RadarChartView [\#1991](https://github.com/danielgindi/Charts/issues/1991) -- Piechart issue [\#1990](https://github.com/danielgindi/Charts/issues/1990) -- Multiple colors issue in stacked bar line charts swift3 [\#1989](https://github.com/danielgindi/Charts/issues/1989) -- ChartViewDelegate is not called. [\#1988](https://github.com/danielgindi/Charts/issues/1988) -- Always display vertical scrolling indicator on horizontal bar chart [\#1987](https://github.com/danielgindi/Charts/issues/1987) -- Can't compile DemoProject [\#1986](https://github.com/danielgindi/Charts/issues/1986) -- My pie chart legends still not showing [\#1985](https://github.com/danielgindi/Charts/issues/1985) -- no yValCount in ChartData [\#1982](https://github.com/danielgindi/Charts/issues/1982) -- no limitLineSegmentsBuffer in YAxisRenderer [\#1981](https://github.com/danielgindi/Charts/issues/1981) -- Legend label missing in pie chart [\#1980](https://github.com/danielgindi/Charts/issues/1980) -- For X axis the values are not adding [\#1979](https://github.com/danielgindi/Charts/issues/1979) -- When I have two data, charts shows the three data automatically [\#1978](https://github.com/danielgindi/Charts/issues/1978) -- Two legends for stacked bar chart [\#1977](https://github.com/danielgindi/Charts/issues/1977) -- X axis coordinate point spacing [\#1975](https://github.com/danielgindi/Charts/issues/1975) -- Carthage was not found [\#1974](https://github.com/danielgindi/Charts/issues/1974) -- How to Show XAxis Label On YAxis Bar In BarView Charts? [\#1973](https://github.com/danielgindi/Charts/issues/1973) -- Labels on Mac OS X application : place and title [\#1972](https://github.com/danielgindi/Charts/issues/1972) -- I am gettign @import AppKit is missing in Charts-Swift.h under charts.framework [\#1971](https://github.com/danielgindi/Charts/issues/1971) -- Multiline chart with common data point [\#1970](https://github.com/danielgindi/Charts/issues/1970) -- Version 3.0.1: Fill gradient fills out the wrong side of the chart [\#1968](https://github.com/danielgindi/Charts/issues/1968) -- How to pass data to the X axis?? [\#1967](https://github.com/danielgindi/Charts/issues/1967) -- How do I implement a legend click event? [\#1965](https://github.com/danielgindi/Charts/issues/1965) -- can't set the XVals [\#1964](https://github.com/danielgindi/Charts/issues/1964) -- Color for Legend label [\#1962](https://github.com/danielgindi/Charts/issues/1962) -- Two y axis plot on a side? [\#1961](https://github.com/danielgindi/Charts/issues/1961) -- Scrolling feature? [\#1960](https://github.com/danielgindi/Charts/issues/1960) -- Can you add the chart Of the triangle? [\#1958](https://github.com/danielgindi/Charts/issues/1958) -- Multiple y-data for single x-index [\#1955](https://github.com/danielgindi/Charts/issues/1955) -- LineChartView: axisMaximum and axisMinimum work wrong in rightAxis [\#1953](https://github.com/danielgindi/Charts/issues/1953) -- Radar Chart axis maximum [\#1952](https://github.com/danielgindi/Charts/issues/1952) -- Adding a single x-axis label for two data points. [\#1951](https://github.com/danielgindi/Charts/issues/1951) -- Adding title to X-axis and Y-axis [\#1950](https://github.com/danielgindi/Charts/issues/1950) -- Find screen location for bars in a bar chart [\#1949](https://github.com/danielgindi/Charts/issues/1949) -- \(3.0 Regression\) Scatter chart cuts off data at the edges [\#1946](https://github.com/danielgindi/Charts/issues/1946) -- How automatic showing marker? [\#1944](https://github.com/danielgindi/Charts/issues/1944) -- Right and left margins [\#1942](https://github.com/danielgindi/Charts/issues/1942) -- Displaying an overlay with extra / more detailed information on mouse hover [\#1940](https://github.com/danielgindi/Charts/issues/1940) -- Can we have flexible y Axis scale [\#1939](https://github.com/danielgindi/Charts/issues/1939) -- Charts3.0 - Can not show all the xAxis label if more than 8 value - Swift [\#1938](https://github.com/danielgindi/Charts/issues/1938) -- Barchart xAxis interval [\#1937](https://github.com/danielgindi/Charts/issues/1937) -- Avoiding chart legend [\#1936](https://github.com/danielgindi/Charts/issues/1936) -- Module compiled with Swift 2.3 cannot be imported in Swift 3.0.1 [\#1935](https://github.com/danielgindi/Charts/issues/1935) -- Charts-2.3.0/Source/ChartsRealm/Data/RealmPieData.swift:19:8: No such module 'Realm' [\#1934](https://github.com/danielgindi/Charts/issues/1934) -- iOS Demo Fails to build [\#1933](https://github.com/danielgindi/Charts/issues/1933) -- Pie chart Outside values, Inside Value and legend value [\#1932](https://github.com/danielgindi/Charts/issues/1932) -- Mermory Leak in "specialized ChartXAxisRenderer.drawLabels\(context : CGContext, pos : CGFloat, anchor : CGPoint\) -\> \(\)" [\#1928](https://github.com/danielgindi/Charts/issues/1928) -- stringForValue method return unexpected value when reload TableView data. [\#1927](https://github.com/danielgindi/Charts/issues/1927) -- Can't render CombinedChartView [\#1926](https://github.com/danielgindi/Charts/issues/1926) -- Migration to Chart 3.0, Problem with Stack BarChartView [\#1925](https://github.com/danielgindi/Charts/issues/1925) -- PieChartData issue in Swift 3 [\#1924](https://github.com/danielgindi/Charts/issues/1924) -- Values overlap for bar chart and labels of X-Axis [\#1923](https://github.com/danielgindi/Charts/issues/1923) -- Please Please Help, I can’t get Charts installed properly [\#1922](https://github.com/danielgindi/Charts/issues/1922) -- Chart bar finance \(OHLC Chart\) [\#1921](https://github.com/danielgindi/Charts/issues/1921) -- Double value cannot be converted to Int in AxisRendererBase.swift on line 125 [\#1920](https://github.com/danielgindi/Charts/issues/1920) -- Highlighted values on piechart too high? [\#1919](https://github.com/danielgindi/Charts/issues/1919) -- How to achieve this effect? [\#1918](https://github.com/danielgindi/Charts/issues/1918) -- SOLVED: Round number less than zero x values issue [\#1916](https://github.com/danielgindi/Charts/issues/1916) -- Charts does not install correctly [\#1915](https://github.com/danielgindi/Charts/issues/1915) -- Xcode 8.1 is reporting 'No such Module 'Charts' & Build/Compilation Errors [\#1914](https://github.com/danielgindi/Charts/issues/1914) -- Hide legend [\#1913](https://github.com/danielgindi/Charts/issues/1913) -- xAxis force show last label [\#1912](https://github.com/danielgindi/Charts/issues/1912) -- How to install in Xcode 7.3.1 [\#1911](https://github.com/danielgindi/Charts/issues/1911) -- Can we resurrect Chart2.2.5-Swift3.0? [\#1910](https://github.com/danielgindi/Charts/issues/1910) -- Chart Swift files not running on Obj-C XCODE8.0 install [\#1908](https://github.com/danielgindi/Charts/issues/1908) -- How to draw two circles and compare? [\#1906](https://github.com/danielgindi/Charts/issues/1906) -- custom xAxis for line chart I need an example [\#1905](https://github.com/danielgindi/Charts/issues/1905) -- QUESTION - How mask the ranges values in a Graph [\#1904](https://github.com/danielgindi/Charts/issues/1904) -- How to give xAxis customized labels for linechartview [\#1903](https://github.com/danielgindi/Charts/issues/1903) -- How to set the axis options of radar chart? [\#1902](https://github.com/danielgindi/Charts/issues/1902) -- no match color bar chart with label [\#1900](https://github.com/danielgindi/Charts/issues/1900) -- LineChartView highlightEnabled no work [\#1899](https://github.com/danielgindi/Charts/issues/1899) -- Can i change the value Above bar from double to int? [\#1898](https://github.com/danielgindi/Charts/issues/1898) -- Scrolling x-axis labels [\#1897](https://github.com/danielgindi/Charts/issues/1897) -- noDataText doesn't work on CombinedChart \(works fine on PieChart and BarChart\) [\#1896](https://github.com/danielgindi/Charts/issues/1896) -- StringForValue in class IValueFormatter receives dataSetIndex as 0 [\#1895](https://github.com/danielgindi/Charts/issues/1895) -- Cannot build in big project using cocoapods [\#1894](https://github.com/danielgindi/Charts/issues/1894) -- Carthage build error with xcode 8.1 and Charts 2.3.0 [\#1893](https://github.com/danielgindi/Charts/issues/1893) -- Unable to select BarChartView from storyboard \(iOS\) [\#1892](https://github.com/danielgindi/Charts/issues/1892) -- XAxis entry count is greater than it should be. [\#1890](https://github.com/danielgindi/Charts/issues/1890) -- pod update failed - ARC Semantic Issue [\#1888](https://github.com/danielgindi/Charts/issues/1888) -- How to show marker on y-Axis data? [\#1887](https://github.com/danielgindi/Charts/issues/1887) -- Can't building and run the ChartsDemo [\#1886](https://github.com/danielgindi/Charts/issues/1886) -- how to resolve label overlapping problem with stack bar chart [\#1885](https://github.com/danielgindi/Charts/issues/1885) -- PieChart values [\#1884](https://github.com/danielgindi/Charts/issues/1884) -- Custom marker gets displayed wrong on the latest value [\#1883](https://github.com/danielgindi/Charts/issues/1883) -- Tap gesture inside the candle bar [\#1882](https://github.com/danielgindi/Charts/issues/1882) -- rotating chartview [\#1881](https://github.com/danielgindi/Charts/issues/1881) -- \[Question\] Scatter Chart && Bubble Chart: How to show out whole radius instead of hiding half radius of first data entry? [\#1879](https://github.com/danielgindi/Charts/issues/1879) -- Horizontal bar chart dose not show all xAxis labels. [\#1878](https://github.com/danielgindi/Charts/issues/1878) -- X axis values [\#1877](https://github.com/danielgindi/Charts/issues/1877) -- Pie Chart no xAxis [\#1875](https://github.com/danielgindi/Charts/issues/1875) -- want the demo application in swift 3.0 for Charts [\#1872](https://github.com/danielgindi/Charts/issues/1872) -- Pie Bar Chart issues [\#1870](https://github.com/danielgindi/Charts/issues/1870) -- PieChartView a strange arrow [\#1869](https://github.com/danielgindi/Charts/issues/1869) -- custom gradient color of BarChatView [\#1868](https://github.com/danielgindi/Charts/issues/1868) -- Set space between labels in xAxis [\#1865](https://github.com/danielgindi/Charts/issues/1865) -- label over sample point [\#1864](https://github.com/danielgindi/Charts/issues/1864) -- Realtime Scatterplot crashes when each ChartDataEntry is added dynamically on ScatterView.data [\#1863](https://github.com/danielgindi/Charts/issues/1863) -- Assign Bar Colours Selectively [\#1862](https://github.com/danielgindi/Charts/issues/1862) -- Detect when finger leaves the chart area [\#1861](https://github.com/danielgindi/Charts/issues/1861) -- Pie chart touch event conflict [\#1860](https://github.com/danielgindi/Charts/issues/1860) -- Customize X-axis and grid lines [\#1859](https://github.com/danielgindi/Charts/issues/1859) -- Issue with candle stick when used in combined chart [\#1858](https://github.com/danielgindi/Charts/issues/1858) -- CandleStick Background Color [\#1857](https://github.com/danielgindi/Charts/issues/1857) -- Line Support Gradient Color? [\#1856](https://github.com/danielgindi/Charts/issues/1856) -- Piechart has no xAxis? [\#1855](https://github.com/danielgindi/Charts/issues/1855) -- Retain cycle setting delegate to valueFormatter [\#1854](https://github.com/danielgindi/Charts/issues/1854) -- how to show Xaxis label value as my array value [\#1852](https://github.com/danielgindi/Charts/issues/1852) -- Skip Drawing Circles for LineCharts [\#1795](https://github.com/danielgindi/Charts/issues/1795) -- Realm update [\#1789](https://github.com/danielgindi/Charts/issues/1789) -- "Module compiled with Swift 3.0 cannot be imported in Swift 3.0.1" [\#1788](https://github.com/danielgindi/Charts/issues/1788) -- Move Realm integration to another repository [\#1756](https://github.com/danielgindi/Charts/issues/1756) -- limit line real time update [\#1755](https://github.com/danielgindi/Charts/issues/1755) -- Travis does not use github token for pull request build [\#1734](https://github.com/danielgindi/Charts/issues/1734) -- custom string value at top of bar. [\#1109](https://github.com/danielgindi/Charts/issues/1109) - -**Merged pull requests:** - -- Minor typo fix in console alert message "it's" -\> "its" [\#2301](https://github.com/danielgindi/Charts/pull/2301) ([simonbromberg](https://github.com/simonbromberg)) -- Fix Xcode 8.3 compiler warnings [\#2279](https://github.com/danielgindi/Charts/pull/2279) ([krbarnes](https://github.com/krbarnes)) -- Updated to use Realm version 2.4.3 [\#2199](https://github.com/danielgindi/Charts/pull/2199) ([kimdv](https://github.com/kimdv)) -- Fixed the inconsistency of AxisMax and AxisMin [\#2177](https://github.com/danielgindi/Charts/pull/2177) ([aelam](https://github.com/aelam)) -- Fixes index out of range crash. [\#2167](https://github.com/danielgindi/Charts/pull/2167) ([kzaher](https://github.com/kzaher)) -- remove deprecation warnings in XCode 8.3 [\#2162](https://github.com/danielgindi/Charts/pull/2162) ([LeviDahl](https://github.com/LeviDahl)) -- 'backgroundColor' is inaccessible due to 'internal' protection level … [\#2156](https://github.com/danielgindi/Charts/pull/2156) ([thierryH91200](https://github.com/thierryH91200)) -- Fixes Xcode 8.3 beta build issue [\#2116](https://github.com/danielgindi/Charts/pull/2116) ([davidarve](https://github.com/davidarve)) -- Adds NSPhotoLibraryUsageDescription to plist of ChartsDemo [\#2101](https://github.com/danielgindi/Charts/pull/2101) ([valeriyvan](https://github.com/valeriyvan)) -- Fix demo and test targets not running/testing [\#2084](https://github.com/danielgindi/Charts/pull/2084) ([petester42](https://github.com/petester42)) -- fix a typo, as orientation is horizontal by default [\#2078](https://github.com/danielgindi/Charts/pull/2078) ([liuxuan30](https://github.com/liuxuan30)) -- Update Podspec RealmSwift Dependency to 2.1.1 to be in line with Cartfile [\#2064](https://github.com/danielgindi/Charts/pull/2064) ([anttyc](https://github.com/anttyc)) -- Fix NSCopying implementation in CandleChartDataEntry [\#2056](https://github.com/danielgindi/Charts/pull/2056) ([leo150](https://github.com/leo150)) -- Add support for extensions [\#2048](https://github.com/danielgindi/Charts/pull/2048) ([raptorxcz](https://github.com/raptorxcz)) -- Update "Usage" section of README [\#1984](https://github.com/danielgindi/Charts/pull/1984) ([elaewin](https://github.com/elaewin)) -- All Charts Icons Support Swift3 \[Dub \#629, \#624, \#1261\] [\#1793](https://github.com/danielgindi/Charts/pull/1793) ([abjurato](https://github.com/abjurato)) - -## [3.0.1](https://github.com/danielgindi/Charts/tree/3.0.1) (2016-11-20) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.0.1...3.0.1) - -## [v3.0.1](https://github.com/danielgindi/Charts/tree/v3.0.1) (2016-11-20) -[Full Changelog](https://github.com/danielgindi/Charts/compare/2.3.1...v3.0.1) - -**Closed issues:** - -- Legend under the bar in bar Chart [\#1850](https://github.com/danielgindi/Charts/issues/1850) -- MultipleBarChart barSpace does not work [\#1849](https://github.com/danielgindi/Charts/issues/1849) -- Can not show decimal in y value on BarChart [\#1848](https://github.com/danielgindi/Charts/issues/1848) -- Cannot add labels to a simple Bar Chart [\#1846](https://github.com/danielgindi/Charts/issues/1846) -- when running my project on iphone device but not simulator it has error"image not found" [\#1845](https://github.com/danielgindi/Charts/issues/1845) -- Removing red selector cross on Line Chart nodes [\#1844](https://github.com/danielgindi/Charts/issues/1844) -- Get screen\(x,y\) value from the plotted points [\#1843](https://github.com/danielgindi/Charts/issues/1843) -- Color between two limit lines [\#1842](https://github.com/danielgindi/Charts/issues/1842) -- Charts-umbrella.h [\#1841](https://github.com/danielgindi/Charts/issues/1841) -- Unable to call 'data' from lineChartView. [\#1839](https://github.com/danielgindi/Charts/issues/1839) -- How to use charts library in my objective c program?.. [\#1837](https://github.com/danielgindi/Charts/issues/1837) -- Migration to Swift 3.x [\#1836](https://github.com/danielgindi/Charts/issues/1836) -- How to hide BarChart hide bottom description color & text ? [\#1835](https://github.com/danielgindi/Charts/issues/1835) -- please help Line Graph not working on Charts 2.3.0 \(for Xcode8 and Swift 2.3.0\) [\#1834](https://github.com/danielgindi/Charts/issues/1834) -- Error when adding embedded binaries [\#1832](https://github.com/danielgindi/Charts/issues/1832) -- X-Axis for different different charts [\#1831](https://github.com/danielgindi/Charts/issues/1831) -- Setting values label [\#1829](https://github.com/danielgindi/Charts/issues/1829) -- Adding background color between two limit lines [\#1828](https://github.com/danielgindi/Charts/issues/1828) -- Horizontal bar chart doesn't start at 0 [\#1827](https://github.com/danielgindi/Charts/issues/1827) -- Gradient Background for LineChart. \(Not Working\) [\#1826](https://github.com/danielgindi/Charts/issues/1826) -- y axis label show wiered value 1.11022302462516e- when passed 0 as value [\#1825](https://github.com/danielgindi/Charts/issues/1825) -- Pie chart specific colors [\#1824](https://github.com/danielgindi/Charts/issues/1824) -- Help ? [\#1823](https://github.com/danielgindi/Charts/issues/1823) -- Its possible change the thickness of the pie chart? [\#1822](https://github.com/danielgindi/Charts/issues/1822) -- BarChart moveToX wrong [\#1820](https://github.com/danielgindi/Charts/issues/1820) -- How to set multiple Stackbar with Charts 3 [\#1819](https://github.com/danielgindi/Charts/issues/1819) -- How do i set [\#1818](https://github.com/danielgindi/Charts/issues/1818) -- LimitLine Label Value Overlap with BarChartData Label [\#1817](https://github.com/danielgindi/Charts/issues/1817) -- What is the replacement for xVals for BarChartData? in swift 3.0 [\#1816](https://github.com/danielgindi/Charts/issues/1816) -- Updated Demo Example for swift3 [\#1815](https://github.com/danielgindi/Charts/issues/1815) -- Line Chart: how to change background color through every odd label on YAxis? [\#1812](https://github.com/danielgindi/Charts/issues/1812) -- Can Radar Chart draw backgroud like this? [\#1811](https://github.com/danielgindi/Charts/issues/1811) -- Can i customize the X axis text a different color? [\#1810](https://github.com/danielgindi/Charts/issues/1810) -- Can we make a 3D Barchart with this Library?? [\#1809](https://github.com/danielgindi/Charts/issues/1809) -- 3.0.0 - adding X Values to LineChartData no longer supported? [\#1808](https://github.com/danielgindi/Charts/issues/1808) -- Swift 3 BarChart with image and title. [\#1807](https://github.com/danielgindi/Charts/issues/1807) -- How to make horizontal dotted lines or remove it? [\#1806](https://github.com/danielgindi/Charts/issues/1806) -- Full control over x labels in 3.0.0 [\#1804](https://github.com/danielgindi/Charts/issues/1804) -- How to change stackbar according to order? [\#1803](https://github.com/danielgindi/Charts/issues/1803) -- How to change stackbar according to order [\#1802](https://github.com/danielgindi/Charts/issues/1802) -- How to set multiple StackBar ? [\#1801](https://github.com/danielgindi/Charts/issues/1801) -- \[Swift 3\] LineChartData without xVals on constructor [\#1800](https://github.com/danielgindi/Charts/issues/1800) -- Zooming X and Y axis independently? [\#1799](https://github.com/danielgindi/Charts/issues/1799) -- Auto scroll xAxis [\#1798](https://github.com/danielgindi/Charts/issues/1798) -- How to add “%” to data in ios-chart [\#1797](https://github.com/danielgindi/Charts/issues/1797) -- can we set y axis max value to chart on horizontal bar graphs?? [\#1794](https://github.com/danielgindi/Charts/issues/1794) -- Fix the xAxis to use the values from my dataset [\#1791](https://github.com/danielgindi/Charts/issues/1791) -- PieChart values outside of chart? [\#1790](https://github.com/danielgindi/Charts/issues/1790) -- ChartLimitLine: How to customize label background and Position center of line [\#1787](https://github.com/danielgindi/Charts/issues/1787) -- With Xcode 8.1 can't build [\#1786](https://github.com/danielgindi/Charts/issues/1786) -- CandleStickChartView can not inherit [\#1784](https://github.com/danielgindi/Charts/issues/1784) -- Chart adds a -1 x-axis entry [\#1782](https://github.com/danielgindi/Charts/issues/1782) -- BarChart - Is It possible to limit the number of bars visible at a given time, and allow users to scroll through the rest horizontally ? [\#1781](https://github.com/danielgindi/Charts/issues/1781) -- Unable to Override some properties of LineChartView in Charts version 2.2.5 [\#1777](https://github.com/danielgindi/Charts/issues/1777) -- CandleStickChartView how to fixed-width, or based on the data dynamically calculate the zoom factor [\#1776](https://github.com/danielgindi/Charts/issues/1776) -- Scroll UIImageView on X-axes along with x-vals [\#1775](https://github.com/danielgindi/Charts/issues/1775) -- How to make BarChart Bar Sizes proportional? [\#1774](https://github.com/danielgindi/Charts/issues/1774) -- how can I set the spacing between bars ? [\#1773](https://github.com/danielgindi/Charts/issues/1773) -- Charts 3.0 labelCount bug? [\#1767](https://github.com/danielgindi/Charts/issues/1767) -- use lineCharts ,if i want show custom string at x, don't show int number, how to do it? [\#1760](https://github.com/danielgindi/Charts/issues/1760) -- ChartUtils Crash on 32 Bit Devices [\#1737](https://github.com/danielgindi/Charts/issues/1737) - -**Merged pull requests:** - -- Added a check against NaN [\#1733](https://github.com/danielgindi/Charts/pull/1733) ([Selficide](https://github.com/Selficide)) - -## [2.3.1](https://github.com/danielgindi/Charts/tree/2.3.1) (2016-11-04) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.3.1...2.3.1) - -## [v2.3.1](https://github.com/danielgindi/Charts/tree/v2.3.1) (2016-11-04) -[Full Changelog](https://github.com/danielgindi/Charts/compare/3.0.0...v2.3.1) - -**Fixed bugs:** - -- \[BUG\] multiple bar chart in ChartsDemo not display full for last x value [\#1770](https://github.com/danielgindi/Charts/issues/1770) -- PieChartDataSet no slice space shown when an entry has 0 value [\#1730](https://github.com/danielgindi/Charts/issues/1730) -- Bar on BarChart and CombinedChart doesn't start one Zero line [\#1729](https://github.com/danielgindi/Charts/issues/1729) -- Weird highlight rect in Stacked Bar Chart Negative [\#1726](https://github.com/danielgindi/Charts/issues/1726) -- CombinedChartView with CandleData - first/last candlesticks are cut in half [\#1717](https://github.com/danielgindi/Charts/issues/1717) -- Bug with showing negative values and vertical zooming Horizontal Bar Chart [\#1702](https://github.com/danielgindi/Charts/issues/1702) -- Setting circleHoleColor to clear causes artifact [\#1691](https://github.com/danielgindi/Charts/issues/1691) -- Charts 3.0 Carthage update issue [\#1690](https://github.com/danielgindi/Charts/issues/1690) - -**Closed issues:** - -- Problem with Formatter [\#1779](https://github.com/danielgindi/Charts/issues/1779) -- Could not cast value of type 'Charts.BarChartData' \(0x109bd1010\) to 'Charts.PieChartData' \(0x109be0320\). [\#1778](https://github.com/danielgindi/Charts/issues/1778) -- BarChartView - The first column and last column show only half? [\#1772](https://github.com/danielgindi/Charts/issues/1772) -- Stacked Bar Chart Opacity of Some Colors [\#1769](https://github.com/danielgindi/Charts/issues/1769) -- Custom Format YAxis [\#1768](https://github.com/danielgindi/Charts/issues/1768) -- to run ChartsDemo [\#1765](https://github.com/danielgindi/Charts/issues/1765) -- There is something wrong with LineChartView,ChartDataEntry,LineChartData and ChartDataEntry [\#1764](https://github.com/danielgindi/Charts/issues/1764) -- Strange margin/space in a grouped BarChart [\#1763](https://github.com/danielgindi/Charts/issues/1763) -- How to get the chart data entry points [\#1762](https://github.com/danielgindi/Charts/issues/1762) -- the newest version ,it can't build successes in xcode8,it pause at half,no stop or fail. [\#1761](https://github.com/danielgindi/Charts/issues/1761) -- Sorry, I no speak English, 3.0版本的LineChartView [\#1759](https://github.com/danielgindi/Charts/issues/1759) -- How to set x-axis labels with ios charts [\#1758](https://github.com/danielgindi/Charts/issues/1758) -- After 3.0 Upgrade, Marker not automatically showing [\#1757](https://github.com/danielgindi/Charts/issues/1757) -- How to set horizontal Value with a string array at my code using Charts 3.0 [\#1754](https://github.com/danielgindi/Charts/issues/1754) -- Issue with centering xAxis labels [\#1750](https://github.com/danielgindi/Charts/issues/1750) -- Charts / Swift 3.0 - Fatal error: Index out of range [\#1749](https://github.com/danielgindi/Charts/issues/1749) -- ChartsDemo dependency on realm-cocoa ~\> 1.1 issue [\#1748](https://github.com/danielgindi/Charts/issues/1748) -- Carthage realm-cocoa ~\> 1.1 dependency conflict [\#1747](https://github.com/danielgindi/Charts/issues/1747) -- how to set a Array of String for X-axis in swift 3? [\#1746](https://github.com/danielgindi/Charts/issues/1746) -- Xcode 8.1 is reporting 'No such Module 'Charts'' [\#1743](https://github.com/danielgindi/Charts/issues/1743) -- Swift: Custom Xaxis and Yaxis problem. [\#1740](https://github.com/danielgindi/Charts/issues/1740) -- xAxis value starting at "-1" instead of "0" in grouped barchart [\#1739](https://github.com/danielgindi/Charts/issues/1739) -- Compiling issue - xcode 8 [\#1736](https://github.com/danielgindi/Charts/issues/1736) -- How to make Radar five top angle tap enabled? [\#1735](https://github.com/danielgindi/Charts/issues/1735) -- Strings for Labels in Swift 3 [\#1732](https://github.com/danielgindi/Charts/issues/1732) -- HorizontalBarChart values not showing Charts 3.0 [\#1731](https://github.com/danielgindi/Charts/issues/1731) -- getMarkerPositionWithHighlight: always return CGPointZero [\#1728](https://github.com/danielgindi/Charts/issues/1728) -- Why drawValues is outside of clipping contentRect [\#1727](https://github.com/danielgindi/Charts/issues/1727) -- Set max highlight distance [\#1725](https://github.com/danielgindi/Charts/issues/1725) -- Trouble making custom labels along the X and Y Axis of my bar chart [\#1724](https://github.com/danielgindi/Charts/issues/1724) -- Swift 3 - BarChartData, resetLabelsToSkip\(\) and setLabelsToSkip\(0\) not working [\#1723](https://github.com/danielgindi/Charts/issues/1723) -- When zooming in, x-axis shows more labels than values [\#1722](https://github.com/danielgindi/Charts/issues/1722) -- How to set the xValues to the BarchartData ? [\#1721](https://github.com/danielgindi/Charts/issues/1721) -- How to show custom text on Y-axis of Line Chart? [\#1720](https://github.com/danielgindi/Charts/issues/1720) -- Add UIButtons to data points in a line graph, plotting date and time in X-axis [\#1719](https://github.com/danielgindi/Charts/issues/1719) -- How to set the xValues to the BarchartData ? [\#1718](https://github.com/danielgindi/Charts/issues/1718) -- \: Error: this application, or a library it uses, has passed an invalid numeric value \(NaN, or not-a-number\) to CoreGraphics API and this value is being ignored.Please fix this problem. [\#1714](https://github.com/danielgindi/Charts/issues/1714) -- cancel group display in BarChart [\#1713](https://github.com/danielgindi/Charts/issues/1713) -- PieChart, label is a little of values ,labels is overlap [\#1710](https://github.com/danielgindi/Charts/issues/1710) -- how to port calls to getEntriesAtIndex [\#1709](https://github.com/danielgindi/Charts/issues/1709) -- Exception upon calling \[ChartDataEntry initWithX:y:\] via ObjC + Charts using Pods as Framework [\#1708](https://github.com/danielgindi/Charts/issues/1708) -- Multiple bar Chart Xvalues Doesn't come centre to the grouped bars... [\#1707](https://github.com/danielgindi/Charts/issues/1707) -- \[BarChartDataEntry\] axis to accept NSString [\#1706](https://github.com/danielgindi/Charts/issues/1706) -- Conflict: Charts's Range conflict with Apple NSRange\(Swift 3: Range\). It makes me can not use the Apple's Range [\#1705](https://github.com/danielgindi/Charts/issues/1705) -- Excuse me, BarChartData the " initWithXVals:\(NSArray \*data\) dataSets:\(NSArray \*data\)" in Swift 3.0 V "XVals" is what method is the?I can't find the way,Help me。 [\#1704](https://github.com/danielgindi/Charts/issues/1704) -- Excuse me,BarChartData the initWithXVals:\(NSArray \*data\) dataSets:\(NSArray \*data\) in Swift 3.0 V What method is the?I can't find the way,Help me。 [\#1703](https://github.com/danielgindi/Charts/issues/1703) -- X-Axis and Y-Axis is not shown in swift 3 [\#1701](https://github.com/danielgindi/Charts/issues/1701) -- Can i use 2.2.5 version with Swift3 [\#1700](https://github.com/danielgindi/Charts/issues/1700) -- I update the pod to 3.0.0 but Xcode still wants to convert to Swift 3 [\#1699](https://github.com/danielgindi/Charts/issues/1699) -- \[Question\] Multiple lines with different units [\#1698](https://github.com/danielgindi/Charts/issues/1698) -- \[Question\] Missing intermediate values [\#1697](https://github.com/danielgindi/Charts/issues/1697) -- What happened to X-Axis labels in 3.0? [\#1696](https://github.com/danielgindi/Charts/issues/1696) -- What is the new delegate for selection of values in the chart swift 3.0 [\#1695](https://github.com/danielgindi/Charts/issues/1695) -- Can I have two different Yaxis scale on combined chart [\#1694](https://github.com/danielgindi/Charts/issues/1694) -- Zooming LineChart xAxis on 32bit device doesn't work correctly. [\#1693](https://github.com/danielgindi/Charts/issues/1693) -- How to show xAxis All value and Rotate Label? v3.0 [\#1692](https://github.com/danielgindi/Charts/issues/1692) -- \[LineChartView\] Wrong position Highlight and xAxis [\#1689](https://github.com/danielgindi/Charts/issues/1689) -- How to get back x-values for BarChart\[Charts 3 migration problem\] [\#1688](https://github.com/danielgindi/Charts/issues/1688) -- How to move data labels outside the chart. [\#1687](https://github.com/danielgindi/Charts/issues/1687) -- RadarChartView implementation [\#1686](https://github.com/danielgindi/Charts/issues/1686) -- problem with custom xaxis labels [\#1685](https://github.com/danielgindi/Charts/issues/1685) -- Update spec on cocoapods to 3.0 [\#1683](https://github.com/danielgindi/Charts/issues/1683) -- Pod install: SSL: certificate verification failed [\#1682](https://github.com/danielgindi/Charts/issues/1682) -- Setting a pieChartDataSet on 3.0 [\#1681](https://github.com/danielgindi/Charts/issues/1681) -- String value at x Axis of BarChart [\#1680](https://github.com/danielgindi/Charts/issues/1680) -- Zooming LineChart x axis on 32bit processor doesn't work as expected [\#1679](https://github.com/danielgindi/Charts/issues/1679) -- ChartLimitLine background color [\#1678](https://github.com/danielgindi/Charts/issues/1678) -- Left and right slide bar chart only half and remove background grid [\#1654](https://github.com/danielgindi/Charts/issues/1654) -- Setting centerAxisLabelsEnabled with a granularity set does not centre [\#1652](https://github.com/danielgindi/Charts/issues/1652) -- Realm and Charts 3.0 tutorial [\#1651](https://github.com/danielgindi/Charts/issues/1651) -- HorizontalBarChartView text for xValues -- charts 3.0 [\#1646](https://github.com/danielgindi/Charts/issues/1646) -- 'spaceBetweenLabels' not found on object XAxis [\#1643](https://github.com/danielgindi/Charts/issues/1643) -- this func -nsuiTouchesEnded does not work [\#1642](https://github.com/danielgindi/Charts/issues/1642) -- Adjust circle for selected point [\#1597](https://github.com/danielgindi/Charts/issues/1597) -- CombinedChartView fitBars property [\#1569](https://github.com/danielgindi/Charts/issues/1569) -- How to show x-axis labels only when value is a DataEntry in Line Chart? [\#1536](https://github.com/danielgindi/Charts/issues/1536) -- Why the coordinate points and the X axis the above data is not aligned? [\#1492](https://github.com/danielgindi/Charts/issues/1492) -- \*\*\*\*\*\*\*\*\*\*\*\*\* Migrating to Charts 3.0 \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* [\#1474](https://github.com/danielgindi/Charts/issues/1474) -- How to show ChartMarker in CombinedChart? [\#1454](https://github.com/danielgindi/Charts/issues/1454) -- How to set the data margin Align right? [\#1372](https://github.com/danielgindi/Charts/issues/1372) -- Correct date on x axis [\#1325](https://github.com/danielgindi/Charts/issues/1325) -- The chart above and the chart below how to align [\#1276](https://github.com/danielgindi/Charts/issues/1276) -- Unable to select BarChartView from storyboard \(OS X\) [\#1197](https://github.com/danielgindi/Charts/issues/1197) - -**Merged pull requests:** - -- Fix png image using JPEG type when being saved on macOS [\#1783](https://github.com/danielgindi/Charts/pull/1783) ([petester42](https://github.com/petester42)) -- Updated Width Constraints - Fixes \#1770 [\#1771](https://github.com/danielgindi/Charts/pull/1771) ([SumoSimo](https://github.com/SumoSimo)) -- update cocoapods [\#1684](https://github.com/danielgindi/Charts/pull/1684) ([petester42](https://github.com/petester42)) - -## [3.0.0](https://github.com/danielgindi/Charts/tree/3.0.0) (2016-10-19) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v3.0.0...3.0.0) - -## [v3.0.0](https://github.com/danielgindi/Charts/tree/v3.0.0) (2016-10-19) -[Full Changelog](https://github.com/danielgindi/Charts/compare/2.3.0...v3.0.0) - -**Implemented enhancements:** - -- Chart description is drawn on top of markers [\#1344](https://github.com/danielgindi/Charts/issues/1344) - -**Fixed bugs:** - -- CandleStickChart - last CandleStick cut in half [\#1668](https://github.com/danielgindi/Charts/issues/1668) -- X labels Issues [\#1639](https://github.com/danielgindi/Charts/issues/1639) -- Marker display is abnormal [\#1575](https://github.com/danielgindi/Charts/issues/1575) -- Misplaced Radar Marker [\#1556](https://github.com/danielgindi/Charts/issues/1556) -- fatal error: Double value cannot be converted to Int because it is either infinite or NaN [\#1550](https://github.com/danielgindi/Charts/issues/1550) -- Problem with the xValue begins at 0 [\#1547](https://github.com/danielgindi/Charts/issues/1547) -- \(v3.0 + Swift3.0\)LineChart crash when dataSets is a empty array [\#1491](https://github.com/danielgindi/Charts/issues/1491) -- \(v3.0 + swift3.0\) charts' top are cropped/overlapped in ChartsDemo [\#1489](https://github.com/danielgindi/Charts/issues/1489) -- \(v3.0 + Swift3.0\) Time Line Chart Demo crash [\#1488](https://github.com/danielgindi/Charts/issues/1488) -- Last Value doesn't appear in barCharts and lineCharts [\#1384](https://github.com/danielgindi/Charts/issues/1384) -- Distance between chart legend and the chart is to big in case of rotated labels [\#1360](https://github.com/danielgindi/Charts/issues/1360) -- xAxis labels not align with values in Multiple Bar Chart [\#1334](https://github.com/danielgindi/Charts/issues/1334) -- text value on the last entry is missing from line chart [\#1323](https://github.com/danielgindi/Charts/issues/1323) - -**Closed issues:** - -- Finding the RadarChartView center position in a view [\#1677](https://github.com/danielgindi/Charts/issues/1677) -- How do I Use IValueFormatter to format XAxis labels in swift? [\#1676](https://github.com/danielgindi/Charts/issues/1676) -- How to set lineChart type to cubic lines [\#1674](https://github.com/danielgindi/Charts/issues/1674) -- In IOS 10 Xcode 8,I got some issues [\#1673](https://github.com/danielgindi/Charts/issues/1673) -- the first and last point have a line [\#1672](https://github.com/danielgindi/Charts/issues/1672) -- Last value on line graph has no text [\#1671](https://github.com/danielgindi/Charts/issues/1671) -- can I fix number of overlapping this problem? [\#1670](https://github.com/danielgindi/Charts/issues/1670) -- chartValueSelected delegate not called [\#1669](https://github.com/danielgindi/Charts/issues/1669) -- Charts.frameworkiOS did not show up [\#1667](https://github.com/danielgindi/Charts/issues/1667) -- Half a bar the first one of chart [\#1666](https://github.com/danielgindi/Charts/issues/1666) -- Charts : iOS 10, Xcode 8 - Embedded Framework iTunes Store operation failed while uploading on App Store [\#1665](https://github.com/danielgindi/Charts/issues/1665) -- We need an old version for Xcode 7.0 [\#1664](https://github.com/danielgindi/Charts/issues/1664) -- LineChartView is rotating LineChartData in 3.0 [\#1663](https://github.com/danielgindi/Charts/issues/1663) -- Showing all xAxis labels in a BarChart no matter the number of bars [\#1661](https://github.com/danielgindi/Charts/issues/1661) -- Can I set different color Label in lineChart?ForExample [\#1660](https://github.com/danielgindi/Charts/issues/1660) -- Combined Charts - Negative values for Line Chart are not rendered [\#1659](https://github.com/danielgindi/Charts/issues/1659) -- Swift 2.2 : How to show custom labels on x-axis ? [\#1658](https://github.com/danielgindi/Charts/issues/1658) -- Legends for multiple dataSets and multiple bar charts allignment [\#1657](https://github.com/danielgindi/Charts/issues/1657) -- Multi chart setup xAxis value format [\#1656](https://github.com/danielgindi/Charts/issues/1656) -- xAxis when zooming [\#1655](https://github.com/danielgindi/Charts/issues/1655) -- Request to solve a sort of bug [\#1653](https://github.com/danielgindi/Charts/issues/1653) -- Updating the last Candlestick entry. [\#1649](https://github.com/danielgindi/Charts/issues/1649) -- Use of '@import' when modules are disabled [\#1647](https://github.com/danielgindi/Charts/issues/1647) -- Didn't show last Y Axis [\#1645](https://github.com/danielgindi/Charts/issues/1645) -- noDataText is not working [\#1644](https://github.com/danielgindi/Charts/issues/1644) -- Custom background color [\#1641](https://github.com/danielgindi/Charts/issues/1641) -- Cannot get my Linechart to work since Xcode 8 update [\#1640](https://github.com/danielgindi/Charts/issues/1640) -- Horizontal Highlight at touch/click point... ?? [\#1636](https://github.com/danielgindi/Charts/issues/1636) -- Some acute questions about ZDLineChartView [\#1635](https://github.com/danielgindi/Charts/issues/1635) -- \[Travis\] Travis won't build issue [\#1633](https://github.com/danielgindi/Charts/issues/1633) -- PieChartView cannot show values name . [\#1632](https://github.com/danielgindi/Charts/issues/1632) -- How to make points interactive/draggable [\#1631](https://github.com/danielgindi/Charts/issues/1631) -- Charts 3.0 with Swift 3.0 [\#1630](https://github.com/danielgindi/Charts/issues/1630) -- LineChartData is nolonger allow initWithXVals, what should I do? [\#1629](https://github.com/danielgindi/Charts/issues/1629) -- BarChartData do not find this method initWithXVals: dataSets: [\#1628](https://github.com/danielgindi/Charts/issues/1628) -- Charts 3.0: How to set x-values for a line chart? [\#1627](https://github.com/danielgindi/Charts/issues/1627) -- How can I display the x Axis values on a LineChartView? [\#1625](https://github.com/danielgindi/Charts/issues/1625) -- Xcode - 8.0, Working Fine in Xcode 7.3 -up to iOS\(9.3\) Crash in Xcode 8 - iOS 10 [\#1624](https://github.com/danielgindi/Charts/issues/1624) -- I can't see the final number on the chart. [\#1623](https://github.com/danielgindi/Charts/issues/1623) -- can I Achieve this? Using this framework [\#1622](https://github.com/danielgindi/Charts/issues/1622) -- When Will Charts 3.0 Be Version Tagged? [\#1620](https://github.com/danielgindi/Charts/issues/1620) -- RadarChartData xVals cant use [\#1619](https://github.com/danielgindi/Charts/issues/1619) -- Extract ChartsRealm and Realm from the Charts project [\#1618](https://github.com/danielgindi/Charts/issues/1618) -- Crashing xcode 7.3.1 [\#1617](https://github.com/danielgindi/Charts/issues/1617) -- Method does not override any method from its superclass [\#1616](https://github.com/danielgindi/Charts/issues/1616) -- warning: Swift Charts 2.3.0 - error in module ChartsDebug info from this module will be unavailable in the debugger. [\#1615](https://github.com/danielgindi/Charts/issues/1615) -- ChartViewDelegate's chartValueSelected is tied up with Highlights [\#1614](https://github.com/danielgindi/Charts/issues/1614) -- 'ChartViewDelegate' is unavailable: cannot find Swift declaration for this class. [\#1613](https://github.com/danielgindi/Charts/issues/1613) -- \[NOT AN ISSUE\] Release for Charts 3.0 [\#1612](https://github.com/danielgindi/Charts/issues/1612) -- Charts/Classes/Utils/ChartUtils.swift error [\#1611](https://github.com/danielgindi/Charts/issues/1611) -- Issue with YAxis max and min in the RadarChart [\#1610](https://github.com/danielgindi/Charts/issues/1610) -- App Crash: could not cast to 'Charts.PieChartData': in 2.3.0 when upgrading to XCode 8.0 [\#1609](https://github.com/danielgindi/Charts/issues/1609) -- customAxisMin and customAxisMax not found on object ChartYAxis [\#1608](https://github.com/danielgindi/Charts/issues/1608) -- Using version 3.0 with Carthage? [\#1607](https://github.com/danielgindi/Charts/issues/1607) -- Chart 3.0 swift 3.0 [\#1606](https://github.com/danielgindi/Charts/issues/1606) -- Chart not centered/middled when having less values [\#1605](https://github.com/danielgindi/Charts/issues/1605) -- How to use a date/string for the X value [\#1604](https://github.com/danielgindi/Charts/issues/1604) -- Setting AxisBase.axisMaximum results in an axisRange of zero [\#1603](https://github.com/danielgindi/Charts/issues/1603) -- Pods failing for swift3.0 [\#1602](https://github.com/danielgindi/Charts/issues/1602) -- BarChart View issues [\#1601](https://github.com/danielgindi/Charts/issues/1601) -- Support for swift 3.0 [\#1600](https://github.com/danielgindi/Charts/issues/1600) -- Pod pointing to master branch code created issue in BarChartDataEntry [\#1599](https://github.com/danielgindi/Charts/issues/1599) -- Swift based library, but OC based Demo. Have you ever thought of provide a Swifty Demo? [\#1598](https://github.com/danielgindi/Charts/issues/1598) -- Grid and xaxis label issues. [\#1596](https://github.com/danielgindi/Charts/issues/1596) -- LeftAxis above bars in BarChartView [\#1595](https://github.com/danielgindi/Charts/issues/1595) -- cannot convert value of type\<\> to expected arguments RLMResults\ [\#1594](https://github.com/danielgindi/Charts/issues/1594) -- Member 'index' cannot be used on value of protocol type 'collection'; use a generic constraint instead [\#1593](https://github.com/danielgindi/Charts/issues/1593) -- Scrollable Graph [\#1592](https://github.com/danielgindi/Charts/issues/1592) -- charts 2.3 unsupported architectures i386 [\#1591](https://github.com/danielgindi/Charts/issues/1591) -- BarChart doesn't refresh after new dataSet [\#1590](https://github.com/danielgindi/Charts/issues/1590) -- Label of ChartLimitLine overlaps limit line a little [\#1589](https://github.com/danielgindi/Charts/issues/1589) -- IChartAxisValueFormatter cound't found [\#1588](https://github.com/danielgindi/Charts/issues/1588) -- How to use v2.2.5 swift3.0 in OC Project? [\#1587](https://github.com/danielgindi/Charts/issues/1587) -- Last LineChart y-label not being rendered [\#1585](https://github.com/danielgindi/Charts/issues/1585) -- Charts 3.0: Custom xAxis labels with gaps in data? [\#1584](https://github.com/danielgindi/Charts/issues/1584) -- BarChart xAxis labels disappear after zooming [\#1583](https://github.com/danielgindi/Charts/issues/1583) -- Add space between bars [\#1582](https://github.com/danielgindi/Charts/issues/1582) -- How to use v2.2.5 swift3.0 in OC Project? [\#1581](https://github.com/danielgindi/Charts/issues/1581) -- malloc: \*\*\* error for object : Invalid pointer dequeued from free list\*\*\* set a breakpoint in malloc\_error\_break to debug [\#1580](https://github.com/danielgindi/Charts/issues/1580) -- i want to add % in value [\#1579](https://github.com/danielgindi/Charts/issues/1579) -- Update the code to Swift 3.0 compliance [\#1578](https://github.com/danielgindi/Charts/issues/1578) -- Can I set a text label underneath each bar of a bar chart? [\#1577](https://github.com/danielgindi/Charts/issues/1577) -- Line Chart X-Axis values as a string [\#1576](https://github.com/danielgindi/Charts/issues/1576) -- Hide values in Combines chart [\#1574](https://github.com/danielgindi/Charts/issues/1574) -- Method does not override any method from its superclass [\#1573](https://github.com/danielgindi/Charts/issues/1573) -- Method does not override any method from its superclass [\#1572](https://github.com/danielgindi/Charts/issues/1572) -- Crash in Charts v2.2.5-Swift3.0 [\#1570](https://github.com/danielgindi/Charts/issues/1570) -- Cocoapods integration with objective c projects - can't resolve [\#1568](https://github.com/danielgindi/Charts/issues/1568) -- How to change x value [\#1567](https://github.com/danielgindi/Charts/issues/1567) -- \[Charts 3.0\] Issue with centerAxisLabelsEnabled [\#1566](https://github.com/danielgindi/Charts/issues/1566) -- \[Chart 3.0 BUG\] xAxis labels disappear after a deep zoom in [\#1564](https://github.com/danielgindi/Charts/issues/1564) -- Extraneous space between axis and bars when there is data with value of 0 [\#1557](https://github.com/danielgindi/Charts/issues/1557) -- Chart clip the Ballon Marker [\#1555](https://github.com/danielgindi/Charts/issues/1555) -- Argument labels '\(value:, xIndex:\)' do not match any available overloads, Cannot invoke initializer for type 'BarChartData' with an argument list of type '\(xVals: \[String\], dataSets: \[BarChartDataSet\]\)' [\#1554](https://github.com/danielgindi/Charts/issues/1554) -- Chart clip the Ballon Marker [\#1553](https://github.com/danielgindi/Charts/issues/1553) -- horizontal bar graphs with different colors and offset values [\#1552](https://github.com/danielgindi/Charts/issues/1552) -- valueFormatter API changes in Swift 3 [\#1551](https://github.com/danielgindi/Charts/issues/1551) -- Calling `setAxisMaxValue` leads to transform error. [\#1549](https://github.com/danielgindi/Charts/issues/1549) -- Demo in Swift? [\#1548](https://github.com/danielgindi/Charts/issues/1548) -- The LineChart is not working swift 3 [\#1546](https://github.com/danielgindi/Charts/issues/1546) -- Charts framework not usable in a Swift class added to an Objective C project [\#1545](https://github.com/danielgindi/Charts/issues/1545) -- How to add charts cocoapods dependency for Swift 3 project? [\#1544](https://github.com/danielgindi/Charts/issues/1544) -- Grouped bars in Combined chart [\#1543](https://github.com/danielgindi/Charts/issues/1543) -- I want to control width between bar [\#1542](https://github.com/danielgindi/Charts/issues/1542) -- Crash while using Combined Chart [\#1540](https://github.com/danielgindi/Charts/issues/1540) -- how can i draw only bar chart without x-axis, y-axis , grid line [\#1539](https://github.com/danielgindi/Charts/issues/1539) -- Charts.framework iOS not exist [\#1538](https://github.com/danielgindi/Charts/issues/1538) -- can i set data's starting point? [\#1537](https://github.com/danielgindi/Charts/issues/1537) -- Scatter Chart View V3.0 an another problem with balloon [\#1535](https://github.com/danielgindi/Charts/issues/1535) -- Granularity in line chart not working \(Chart3.0-Swift2.3 \) [\#1534](https://github.com/danielgindi/Charts/issues/1534) -- Error in ChartsPlatform.swift [\#1533](https://github.com/danielgindi/Charts/issues/1533) -- Still got an error when building Charts\(2.3.0\) with carthage [\#1532](https://github.com/danielgindi/Charts/issues/1532) -- Horizontal bar chart xAxis values missing [\#1531](https://github.com/danielgindi/Charts/issues/1531) -- Selection in a bar chart [\#1530](https://github.com/danielgindi/Charts/issues/1530) -- Multiple bar is not working [\#1529](https://github.com/danielgindi/Charts/issues/1529) -- X -axis - time , sometimes incorrectly displayed \( many of the data points \) [\#1528](https://github.com/danielgindi/Charts/issues/1528) -- Convert x value labels to String? from Double? \[Horizontal Barchart\] \(Swift v3\) [\#1527](https://github.com/danielgindi/Charts/issues/1527) -- Method doesn't override any method from its superclass [\#1526](https://github.com/danielgindi/Charts/issues/1526) -- Bar charts X-Axis labels repeating if the number of bars reduce [\#1524](https://github.com/danielgindi/Charts/issues/1524) -- The latest version can not run [\#1523](https://github.com/danielgindi/Charts/issues/1523) -- how to show the Chart without data? [\#1522](https://github.com/danielgindi/Charts/issues/1522) -- The usage is not correct [\#1521](https://github.com/danielgindi/Charts/issues/1521) -- Charts classes not found in swift class in my Objc Xcode project [\#1519](https://github.com/danielgindi/Charts/issues/1519) -- ChartUtils methods are marked internal and cannot be use to create custom charts [\#1518](https://github.com/danielgindi/Charts/issues/1518) -- Re: Fatal error while loading Bar Chart \#1511 [\#1517](https://github.com/danielgindi/Charts/issues/1517) -- I can't run this demo! [\#1516](https://github.com/danielgindi/Charts/issues/1516) -- Charts.framework iOS [\#1515](https://github.com/danielgindi/Charts/issues/1515) -- Setting x-values of BarChartView in Chart 2.2.6 [\#1514](https://github.com/danielgindi/Charts/issues/1514) -- Xcode 8.0,many errors...... [\#1513](https://github.com/danielgindi/Charts/issues/1513) -- Fatal error while loading Bar Chart [\#1511](https://github.com/danielgindi/Charts/issues/1511) -- Fix Intermittent CI Failures [\#1508](https://github.com/danielgindi/Charts/issues/1508) -- Info.plist Utility Error [\#1507](https://github.com/danielgindi/Charts/issues/1507) -- Bar chart "floats" above x-axis when axisMinValue set to 0 [\#1506](https://github.com/danielgindi/Charts/issues/1506) -- Issue with BarDataEntry Method [\#1504](https://github.com/danielgindi/Charts/issues/1504) -- \(v3.0 + Swift3.0\)IChartAxisValueFormatter's protocol function pass on a unexpected value\(double value discard\) [\#1503](https://github.com/danielgindi/Charts/issues/1503) -- Cannot invoke initializer for type 'LineChartData' [\#1502](https://github.com/danielgindi/Charts/issues/1502) -- when click node call chartValueSelected funtion [\#1499](https://github.com/danielgindi/Charts/issues/1499) -- \[BUG\] LineChart--- about "LineChartModeCubicBezier" [\#1490](https://github.com/danielgindi/Charts/issues/1490) -- Unneeded deprecated warning for Legend.position [\#1483](https://github.com/danielgindi/Charts/issues/1483) -- Scatter Chart View V3.0 bad point displayed with BaloonMaker [\#1482](https://github.com/danielgindi/Charts/issues/1482) -- How to set the LineChart disconnect style, I add NAN to Entry, isInBoundsRight function is crashed. [\#1471](https://github.com/danielgindi/Charts/issues/1471) -- \(v3.0\)Demo: no such module realm [\#1460](https://github.com/danielgindi/Charts/issues/1460) -- Please provide swift 2 version for this project [\#1457](https://github.com/danielgindi/Charts/issues/1457) -- Distinguish LineGraph callback. [\#1448](https://github.com/danielgindi/Charts/issues/1448) -- BarChart right/left bar cut in half [\#1446](https://github.com/danielgindi/Charts/issues/1446) -- Graph clipping while setting Y-axis min ,max Value [\#1444](https://github.com/danielgindi/Charts/issues/1444) -- ChartV3 autoScaleMinMaxEnabled not scaling candle charts correctly. [\#1442](https://github.com/danielgindi/Charts/issues/1442) -- conflict with scrollView [\#1438](https://github.com/danielgindi/Charts/issues/1438) -- Getting error, while assigning xVals to PieChartData. [\#1433](https://github.com/danielgindi/Charts/issues/1433) -- HorizontalBarChartView not show value at bar [\#1396](https://github.com/danielgindi/Charts/issues/1396) -- HorizontalBarCharView incorrect results for bounding box query [\#1382](https://github.com/danielgindi/Charts/issues/1382) -- Data entries are missing on the chart [\#1348](https://github.com/danielgindi/Charts/issues/1348) -- \[HEADS UP\] Realm swift 3.0 support is blocked due to Xcode 8 beta 3 swift compiler bug [\#1269](https://github.com/danielgindi/Charts/issues/1269) -- When the X-Axis's text is too long, it will cover the radar chart. [\#1143](https://github.com/danielgindi/Charts/issues/1143) -- Extracting ChartsRealm to a separate project [\#1119](https://github.com/danielgindi/Charts/issues/1119) -- Disable scrolling parent scrollview when readed end of the chart [\#1115](https://github.com/danielgindi/Charts/issues/1115) -- Pie Chart : Multiline label on legend is cutting off [\#1084](https://github.com/danielgindi/Charts/issues/1084) - -**Merged pull requests:** - -- Enter the matrix [\#1650](https://github.com/danielgindi/Charts/pull/1650) ([petester42](https://github.com/petester42)) -- fix bar chart in demo that date starts at 0 [\#1648](https://github.com/danielgindi/Charts/pull/1648) ([liuxuan30](https://github.com/liuxuan30)) -- fix \#1603 and API comment [\#1621](https://github.com/danielgindi/Charts/pull/1621) ([liuxuan30](https://github.com/liuxuan30)) -- Bugfix for fix \#1488, \#1564 [\#1565](https://github.com/danielgindi/Charts/pull/1565) ([liuxuan30](https://github.com/liuxuan30)) -- Single test target to make coverage easier [\#1563](https://github.com/danielgindi/Charts/pull/1563) ([petester42](https://github.com/petester42)) -- Fix codecov [\#1560](https://github.com/danielgindi/Charts/pull/1560) ([petester42](https://github.com/petester42)) -- Adds Codecov [\#1559](https://github.com/danielgindi/Charts/pull/1559) ([petester42](https://github.com/petester42)) -- Fix decimals crash in ChartsUtil [\#1558](https://github.com/danielgindi/Charts/pull/1558) ([petester42](https://github.com/petester42)) -- Fixes messaging issues with charts needing carthage [\#1525](https://github.com/danielgindi/Charts/pull/1525) ([petester42](https://github.com/petester42)) -- Attempt to make CI more stable [\#1510](https://github.com/danielgindi/Charts/pull/1510) ([petester42](https://github.com/petester42)) -- Fix Cocoapods setup being broken [\#1509](https://github.com/danielgindi/Charts/pull/1509) ([petester42](https://github.com/petester42)) - -## [2.3.0](https://github.com/danielgindi/Charts/tree/2.3.0) (2016-09-21) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.3.0...2.3.0) - -## [v2.3.0](https://github.com/danielgindi/Charts/tree/v2.3.0) (2016-09-21) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.2.5...v2.3.0) - -**Implemented enhancements:** - -- Seek help with CandleStickChartView [\#1297](https://github.com/danielgindi/Charts/issues/1297) -- Support Realm 1.0.1 \(Objective-C\) [\#1201](https://github.com/danielgindi/Charts/issues/1201) - -**Fixed bugs:** - -- macOS demo bar chart's first and last bar got half cut [\#1468](https://github.com/danielgindi/Charts/issues/1468) -- Label drawing glitch when changing data [\#1347](https://github.com/danielgindi/Charts/issues/1347) -- HorizontalBarChartView with multiple data set crashes on tap [\#1339](https://github.com/danielgindi/Charts/issues/1339) -- weird behavior resizing the pie. [\#1286](https://github.com/danielgindi/Charts/issues/1286) -- Line Chart\(Dual YAis\):if i drag the slider,double line only leave the one line \#bug [\#1250](https://github.com/danielgindi/Charts/issues/1250) -- only Have a X-Value,the PieChart too bigger, twinkle [\#1239](https://github.com/danielgindi/Charts/issues/1239) -- Chart always crash when marker added and highlightFullBarEnabled is true [\#1185](https://github.com/danielgindi/Charts/issues/1185) -- App is crashing for certain symbols when granularityEnabled is false [\#1181](https://github.com/danielgindi/Charts/issues/1181) -- Changing chart data + autoScaleMinMaxEnabled causes crash [\#1151](https://github.com/danielgindi/Charts/issues/1151) -- using ChartXAxisValueFormatter doesn't enable 3 lines x axis labels [\#1148](https://github.com/danielgindi/Charts/issues/1148) -- ChartMaker work wrong in a Combined Chart [\#737](https://github.com/danielgindi/Charts/issues/737) -- CombinedChart with grouped bars support [\#169](https://github.com/danielgindi/Charts/issues/169) - -**Closed issues:** - -- Typo in CONTRIBUTING.md [\#1501](https://github.com/danielgindi/Charts/issues/1501) -- noDataText overflows [\#1500](https://github.com/danielgindi/Charts/issues/1500) -- How can I get frame of Line chart? \(with out labels, chart only\) [\#1498](https://github.com/danielgindi/Charts/issues/1498) -- Last label on xAxis is not showing [\#1497](https://github.com/danielgindi/Charts/issues/1497) -- How do I set the value of the x-axis after update ? [\#1496](https://github.com/danielgindi/Charts/issues/1496) -- Xcode 8 swift 3 No Such Module Charts? [\#1494](https://github.com/danielgindi/Charts/issues/1494) -- Give id for node [\#1493](https://github.com/danielgindi/Charts/issues/1493) -- \(v3.0-Swift3.0\)crash because of image not found [\#1487](https://github.com/danielgindi/Charts/issues/1487) -- \(v3.0 LineChart\) xAxis with String/double label issue [\#1481](https://github.com/danielgindi/Charts/issues/1481) -- LineChart. Custom LineChartRenderer does not cross chart border [\#1480](https://github.com/danielgindi/Charts/issues/1480) -- LineChart. Labels for Y axis and Double format [\#1479](https://github.com/danielgindi/Charts/issues/1479) -- stringForValue value argument [\#1478](https://github.com/danielgindi/Charts/issues/1478) -- \[LineChart\] How to Darw "NSString" on xAxis? without Realm.io [\#1477](https://github.com/danielgindi/Charts/issues/1477) -- code 65 result after getting a Carthage update failure [\#1476](https://github.com/danielgindi/Charts/issues/1476) -- How to show xAxis All value and Rotate Label? [\#1475](https://github.com/danielgindi/Charts/issues/1475) -- Compiled with older version of Swift language \(2.0\) [\#1473](https://github.com/danielgindi/Charts/issues/1473) -- Some missing methods in swift 3 version [\#1472](https://github.com/danielgindi/Charts/issues/1472) -- v2.2.5 not support swift2.3 [\#1470](https://github.com/danielgindi/Charts/issues/1470) -- balloon marker [\#1469](https://github.com/danielgindi/Charts/issues/1469) -- How can I highlight single dot in lineChart? [\#1465](https://github.com/danielgindi/Charts/issues/1465) -- release new [\#1464](https://github.com/danielgindi/Charts/issues/1464) -- After the upgrade iOS10 Charts-iOS Change the case [\#1463](https://github.com/danielgindi/Charts/issues/1463) -- \(v3.0\)There is no Chart-iOS framework in Product [\#1462](https://github.com/danielgindi/Charts/issues/1462) -- ios10 the charts can not display! [\#1461](https://github.com/danielgindi/Charts/issues/1461) -- Swift 3.0 and Realm [\#1458](https://github.com/danielgindi/Charts/issues/1458) -- Unable to draw bars [\#1456](https://github.com/danielgindi/Charts/issues/1456) -- \[MC\] System group container issue [\#1455](https://github.com/danielgindi/Charts/issues/1455) -- iOS 10 and swift 3.0 issues [\#1453](https://github.com/danielgindi/Charts/issues/1453) -- Adding additional X index values without the initWithXVals [\#1451](https://github.com/danielgindi/Charts/issues/1451) -- Cannot convert Charts to Swift 3.0 [\#1449](https://github.com/danielgindi/Charts/issues/1449) -- Combine chart have a Bar color gray every bars? [\#1447](https://github.com/danielgindi/Charts/issues/1447) -- Compiling on New XCode 8 [\#1445](https://github.com/danielgindi/Charts/issues/1445) -- Customize scatter chart color for each data in dataSets [\#1443](https://github.com/danielgindi/Charts/issues/1443) -- XCode 8: Crash in xAxis Renderer after upgrade [\#1441](https://github.com/danielgindi/Charts/issues/1441) -- Xcode 8 and swift 3.0 [\#1440](https://github.com/danielgindi/Charts/issues/1440) -- How To use Swift3.0 In Xcode8 [\#1439](https://github.com/danielgindi/Charts/issues/1439) -- Error when running `pod lib lint` from another project [\#1436](https://github.com/danielgindi/Charts/issues/1436) -- Graph cutting off from axisLine while setting axis min ,max Value [\#1435](https://github.com/danielgindi/Charts/issues/1435) -- Cannot compile for targets below iPhone 5s [\#1434](https://github.com/danielgindi/Charts/issues/1434) -- Line chartView, I need a YAxis with the labelNum is inverted order [\#1432](https://github.com/danielgindi/Charts/issues/1432) -- PieChartDataEntry class not found - Swift/CocoaPods [\#1431](https://github.com/danielgindi/Charts/issues/1431) -- How to write a limit for each bar in horizontal bar chart? [\#1429](https://github.com/danielgindi/Charts/issues/1429) -- Bug with 2 candlestick datasets on one chart. [\#1428](https://github.com/danielgindi/Charts/issues/1428) -- getFillLinePosition not calling to create Area graph [\#1427](https://github.com/danielgindi/Charts/issues/1427) -- Lack of documentation [\#1426](https://github.com/danielgindi/Charts/issues/1426) -- Best method to use this in Objective c project [\#1425](https://github.com/danielgindi/Charts/issues/1425) -- Highlight sync between combined and line views [\#1424](https://github.com/danielgindi/Charts/issues/1424) -- How to create two bars one over another for Horizontal bar charts? [\#1423](https://github.com/danielgindi/Charts/issues/1423) -- \[Swift 3.0 specific\] linear line chart has additional line segments wile zooming in [\#1421](https://github.com/danielgindi/Charts/issues/1421) -- Is there a way to import PieChartDataEntry.swift in existing Pod? [\#1419](https://github.com/danielgindi/Charts/issues/1419) -- implement the same behavior as Android api [\#1418](https://github.com/danielgindi/Charts/issues/1418) -- Unable to build project in Xcode 8 [\#1417](https://github.com/danielgindi/Charts/issues/1417) -- Synchronizing scrolling/pan/highlight of multiple views. [\#1415](https://github.com/danielgindi/Charts/issues/1415) -- Custom X-Axis Values [\#1413](https://github.com/danielgindi/Charts/issues/1413) -- Query : When it will be available in CocoaPods? [\#1412](https://github.com/danielgindi/Charts/issues/1412) -- How to set background color of bars [\#1411](https://github.com/danielgindi/Charts/issues/1411) -- Query: Enable gridelines at specific location points. [\#1410](https://github.com/danielgindi/Charts/issues/1410) -- Syntax errors on one of our testing devices [\#1409](https://github.com/danielgindi/Charts/issues/1409) -- how to hide the ValueFormatter [\#1408](https://github.com/danielgindi/Charts/issues/1408) -- I can't see the zero\(float Num\) on ChartYAxis [\#1407](https://github.com/danielgindi/Charts/issues/1407) -- drawSliceTextEnabled = YES not working [\#1404](https://github.com/danielgindi/Charts/issues/1404) -- Customize popup on entry tap [\#1403](https://github.com/danielgindi/Charts/issues/1403) -- Query: How to create an area graph? [\#1402](https://github.com/danielgindi/Charts/issues/1402) -- Negative Bar Chart [\#1401](https://github.com/danielgindi/Charts/issues/1401) -- Cannot invoke initializer for type 'PieChartData' error in Swift 2.3 [\#1400](https://github.com/danielgindi/Charts/issues/1400) -- Get entry location in view when chart value is selected? [\#1399](https://github.com/danielgindi/Charts/issues/1399) -- Can you give me a Charts library wrote by OC. [\#1398](https://github.com/danielgindi/Charts/issues/1398) -- Barchart,,,,draw specific value [\#1397](https://github.com/danielgindi/Charts/issues/1397) -- How to customize left axis with string values? [\#1394](https://github.com/danielgindi/Charts/issues/1394) -- Swift & CocoaPods - Unable to Utilize Charts [\#1393](https://github.com/danielgindi/Charts/issues/1393) -- How to create a Pie chart, no 'how to' ? . The demo app sucks, doesn't compile. [\#1392](https://github.com/danielgindi/Charts/issues/1392) -- Need help in setDrawValues [\#1391](https://github.com/danielgindi/Charts/issues/1391) -- Display Integer value [\#1390](https://github.com/danielgindi/Charts/issues/1390) -- BarChartData Class is Missing InitWithXVals [\#1385](https://github.com/danielgindi/Charts/issues/1385) -- Undeclared or undefined identifiers while trying to compile project [\#1383](https://github.com/danielgindi/Charts/issues/1383) -- How to show/hide one of the line chart during runtime [\#1381](https://github.com/danielgindi/Charts/issues/1381) -- Charts-Swift.h is different [\#1380](https://github.com/danielgindi/Charts/issues/1380) -- infinite recursion in HorizontalBarChartHighlighter [\#1377](https://github.com/danielgindi/Charts/issues/1377) -- Charts errors in xcode beta 6 [\#1375](https://github.com/danielgindi/Charts/issues/1375) -- please tell me how do i handling these problems,thanks! [\#1373](https://github.com/danielgindi/Charts/issues/1373) -- Charts 3.0 and Swift 2.3 branch? [\#1370](https://github.com/danielgindi/Charts/issues/1370) -- Legend. Position is deprecated. [\#1369](https://github.com/danielgindi/Charts/issues/1369) -- App Crash: An instance 0xXXXXXXXX of class Charts.BarChartView was deallocated while key value observers were still registered with it. [\#1368](https://github.com/danielgindi/Charts/issues/1368) -- Unable to compile adding Charts to project via CocoaPods [\#1367](https://github.com/danielgindi/Charts/issues/1367) -- Cannot use PieChartDataSet or PieChartDataEntry when include with Cocoapod [\#1366](https://github.com/danielgindi/Charts/issues/1366) -- Charts is ~20M when built. Desired? [\#1365](https://github.com/danielgindi/Charts/issues/1365) -- swift 3 branch does not compile with Xcode 8 beta 6 [\#1364](https://github.com/danielgindi/Charts/issues/1364) -- There are two lines. The first number starts from scratch, but only one is from zero. The other one has a certain amount of cheap quantity. How do I get the other one from zero. [\#1363](https://github.com/danielgindi/Charts/issues/1363) -- missing class PieChartDataEntry \(macOS\) [\#1358](https://github.com/danielgindi/Charts/issues/1358) -- BarChartView can't show max y value's top label, only show half [\#1357](https://github.com/danielgindi/Charts/issues/1357) -- Horizontal Bar Chart not showing values [\#1356](https://github.com/danielgindi/Charts/issues/1356) -- rightAxis labels are not showing for value less then 1.0 in swift using cocoapod [\#1354](https://github.com/danielgindi/Charts/issues/1354) -- Chart's X-axis labels not resizing to accommodate multi-line text [\#1352](https://github.com/danielgindi/Charts/issues/1352) -- Pie Chart Graph Unusual Visual When Data Of Zero [\#1351](https://github.com/danielgindi/Charts/issues/1351) -- Chart render problem after double tap zoom [\#1350](https://github.com/danielgindi/Charts/issues/1350) -- Chart Bar drawing [\#1349](https://github.com/danielgindi/Charts/issues/1349) -- How to dynamically scale up / down data depends on zoom level [\#1346](https://github.com/danielgindi/Charts/issues/1346) -- Cannot install in ios9.3.2 [\#1345](https://github.com/danielgindi/Charts/issues/1345) -- Where can I find the exact color value of vordiplom colors? [\#1343](https://github.com/danielgindi/Charts/issues/1343) -- How to Modify X Axis values Swift? [\#1340](https://github.com/danielgindi/Charts/issues/1340) -- Line Chart : Data Line Color Change [\#1338](https://github.com/danielgindi/Charts/issues/1338) -- Line Chart x axis and y axis Line Color change? [\#1337](https://github.com/danielgindi/Charts/issues/1337) -- Grouped Bar Charts [\#1333](https://github.com/danielgindi/Charts/issues/1333) -- Integer for ChartDataEntry [\#1332](https://github.com/danielgindi/Charts/issues/1332) -- values from array for x axis on barchart [\#1331](https://github.com/danielgindi/Charts/issues/1331) -- Redundant conformance of 'RLMResults' to protocol 'SequenceType' on RealmChartsUtils [\#1329](https://github.com/danielgindi/Charts/issues/1329) -- Combined Chart Grouped Bar Width Not Changing [\#1328](https://github.com/danielgindi/Charts/issues/1328) -- Undefined symbols for architecture armv7: [\#1327](https://github.com/danielgindi/Charts/issues/1327) -- Error with carthage update ChartsRealm fails to build [\#1326](https://github.com/danielgindi/Charts/issues/1326) -- I am not able to design multicolor bar chart [\#1324](https://github.com/danielgindi/Charts/issues/1324) -- v2.2.5 demo code is different with pod installed version [\#1322](https://github.com/danielgindi/Charts/issues/1322) -- If the all value is 1 or 0, the ChartYAxis is error [\#1321](https://github.com/danielgindi/Charts/issues/1321) -- hide on select grid lines in line chart [\#1320](https://github.com/danielgindi/Charts/issues/1320) -- X data as a Date [\#1317](https://github.com/danielgindi/Charts/issues/1317) -- Also played well, before package, NO error, the recent packaging error, the error is "NO Scuh module 'charts", don't know is what reason to solve, use the xcode 7.1 \(7 b91b\) [\#1316](https://github.com/danielgindi/Charts/issues/1316) -- Crash with marker attached into CombinedChartView [\#1315](https://github.com/danielgindi/Charts/issues/1315) -- How to add more than 3 lines in chart [\#1314](https://github.com/danielgindi/Charts/issues/1314) -- is v3 Ready for production ? [\#1313](https://github.com/danielgindi/Charts/issues/1313) -- xAxis.axisMaxValue not working [\#1312](https://github.com/danielgindi/Charts/issues/1312) -- Symbol not found: \_\_TMVVSS17UnicodeScalarView9Generator Referenced from: Frameworks/Charts.framework/Charts [\#1311](https://github.com/danielgindi/Charts/issues/1311) -- how to named SWIFT\_CLASS\("....."\) [\#1310](https://github.com/danielgindi/Charts/issues/1310) -- How to set the length and color outside pie chart when a slice is highlighted? [\#1309](https://github.com/danielgindi/Charts/issues/1309) -- How to set the length and color outside pie chart when a slice is highlighted? [\#1308](https://github.com/danielgindi/Charts/issues/1308) -- I want set circle empty in Line Chart. Which properties i have to change? [\#1307](https://github.com/danielgindi/Charts/issues/1307) -- noDataText font and color [\#1305](https://github.com/danielgindi/Charts/issues/1305) -- how to let centerAttributedText line feed in bar chart ? [\#1304](https://github.com/danielgindi/Charts/issues/1304) -- Can Legend be selected or multi-selected? [\#1303](https://github.com/danielgindi/Charts/issues/1303) -- add financial bar chart \(Open-high-low-close chart\) [\#1302](https://github.com/danielgindi/Charts/issues/1302) -- How to select the first pie in bar chart? [\#1301](https://github.com/danielgindi/Charts/issues/1301) -- PieChartView Narrow with one value [\#1298](https://github.com/danielgindi/Charts/issues/1298) -- xAxis.axisMaxValue is never considered [\#1293](https://github.com/danielgindi/Charts/issues/1293) -- Please add Swift demo project also [\#1292](https://github.com/danielgindi/Charts/issues/1292) -- Swift 2.3 & 3.0 support: news, issues, PRs and state [\#1291](https://github.com/danielgindi/Charts/issues/1291) -- 2 lines on the charts with the same values [\#1289](https://github.com/danielgindi/Charts/issues/1289) -- How to set the y axis descript text [\#1285](https://github.com/danielgindi/Charts/issues/1285) -- how to setTouchEnabled to false [\#1283](https://github.com/danielgindi/Charts/issues/1283) -- legend set different form for different set [\#1282](https://github.com/danielgindi/Charts/issues/1282) -- Change Label Text Color PieChart [\#1280](https://github.com/danielgindi/Charts/issues/1280) -- Everyone welcome to try out `v3` branch before Charts 3.0 is released! [\#1279](https://github.com/danielgindi/Charts/issues/1279) -- \[FR\] make Marker a protocol [\#1278](https://github.com/danielgindi/Charts/issues/1278) -- Unable to convert charts to Swift3 [\#1277](https://github.com/danielgindi/Charts/issues/1277) -- Start at zero and draw cubic [\#1275](https://github.com/danielgindi/Charts/issues/1275) -- Customised size of x data points and Scatter Graph with Linear Trend Line [\#1274](https://github.com/danielgindi/Charts/issues/1274) -- How can i add null values to my chart? [\#1273](https://github.com/danielgindi/Charts/issues/1273) -- PIE-CHART how to get the index of the selected slice.??? [\#1267](https://github.com/danielgindi/Charts/issues/1267) -- How to select a value in line chart data point and same for bar chart [\#1265](https://github.com/danielgindi/Charts/issues/1265) -- update to the latest realm [\#1262](https://github.com/danielgindi/Charts/issues/1262) -- horizontal bar graph value different decimal places each time [\#1260](https://github.com/danielgindi/Charts/issues/1260) -- Charts vs. ShinobiCharts? [\#1259](https://github.com/danielgindi/Charts/issues/1259) -- LineChart overlap value label and y-Axis [\#1257](https://github.com/danielgindi/Charts/issues/1257) -- how to hide stacked bar chart label having 0 values [\#1256](https://github.com/danielgindi/Charts/issues/1256) -- fillColor for negative values [\#1255](https://github.com/danielgindi/Charts/issues/1255) -- Set custom x-value spacing in graph [\#1254](https://github.com/danielgindi/Charts/issues/1254) -- Hide specific labels on y axis [\#1253](https://github.com/danielgindi/Charts/issues/1253) -- Marker near edges got clipped [\#1251](https://github.com/danielgindi/Charts/issues/1251) -- Custom label for LineChart [\#1248](https://github.com/danielgindi/Charts/issues/1248) -- Chart in TableViewCell [\#1247](https://github.com/danielgindi/Charts/issues/1247) -- Line Chart : Can I drag a vertical line to any point on the screen and get values? Instead of individual touches [\#1246](https://github.com/danielgindi/Charts/issues/1246) -- Line Chart label count not calculating properly [\#1244](https://github.com/danielgindi/Charts/issues/1244) -- CandleChartView screen show count limit [\#1243](https://github.com/danielgindi/Charts/issues/1243) -- addEntryOrdered behavior - clarification [\#1242](https://github.com/danielgindi/Charts/issues/1242) -- Display Max Value on X-axis [\#1241](https://github.com/danielgindi/Charts/issues/1241) -- Value not display for Multiple DataSet in LineChart [\#1240](https://github.com/danielgindi/Charts/issues/1240) -- rightAxis are rounded [\#1238](https://github.com/danielgindi/Charts/issues/1238) -- Now working if “Compile Sources As” option to “Objective C++” [\#1237](https://github.com/danielgindi/Charts/issues/1237) -- Line is drawn below the x axis when the drawCubicEnabled is YES. [\#1236](https://github.com/danielgindi/Charts/issues/1236) -- Label value is cut off in horizontal bar [\#1235](https://github.com/danielgindi/Charts/issues/1235) -- ChartValueSelected Only While Finger Pressed [\#1234](https://github.com/danielgindi/Charts/issues/1234) -- YAxis Labels are clipped with some settings [\#1233](https://github.com/danielgindi/Charts/issues/1233) -- xVals隐藏问题 [\#1232](https://github.com/danielgindi/Charts/issues/1232) -- About the Lable number of x and y [\#1231](https://github.com/danielgindi/Charts/issues/1231) -- How to control not draws a specified point [\#1229](https://github.com/danielgindi/Charts/issues/1229) -- Location have a little problem [\#1228](https://github.com/danielgindi/Charts/issues/1228) -- BarChartView bars do not start at the x-axis. [\#1225](https://github.com/danielgindi/Charts/issues/1225) -- Unable to run on iOS/tvOS 10.0 beta [\#1223](https://github.com/danielgindi/Charts/issues/1223) -- two CombinedChartView's in the same screen changes axis format in the first [\#1222](https://github.com/danielgindi/Charts/issues/1222) -- Horizontal bar chart crashing after tap when more than one data set [\#1221](https://github.com/danielgindi/Charts/issues/1221) -- no suitable image found. [\#1220](https://github.com/danielgindi/Charts/issues/1220) -- wrong offset when using mutiple bar chart in combined chart [\#1219](https://github.com/danielgindi/Charts/issues/1219) -- UnsafeMutablePointer.moveInitializeFrom with negative count [\#1218](https://github.com/danielgindi/Charts/issues/1218) -- Is there any way to hide the label of a DataSet? [\#1217](https://github.com/danielgindi/Charts/issues/1217) -- How can I not be highlighted when I touch ended ? [\#1216](https://github.com/danielgindi/Charts/issues/1216) -- poor styling documentation, how can i make my charts look beautiful? [\#1215](https://github.com/danielgindi/Charts/issues/1215) -- X Axis for Candle Sticks from Realm [\#1214](https://github.com/danielgindi/Charts/issues/1214) -- drawHighlighted\(\) not calling [\#1212](https://github.com/danielgindi/Charts/issues/1212) -- how to set marker for line chart [\#1211](https://github.com/danielgindi/Charts/issues/1211) -- Error when using Charts library with Xcode 8 bet and Swift 3.0 [\#1210](https://github.com/danielgindi/Charts/issues/1210) -- I have an immature small suggestion [\#1209](https://github.com/danielgindi/Charts/issues/1209) -- I have a question BarChart [\#1208](https://github.com/danielgindi/Charts/issues/1208) -- HorizontalBarChart in Combined Chart [\#1207](https://github.com/danielgindi/Charts/issues/1207) -- drawvalue when stack is selected [\#1200](https://github.com/danielgindi/Charts/issues/1200) -- Remove labels from Radar Chart [\#1199](https://github.com/danielgindi/Charts/issues/1199) -- reduce height of grids [\#1198](https://github.com/danielgindi/Charts/issues/1198) -- reduce grid size [\#1194](https://github.com/danielgindi/Charts/issues/1194) -- ChartsView [\#1189](https://github.com/danielgindi/Charts/issues/1189) -- Custom LineChart marker image [\#1188](https://github.com/danielgindi/Charts/issues/1188) -- moveViewToAnimatedWithXIndex high cpu usage [\#1186](https://github.com/danielgindi/Charts/issues/1186) -- can we implement group bar chart and line chart as combined chart [\#1184](https://github.com/danielgindi/Charts/issues/1184) -- Such a difficult chart, can be realized? [\#1183](https://github.com/danielgindi/Charts/issues/1183) -- How to achieve the effect of the picture? Please look carefully [\#1182](https://github.com/danielgindi/Charts/issues/1182) -- Designed initializer of BarChartDataSet crash [\#1180](https://github.com/danielgindi/Charts/issues/1180) -- To judge whether the initial state [\#1178](https://github.com/danielgindi/Charts/issues/1178) -- use cocoa pods mistakes [\#1177](https://github.com/danielgindi/Charts/issues/1177) -- hide description label on charts [\#1176](https://github.com/danielgindi/Charts/issues/1176) -- axis values are rounded [\#1175](https://github.com/danielgindi/Charts/issues/1175) -- how can i add a % on leftAxis [\#1174](https://github.com/danielgindi/Charts/issues/1174) -- Add percent label for pie chart [\#1172](https://github.com/danielgindi/Charts/issues/1172) -- can't add swipe gesture [\#1170](https://github.com/danielgindi/Charts/issues/1170) -- Chart not drawing completely left to right [\#1168](https://github.com/danielgindi/Charts/issues/1168) -- Horizontal-BarChart: change color of bar's value [\#1167](https://github.com/danielgindi/Charts/issues/1167) -- ScatterChartData not working in Swift? [\#1166](https://github.com/danielgindi/Charts/issues/1166) -- Compile error on iPhone 4s simulator [\#1165](https://github.com/danielgindi/Charts/issues/1165) -- Adding an average line to a BarChartView [\#1162](https://github.com/danielgindi/Charts/issues/1162) -- About Swift3.0 [\#1161](https://github.com/danielgindi/Charts/issues/1161) -- How to add images on some points? [\#1160](https://github.com/danielgindi/Charts/issues/1160) -- Suggest combo type chart support gouped bar type [\#1159](https://github.com/danielgindi/Charts/issues/1159) -- Adding Entries dynamicly [\#1157](https://github.com/danielgindi/Charts/issues/1157) -- how can i add a button in redmark and i can click .. [\#1156](https://github.com/danielgindi/Charts/issues/1156) -- How can I select the close value in the candle chart view? [\#1155](https://github.com/danielgindi/Charts/issues/1155) -- Charts setup in Obj C project question [\#1154](https://github.com/danielgindi/Charts/issues/1154) -- I want datasetvalues according leftAxis and RigthAxis different display [\#1153](https://github.com/danielgindi/Charts/issues/1153) -- Unable to build project in new environment and it shows build error [\#1152](https://github.com/danielgindi/Charts/issues/1152) -- Chart Clipping [\#1149](https://github.com/danielgindi/Charts/issues/1149) -- How to handle small interval [\#1147](https://github.com/danielgindi/Charts/issues/1147) -- How to show the label [\#1146](https://github.com/danielgindi/Charts/issues/1146) -- specify certain point custom color [\#1144](https://github.com/danielgindi/Charts/issues/1144) -- when scaled touch move can't toggle highlight [\#1141](https://github.com/danielgindi/Charts/issues/1141) -- Support Swift 3.0 \(Xcode 8\) [\#1140](https://github.com/danielgindi/Charts/issues/1140) -- How to show bar chart value labels only on selection [\#1139](https://github.com/danielgindi/Charts/issues/1139) -- BalloonMarker overlapping issue [\#1137](https://github.com/danielgindi/Charts/issues/1137) -- Customize Axis visible distance [\#1135](https://github.com/danielgindi/Charts/issues/1135) -- Different width for stacked charts [\#1134](https://github.com/danielgindi/Charts/issues/1134) -- Properly setting up a fork of this project [\#1133](https://github.com/danielgindi/Charts/issues/1133) -- Issues with xcode 8.0 beta [\#1132](https://github.com/danielgindi/Charts/issues/1132) -- Disable touch events, so do not show Label [\#1129](https://github.com/danielgindi/Charts/issues/1129) -- custom chart label layout [\#1128](https://github.com/danielgindi/Charts/issues/1128) -- BarChartView yAxis origin y are not start from y:0.0? [\#1127](https://github.com/danielgindi/Charts/issues/1127) -- Space at the bottom of the Line Chart View in landscape view [\#1125](https://github.com/danielgindi/Charts/issues/1125) -- Failing to build the project [\#1124](https://github.com/danielgindi/Charts/issues/1124) -- Rounding error on Y-axis when all Y values are zeroes [\#1123](https://github.com/danielgindi/Charts/issues/1123) -- Can't hide small slice labels from pie chart. [\#1122](https://github.com/danielgindi/Charts/issues/1122) -- Customizing the x-axes labels. [\#1120](https://github.com/danielgindi/Charts/issues/1120) -- Using prebuilt frameworks is not recommended [\#1118](https://github.com/danielgindi/Charts/issues/1118) -- chartValueSelected on TVOS [\#1117](https://github.com/danielgindi/Charts/issues/1117) -- Single LineChartDataSet in LineChartView [\#1116](https://github.com/danielgindi/Charts/issues/1116) -- how to show only positive values in barchart? [\#1114](https://github.com/danielgindi/Charts/issues/1114) -- Slow Build Time [\#1113](https://github.com/danielgindi/Charts/issues/1113) -- BarChartDataEntry with Int instead of Double [\#1112](https://github.com/danielgindi/Charts/issues/1112) -- Embedded Binaries charts.framewor But nothing happen! [\#1111](https://github.com/danielgindi/Charts/issues/1111) -- How to draw Combined Chart on the left [\#1110](https://github.com/danielgindi/Charts/issues/1110) -- BarChartDataSet.values is a get-only [\#1108](https://github.com/danielgindi/Charts/issues/1108) -- 有没有 oc版的? [\#1107](https://github.com/danielgindi/Charts/issues/1107) -- Change color of highlight in chart [\#1106](https://github.com/danielgindi/Charts/issues/1106) -- Sync selected value in 2 chart [\#1105](https://github.com/danielgindi/Charts/issues/1105) -- Are two charts can be linked ? [\#1103](https://github.com/danielgindi/Charts/issues/1103) -- BarChart bottom not on the Xaxis [\#1102](https://github.com/danielgindi/Charts/issues/1102) -- BUG::: leftAxis.axisMinValue !!!=== 0.0 [\#1101](https://github.com/danielgindi/Charts/issues/1101) -- CandleStickView Memory leak [\#1100](https://github.com/danielgindi/Charts/issues/1100) -- application doesn't compile for iphone 4s and iphone 5 device. [\#1098](https://github.com/danielgindi/Charts/issues/1098) -- ChartHighlight init data in function of highlightValue error [\#1096](https://github.com/danielgindi/Charts/issues/1096) -- improvement: custom labels on BarChart [\#1095](https://github.com/danielgindi/Charts/issues/1095) -- Missing alternate x-axis labels in vertical bar chart [\#1093](https://github.com/danielgindi/Charts/issues/1093) -- ChartHighlight class initialization is error in ChartViewBase [\#1090](https://github.com/danielgindi/Charts/issues/1090) -- how can I change the mark view [\#1086](https://github.com/danielgindi/Charts/issues/1086) -- Pie Chart with value lines [\#1085](https://github.com/danielgindi/Charts/issues/1085) -- Chart Demo not Compiling [\#1083](https://github.com/danielgindi/Charts/issues/1083) -- set the Y range [\#1079](https://github.com/danielgindi/Charts/issues/1079) -- Sync zoom in 2 chart [\#1078](https://github.com/danielgindi/Charts/issues/1078) -- The rotated xAxis label out of the view [\#1068](https://github.com/danielgindi/Charts/issues/1068) -- visibleXRangeMaximum not refreshing [\#1037](https://github.com/danielgindi/Charts/issues/1037) -- Fill area between two line in Line chart [\#1032](https://github.com/danielgindi/Charts/issues/1032) -- Left Axis not showing labels after update to Swift 2.3 [\#997](https://github.com/danielgindi/Charts/issues/997) -- highestVisibleXIndex has regression issue [\#985](https://github.com/danielgindi/Charts/issues/985) -- Problem with bitcode [\#979](https://github.com/danielgindi/Charts/issues/979) -- BarChartView height is not reflecting the values assigned to it. [\#977](https://github.com/danielgindi/Charts/issues/977) -- I use the RadarChartView,when displaying two sets of data [\#974](https://github.com/danielgindi/Charts/issues/974) -- Overlapping with multiple data styles [\#972](https://github.com/danielgindi/Charts/issues/972) -- XAxis Values label rotation [\#953](https://github.com/danielgindi/Charts/issues/953) -- Custom Y Value Formatter [\#943](https://github.com/danielgindi/Charts/issues/943) -- Bar chart missing y axis label [\#858](https://github.com/danielgindi/Charts/issues/858) -- Overlapping bar chart [\#857](https://github.com/danielgindi/Charts/issues/857) -- iOS-charts Get Currently visible bars for MultipleBarChartViewController demo [\#782](https://github.com/danielgindi/Charts/issues/782) -- Live data Line Chart [\#754](https://github.com/danielgindi/Charts/issues/754) -- Support custom formatting of chart labels [\#750](https://github.com/danielgindi/Charts/issues/750) -- Horizontally flipped x-axis [\#738](https://github.com/danielgindi/Charts/issues/738) -- Annotations issues and asking for supporting more types of markers [\#722](https://github.com/danielgindi/Charts/issues/722) -- Drop iOS 7 support in readme [\#601](https://github.com/danielgindi/Charts/issues/601) -- HorizontalBarChartView displays bar shadow when left and right axis hidden [\#311](https://github.com/danielgindi/Charts/issues/311) -- Making X-Values Properly Scaled \(Not Equidistant\) [\#194](https://github.com/danielgindi/Charts/issues/194) -- LineChart Axis Inset? [\#46](https://github.com/danielgindi/Charts/issues/46) - -**Merged pull requests:** - -- bump Charts version to 3.0.0 [\#1505](https://github.com/danielgindi/Charts/pull/1505) ([liuxuan30](https://github.com/liuxuan30)) -- porting \#1452 into master [\#1486](https://github.com/danielgindi/Charts/pull/1486) ([liuxuan30](https://github.com/liuxuan30)) -- Don't override project settings in targets [\#1484](https://github.com/danielgindi/Charts/pull/1484) ([petester42](https://github.com/petester42)) -- change Charts baseSDK to iOS 10 [\#1467](https://github.com/danielgindi/Charts/pull/1467) ([liuxuan30](https://github.com/liuxuan30)) -- migrate more ChartsDemo project setting to swift 3.0 [\#1466](https://github.com/danielgindi/Charts/pull/1466) ([liuxuan30](https://github.com/liuxuan30)) -- Fix bar layout bug, pie callback bug [\#1452](https://github.com/danielgindi/Charts/pull/1452) ([aoverholtzer](https://github.com/aoverholtzer)) -- Update project structure for simplicity and fixing carthage [\#1422](https://github.com/danielgindi/Charts/pull/1422) ([petester42](https://github.com/petester42)) -- \[swift 3.0 specific\]fix linear line chart additional line segments wile zooming in [\#1420](https://github.com/danielgindi/Charts/pull/1420) ([liuxuan30](https://github.com/liuxuan30)) -- fix attempt for Realm support [\#1414](https://github.com/danielgindi/Charts/pull/1414) ([liuxuan30](https://github.com/liuxuan30)) -- migrate Chart v3 code in master to swift 2.3 branch [\#1389](https://github.com/danielgindi/Charts/pull/1389) ([liuxuan30](https://github.com/liuxuan30)) -- fix bridgedObjCGetStringArray warning and more copyWithZone\(\_ zone: NSZone?\) -\> AnyObject errors [\#1379](https://github.com/danielgindi/Charts/pull/1379) ([liuxuan30](https://github.com/liuxuan30)) -- migrate `public` to `open` [\#1378](https://github.com/danielgindi/Charts/pull/1378) ([liuxuan30](https://github.com/liuxuan30)) -- Swift 3.0 beta 6 \(acegreen's branch, but with fixes for OS X\) [\#1353](https://github.com/danielgindi/Charts/pull/1353) ([pixelspark](https://github.com/pixelspark)) -- Conforms to Swift 3 - Xcode 8 beta 6 [\#1342](https://github.com/danielgindi/Charts/pull/1342) ([acegreen](https://github.com/acegreen)) -- When only one of scaleXEnabled or scaleYEnabled is effective [\#1319](https://github.com/danielgindi/Charts/pull/1319) ([essoecc](https://github.com/essoecc)) -- V3 [\#1318](https://github.com/danielgindi/Charts/pull/1318) ([vishaldeshai](https://github.com/vishaldeshai)) -- convert RunLoopMode to swift 3.0 syntax [\#1296](https://github.com/danielgindi/Charts/pull/1296) ([liuxuan30](https://github.com/liuxuan30)) -- fix more ChartsDemo complains [\#1295](https://github.com/danielgindi/Charts/pull/1295) ([liuxuan30](https://github.com/liuxuan30)) -- just fix all Xcode beta 4 complains, except for Realm bug [\#1294](https://github.com/danielgindi/Charts/pull/1294) ([liuxuan30](https://github.com/liuxuan30)) -- Swift 3.0 - Xcode 8 Beta 4 [\#1290](https://github.com/danielgindi/Charts/pull/1290) ([acegreen](https://github.com/acegreen)) -- Few more changes needed to build with Swift 2.3 [\#1281](https://github.com/danielgindi/Charts/pull/1281) ([EpicDraws](https://github.com/EpicDraws)) -- fix Realm pod spec typo [\#1271](https://github.com/danielgindi/Charts/pull/1271) ([liuxuan30](https://github.com/liuxuan30)) -- support Realm 1.0.2 [\#1270](https://github.com/danielgindi/Charts/pull/1270) ([liuxuan30](https://github.com/liuxuan30)) -- upgrade Realm to 1.0.2 [\#1268](https://github.com/danielgindi/Charts/pull/1268) ([liuxuan30](https://github.com/liuxuan30)) -- Typo fix, our of range =\> out of range [\#1264](https://github.com/danielgindi/Charts/pull/1264) ([chris-gunawardena](https://github.com/chris-gunawardena)) -- Fix Swift 3 compilation errors for iOS [\#1258](https://github.com/danielgindi/Charts/pull/1258) ([puthirith](https://github.com/puthirith)) -- remove brew upgrade carthage for travis and update ios-snapshot-test-case to 2.1.2 [\#1249](https://github.com/danielgindi/Charts/pull/1249) ([liuxuan30](https://github.com/liuxuan30)) -- improve comment to warn users how to use setVisibleRange APIs [\#1245](https://github.com/danielgindi/Charts/pull/1245) ([liuxuan30](https://github.com/liuxuan30)) -- for \#1208, seems drawBarShadowEnabled should be false by default [\#1226](https://github.com/danielgindi/Charts/pull/1226) ([liuxuan30](https://github.com/liuxuan30)) -- BUGFIX: fix infinite recursive call of getXIndex\(\_:\) [\#1213](https://github.com/danielgindi/Charts/pull/1213) ([AntiMoron](https://github.com/AntiMoron)) -- Add missing imports for iOS 7 support [\#1205](https://github.com/danielgindi/Charts/pull/1205) ([VincentSit](https://github.com/VincentSit)) -- upgrade carthage, resolve test failure config [\#1203](https://github.com/danielgindi/Charts/pull/1203) ([liuxuan30](https://github.com/liuxuan30)) -- update iso-snapshot-test-case to master to have the fix for now [\#1202](https://github.com/danielgindi/Charts/pull/1202) ([liuxuan30](https://github.com/liuxuan30)) -- Migrate to Swift 3 \(now targeted at the Swift-3.0 branch\) [\#1171](https://github.com/danielgindi/Charts/pull/1171) ([pixelspark](https://github.com/pixelspark)) -- Swift 2.3 [\#1163](https://github.com/danielgindi/Charts/pull/1163) ([liuxuan30](https://github.com/liuxuan30)) -- Ignoring .DS\_Store files [\#1130](https://github.com/danielgindi/Charts/pull/1130) ([einsteinx2](https://github.com/einsteinx2)) - -## [v2.2.5](https://github.com/danielgindi/Charts/tree/v2.2.5) (2016-05-30) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.2.4...v2.2.5) - -**Implemented enhancements:** - -- Support for Xamarin.Forms [\#606](https://github.com/danielgindi/Charts/issues/606) - -**Fixed bugs:** - -- fatal error: stride size must not be zero [\#981](https://github.com/danielgindi/Charts/issues/981) -- highestVisibleXIndex is smaller than lowestVisibleXIndex [\#940](https://github.com/danielgindi/Charts/issues/940) -- Crash on zoom [\#931](https://github.com/danielgindi/Charts/issues/931) -- ChartLegend yEntrySpace not work [\#886](https://github.com/danielgindi/Charts/issues/886) -- Selection on bubble chart [\#654](https://github.com/danielgindi/Charts/issues/654) -- Cubic Line goes too much over the top or below bottom. Needs flattening. [\#407](https://github.com/danielgindi/Charts/issues/407) - -**Closed issues:** - -- Podspec prepare command fails on `pod install` [\#1080](https://github.com/danielgindi/Charts/issues/1080) -- Why not the same as Android and IOS parameters? RendererBase.calcXBounds\(\) [\#1077](https://github.com/danielgindi/Charts/issues/1077) -- Why not the same parameters ?RendererBase.calcXBounds\(\) [\#1076](https://github.com/danielgindi/Charts/issues/1076) -- Crash: fatal error: Can't form Range with end \< start [\#1075](https://github.com/danielgindi/Charts/issues/1075) -- automatically calculated labels with a custom roof \(axisMaxValue only if exceeding it\) [\#1074](https://github.com/danielgindi/Charts/issues/1074) -- Swift Version [\#1073](https://github.com/danielgindi/Charts/issues/1073) -- CodeSign for "Framework" in SDK "iOS 9.3" [\#1072](https://github.com/danielgindi/Charts/issues/1072) -- Changing size of centre section - pie chart [\#1071](https://github.com/danielgindi/Charts/issues/1071) -- PieChartView does not draw chart ! [\#1070](https://github.com/danielgindi/Charts/issues/1070) -- Real-time Charts [\#1069](https://github.com/danielgindi/Charts/issues/1069) -- swift2.2, I have a pieChartView problem [\#1067](https://github.com/danielgindi/Charts/issues/1067) -- carthage compatibility [\#1064](https://github.com/danielgindi/Charts/issues/1064) -- LineChart set a great amount data to LineChartDataSet, cpu increase highly to 97% [\#1063](https://github.com/danielgindi/Charts/issues/1063) -- Realm.io Horizontal combine bar chart - iOS [\#1062](https://github.com/danielgindi/Charts/issues/1062) -- Line chart font size problem [\#1061](https://github.com/danielgindi/Charts/issues/1061) -- BarChart won't sit on bottom of screen for some datasets, Why? How to fix? [\#1059](https://github.com/danielgindi/Charts/issues/1059) -- Very odd line at top of graph [\#1058](https://github.com/danielgindi/Charts/issues/1058) -- After upgrading to Xcode 7.3.1, getting bridging issue [\#1057](https://github.com/danielgindi/Charts/issues/1057) -- How can I remove the gap between the bar [\#1056](https://github.com/danielgindi/Charts/issues/1056) -- Pie Chart label position [\#1055](https://github.com/danielgindi/Charts/issues/1055) -- Cant understand .axisMaxValue [\#1054](https://github.com/danielgindi/Charts/issues/1054) -- Is there a way to get a different background colour for different values of the x axis? [\#1053](https://github.com/danielgindi/Charts/issues/1053) -- Without drawLimitLinesBehindDataEnabled, limit lines go outside chart area [\#1052](https://github.com/danielgindi/Charts/issues/1052) -- The horizontal line that forms the grid of the LineChartView are not the same color [\#1051](https://github.com/danielgindi/Charts/issues/1051) -- Issue with coloring grouped datasets in barchart [\#1050](https://github.com/danielgindi/Charts/issues/1050) -- Issues with y axis values [\#1047](https://github.com/danielgindi/Charts/issues/1047) -- Marker out of view [\#1046](https://github.com/danielgindi/Charts/issues/1046) -- How to draw OHLC chart \( Open high low close \) ? [\#1045](https://github.com/danielgindi/Charts/issues/1045) -- How to achieve this effect [\#1044](https://github.com/danielgindi/Charts/issues/1044) -- Changing the size of the interception \(dots\) font in Line Chart ? [\#1043](https://github.com/danielgindi/Charts/issues/1043) -- Multiple entries of the same item in legend [\#1042](https://github.com/danielgindi/Charts/issues/1042) -- How to draw this bar Chart [\#1039](https://github.com/danielgindi/Charts/issues/1039) -- Right axis display decimals [\#1036](https://github.com/danielgindi/Charts/issues/1036) -- Crash on getMarkerPosition [\#1034](https://github.com/danielgindi/Charts/issues/1034) -- Set the bar at the top of the number animation [\#1033](https://github.com/danielgindi/Charts/issues/1033) -- Bar height is calculated wrong [\#1031](https://github.com/danielgindi/Charts/issues/1031) -- How to draw gridBackground by Dashed Line [\#1030](https://github.com/danielgindi/Charts/issues/1030) -- setVisibleYRangeMaximum puts line data off screen [\#1029](https://github.com/danielgindi/Charts/issues/1029) -- How to set max value of xAxis is last object of xVals [\#1028](https://github.com/danielgindi/Charts/issues/1028) -- Can't set text of Legend? [\#1027](https://github.com/danielgindi/Charts/issues/1027) -- conflict between auto scale and axis.axisMin/MaxValue [\#1026](https://github.com/danielgindi/Charts/issues/1026) -- Extend beyond values \(feature request\) [\#1025](https://github.com/danielgindi/Charts/issues/1025) -- Error: "Assignment to readonly property" when updating charts data [\#1024](https://github.com/danielgindi/Charts/issues/1024) -- Scrolling in a scroll view is blocked if the chart in the scroll view is not fully zoomed out. [\#1023](https://github.com/danielgindi/Charts/issues/1023) -- Print statements \(Logs\) [\#1021](https://github.com/danielgindi/Charts/issues/1021) -- How to get to the origin of the chartView.marker? [\#1020](https://github.com/danielgindi/Charts/issues/1020) -- Target Line for Bar Chart [\#1019](https://github.com/danielgindi/Charts/issues/1019) -- Different code between github and pod [\#1018](https://github.com/danielgindi/Charts/issues/1018) -- BarChart Can‘t display Markers [\#1017](https://github.com/danielgindi/Charts/issues/1017) -- Can't buliding in XCode7.1 [\#1016](https://github.com/danielgindi/Charts/issues/1016) -- Show Bar Borders in Combined Chart Demo Crash [\#1014](https://github.com/danielgindi/Charts/issues/1014) -- ChartDataEntry can't initialize with float value [\#1013](https://github.com/danielgindi/Charts/issues/1013) -- Override with Wrong Argument Label? [\#1009](https://github.com/danielgindi/Charts/issues/1009) -- On Y Axis "0" may be displayed as "-0" [\#1008](https://github.com/danielgindi/Charts/issues/1008) -- Change x-axis in bubble chart [\#1007](https://github.com/danielgindi/Charts/issues/1007) -- Change the width of chart [\#1005](https://github.com/danielgindi/Charts/issues/1005) -- OC project BalloonMarker.swift error [\#1004](https://github.com/danielgindi/Charts/issues/1004) -- How to let the Y axis shows is not only a number, but the custom string [\#1003](https://github.com/danielgindi/Charts/issues/1003) -- ask questions about CombinedChartViewController.h [\#1001](https://github.com/danielgindi/Charts/issues/1001) -- Crash when debug build, works on release build [\#999](https://github.com/danielgindi/Charts/issues/999) -- Demo crashed when running on phone\( iOS 9.0\),but can run on iPhone \(iOS 7.0\) [\#998](https://github.com/danielgindi/Charts/issues/998) -- Emergency Problem [\#996](https://github.com/danielgindi/Charts/issues/996) -- Radar Chart- Setting the maximum Y-Axis value. [\#994](https://github.com/danielgindi/Charts/issues/994) -- Y-Axis labels zooming issue [\#991](https://github.com/danielgindi/Charts/issues/991) -- XY Bubble Chart [\#990](https://github.com/danielgindi/Charts/issues/990) -- Adding text labels to Y- Axis? [\#988](https://github.com/danielgindi/Charts/issues/988) -- Build Failed: expression in list of expression [\#987](https://github.com/danielgindi/Charts/issues/987) -- autoScaleMinMaxEnabled does not work with Candle Charts [\#986](https://github.com/danielgindi/Charts/issues/986) -- gesture conflict when lineChartView in tableView [\#984](https://github.com/danielgindi/Charts/issues/984) -- Conflicting other pod depencies [\#983](https://github.com/danielgindi/Charts/issues/983) -- NaN makes highestVisibleXIndex crash [\#980](https://github.com/danielgindi/Charts/issues/980) -- Draw Horiztontal Line on Bar Chart [\#976](https://github.com/danielgindi/Charts/issues/976) -- Show empty Chart when there are no data [\#975](https://github.com/danielgindi/Charts/issues/975) -- Unexpected problem with Import Charts [\#973](https://github.com/danielgindi/Charts/issues/973) -- In which file can I edit the yaxis maximum??? [\#971](https://github.com/danielgindi/Charts/issues/971) -- Help with customizing [\#970](https://github.com/danielgindi/Charts/issues/970) -- Where and how can I set a y axis custom max value? [\#968](https://github.com/danielgindi/Charts/issues/968) -- The horizontal bar graph data values are exceeding the graph space. [\#967](https://github.com/danielgindi/Charts/issues/967) -- Where can I add data to my bar chart? [\#966](https://github.com/danielgindi/Charts/issues/966) -- Getting Error cannot load underlying module XCTest [\#965](https://github.com/danielgindi/Charts/issues/965) -- Don't show the horizontal line [\#964](https://github.com/danielgindi/Charts/issues/964) -- Where do I use the import line? [\#963](https://github.com/danielgindi/Charts/issues/963) -- changing bottom 'key' label? [\#962](https://github.com/danielgindi/Charts/issues/962) -- move "{" to the right side of last line [\#961](https://github.com/danielgindi/Charts/issues/961) -- Overriding Highlight [\#960](https://github.com/danielgindi/Charts/issues/960) -- hide values under 10% [\#959](https://github.com/danielgindi/Charts/issues/959) -- x axis label gets cut [\#958](https://github.com/danielgindi/Charts/issues/958) -- enlarge the spacing between the x axis labels to the y axis labels [\#957](https://github.com/danielgindi/Charts/issues/957) -- Cubic line chart is not full bleed [\#956](https://github.com/danielgindi/Charts/issues/956) -- Several properties work in emulator but don't \(or crash\) on iPhone [\#955](https://github.com/danielgindi/Charts/issues/955) -- Cannot pass in struct to ChartDataEntry [\#954](https://github.com/danielgindi/Charts/issues/954) -- A "divide by 0" bug [\#952](https://github.com/danielgindi/Charts/issues/952) -- Line Chart Dynamic Updating [\#951](https://github.com/danielgindi/Charts/issues/951) -- Updating version alters bar chart layout [\#950](https://github.com/danielgindi/Charts/issues/950) -- Bar chart floating y position [\#947](https://github.com/danielgindi/Charts/issues/947) -- setVisibleXRangeMinimum cause crash [\#946](https://github.com/danielgindi/Charts/issues/946) -- Carthage [\#942](https://github.com/danielgindi/Charts/issues/942) -- How to draw 2 lineCharts in a combinedChart? [\#939](https://github.com/danielgindi/Charts/issues/939) -- highlight last data in bar chart [\#938](https://github.com/danielgindi/Charts/issues/938) -- 我想用charts显示的数据为'int'类型 [\#936](https://github.com/danielgindi/Charts/issues/936) -- Don't see updates in PieChartDataSet from 2.2.4 [\#933](https://github.com/danielgindi/Charts/issues/933) -- Bubbles size of bubble chart [\#930](https://github.com/danielgindi/Charts/issues/930) -- Binding for Xamarin [\#929](https://github.com/danielgindi/Charts/issues/929) -- Line chart with 2 colours [\#928](https://github.com/danielgindi/Charts/issues/928) -- Disable top/bottom YAxis line drawing [\#927](https://github.com/danielgindi/Charts/issues/927) -- Coloring by bars and not by stacks in a StackBar chart [\#925](https://github.com/danielgindi/Charts/issues/925) -- How to set the scaling for the left/right axis. [\#924](https://github.com/danielgindi/Charts/issues/924) -- Use of undeclared 'CGFloat' [\#923](https://github.com/danielgindi/Charts/issues/923) -- Diffrent X-axis label color [\#921](https://github.com/danielgindi/Charts/issues/921) -- Vertical bar chart: capture of scrollView delegate callbacks and load additional data [\#920](https://github.com/danielgindi/Charts/issues/920) -- groupspace doesn't work [\#919](https://github.com/danielgindi/Charts/issues/919) -- Could the label of the LineChartDataSet be hidden [\#918](https://github.com/danielgindi/Charts/issues/918) -- if use pod Charts/Realm ,than @import Charts: could not build module "Charts" [\#917](https://github.com/danielgindi/Charts/issues/917) -- @import Charts: could not build module "Charts" [\#916](https://github.com/danielgindi/Charts/issues/916) -- LineChard with different color for filling [\#915](https://github.com/danielgindi/Charts/issues/915) -- start animation at minimum visible y-Position [\#914](https://github.com/danielgindi/Charts/issues/914) -- Line chart yAxis data interval [\#912](https://github.com/danielgindi/Charts/issues/912) -- Unable to display empty bars in barcharts [\#911](https://github.com/danielgindi/Charts/issues/911) -- Bar chart y axis interval digits [\#910](https://github.com/danielgindi/Charts/issues/910) -- How to use any chart in My App. [\#909](https://github.com/danielgindi/Charts/issues/909) -- Specifiy axisMinimum and axisMaximum range [\#908](https://github.com/danielgindi/Charts/issues/908) -- Symbol not Found on Xcode 7.3 [\#907](https://github.com/danielgindi/Charts/issues/907) -- noDataTextDescription not display [\#906](https://github.com/danielgindi/Charts/issues/906) -- Bar chart starting point non zero [\#905](https://github.com/danielgindi/Charts/issues/905) -- Do pod install with cocoapods [\#904](https://github.com/danielgindi/Charts/issues/904) -- Feature request :\) blur shadow for line chart [\#903](https://github.com/danielgindi/Charts/issues/903) -- Add Lines between labels [\#902](https://github.com/danielgindi/Charts/issues/902) -- Real number x axis line for BarChartView [\#901](https://github.com/danielgindi/Charts/issues/901) -- Piechart with vertical legend [\#840](https://github.com/danielgindi/Charts/issues/840) -- ChartEasingOption causes entire background to be filled with color [\#826](https://github.com/danielgindi/Charts/issues/826) -- Could not cast value of type 'Charts.BarChartData' \(0x10bbd31f0\) to 'MYPROJ.BarChartData' \(0x10aeed700\). [\#825](https://github.com/danielgindi/Charts/issues/825) -- BarChartView: Rectangle with borders and without filling color [\#822](https://github.com/danielgindi/Charts/issues/822) -- Is there any possibility for grouping x axis values in line chart? [\#798](https://github.com/danielgindi/Charts/issues/798) -- Being OSX too, should we rename repo to just `Charts`? [\#787](https://github.com/danielgindi/Charts/issues/787) -- Missing a piece of data to the left [\#785](https://github.com/danielgindi/Charts/issues/785) -- How to remove these white/gray lines [\#758](https://github.com/danielgindi/Charts/issues/758) -- If data is not set \(e.g. public var noDataText = "No chart data available."\) [\#756](https://github.com/danielgindi/Charts/issues/756) -- ChartEasingOption properties \(animate\) [\#726](https://github.com/danielgindi/Charts/issues/726) -- Moving pie chart location \(legend overlaps chart\) [\#707](https://github.com/danielgindi/Charts/issues/707) -- CombinedChartView bubbleData size not working [\#692](https://github.com/danielgindi/Charts/issues/692) -- Stop axis labels duplicating. [\#315](https://github.com/danielgindi/Charts/issues/315) -- Can we show Pie chart Value out of slice instead showing inside the slice ? [\#90](https://github.com/danielgindi/Charts/issues/90) -- Double tap to zoom into the chart should center to Point that was tapped [\#83](https://github.com/danielgindi/Charts/issues/83) - -**Merged pull requests:** - -- Revert "Simple changes to allow OS X 10.10 support" [\#1088](https://github.com/danielgindi/Charts/pull/1088) ([danielgindi](https://github.com/danielgindi)) -- Simple changes to allow OS X 10.10 support [\#1087](https://github.com/danielgindi/Charts/pull/1087) ([einsteinx2](https://github.com/einsteinx2)) -- Fix \#1014: fix combined chart crash while toggle bar borders [\#1015](https://github.com/danielgindi/Charts/pull/1015) ([liuxuan30](https://github.com/liuxuan30)) -- Highlight enhancements \(Closes \#654, closes \#702\) [\#1012](https://github.com/danielgindi/Charts/pull/1012) ([danielgindi](https://github.com/danielgindi)) -- Fix typo [\#949](https://github.com/danielgindi/Charts/pull/949) ([emiranda04](https://github.com/emiranda04)) -- fix \#940. another loop bounds crash [\#941](https://github.com/danielgindi/Charts/pull/941) ([liuxuan30](https://github.com/liuxuan30)) -- Fix a crash when using markers with a PieChart [\#937](https://github.com/danielgindi/Charts/pull/937) ([rofreg](https://github.com/rofreg)) -- Horizontal cubic line [\#935](https://github.com/danielgindi/Charts/pull/935) ([danielgindi](https://github.com/danielgindi)) -- Property circleHoleRadius added to ILineChartDataSet protocol. [\#934](https://github.com/danielgindi/Charts/pull/934) ([olbartek](https://github.com/olbartek)) -- replace old github link to latest https://github.com/danielgindi/Charts [\#932](https://github.com/danielgindi/Charts/pull/932) ([liuxuan30](https://github.com/liuxuan30)) -- Some minor nits [\#913](https://github.com/danielgindi/Charts/pull/913) ([ruurd](https://github.com/ruurd)) -- add a switch whether to draw limit line's labels. default is true [\#887](https://github.com/danielgindi/Charts/pull/887) ([liuxuan30](https://github.com/liuxuan30)) - -## [v2.2.4](https://github.com/danielgindi/Charts/tree/v2.2.4) (2016-03-31) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.2.3...v2.2.4) - -**Fixed bugs:** - -- Cubic line goes over the last point [\#683](https://github.com/danielgindi/Charts/issues/683) -- drawCubicEnabled on LineChartView is missing points when Y Values are missing [\#157](https://github.com/danielgindi/Charts/issues/157) - -**Closed issues:** - -- can not run ChartsDemo. [\#900](https://github.com/danielgindi/Charts/issues/900) -- Barchart xAxis always displaying [\#899](https://github.com/danielgindi/Charts/issues/899) -- Multiple 'Charts.framework'. Build fails due to dependencies. [\#897](https://github.com/danielgindi/Charts/issues/897) -- Custom X Axis for BarChartView [\#896](https://github.com/danielgindi/Charts/issues/896) -- UISwipeGestureRecognizer for BarChartView [\#895](https://github.com/danielgindi/Charts/issues/895) -- The view hierarchy is not prepared for the constraint [\#893](https://github.com/danielgindi/Charts/issues/893) -- Could not find `Charts.framework` in the "Embedded Binaries" [\#891](https://github.com/danielgindi/Charts/issues/891) -- Barchart with diffrent width bar [\#890](https://github.com/danielgindi/Charts/issues/890) -- Weird numbers on BarChart [\#889](https://github.com/danielgindi/Charts/issues/889) -- Two line in X-Axis [\#888](https://github.com/danielgindi/Charts/issues/888) -- Set the leftAxis label color differently [\#885](https://github.com/danielgindi/Charts/issues/885) -- Could leftAxis and rightAxis's border be hidden? [\#884](https://github.com/danielgindi/Charts/issues/884) -- The barchart data not filled the whole container [\#883](https://github.com/danielgindi/Charts/issues/883) -- Barchart positive negtive label and xAxis overlapping [\#882](https://github.com/danielgindi/Charts/issues/882) -- How to remove the edge's border of time line chart filled shaped [\#881](https://github.com/danielgindi/Charts/issues/881) -- Master branch is not compiling [\#879](https://github.com/danielgindi/Charts/issues/879) -- App Submission - API analysis file too large [\#878](https://github.com/danielgindi/Charts/issues/878) -- Swift 2.2 [\#877](https://github.com/danielgindi/Charts/issues/877) -- avoidFirstLastClippingEnabled Still be clipped in CombinedChartView [\#876](https://github.com/danielgindi/Charts/issues/876) -- How to make the ChartXAxis has an offset between the zero point [\#875](https://github.com/danielgindi/Charts/issues/875) -- Carthage & Xcode 7.3 Pre-Built Binaries Error [\#874](https://github.com/danielgindi/Charts/issues/874) -- Scrolling glitch [\#873](https://github.com/danielgindi/Charts/issues/873) -- Request for enhancement: combined chart\(BarChart \(grouped DataSets\) and linechart\) [\#871](https://github.com/danielgindi/Charts/issues/871) -- CandleStickChartView.shadowColor [\#870](https://github.com/danielgindi/Charts/issues/870) -- Marker behind line limit [\#867](https://github.com/danielgindi/Charts/issues/867) -- Horizontal Chart Issue [\#866](https://github.com/danielgindi/Charts/issues/866) -- How to move data points with finger drag at run time. [\#865](https://github.com/danielgindi/Charts/issues/865) -- Chart customAxisMax and customAxisMin doesn't update correctly [\#864](https://github.com/danielgindi/Charts/issues/864) -- auto scale min/max option doesn't seem to change anything [\#863](https://github.com/danielgindi/Charts/issues/863) -- Confused as to how to install using CocoaPods [\#862](https://github.com/danielgindi/Charts/issues/862) -- Different spacing between same width bars in BarChartView [\#860](https://github.com/danielgindi/Charts/issues/860) -- Get color of the specify data? [\#859](https://github.com/danielgindi/Charts/issues/859) -- DrawCubicEnabled line starts from wrong position [\#855](https://github.com/danielgindi/Charts/issues/855) -- How to prevent xAxis values and dataset value get overlapped ? [\#854](https://github.com/danielgindi/Charts/issues/854) -- Program crash [\#853](https://github.com/danielgindi/Charts/issues/853) -- Zoomin Graphview [\#852](https://github.com/danielgindi/Charts/issues/852) -- Make ChartXAxisRenderer calculate labelsWidth based on string output by custom ChartXAxisValueFormatter [\#851](https://github.com/danielgindi/Charts/issues/851) -- Zooming an already zoomed view [\#850](https://github.com/danielgindi/Charts/issues/850) -- BarChart adds double x axis [\#849](https://github.com/danielgindi/Charts/issues/849) -- Remove text above dot in iOS Charts [\#848](https://github.com/danielgindi/Charts/issues/848) -- how to start graph from \(0,0\) points instead of 60 on y-Axis? [\#846](https://github.com/danielgindi/Charts/issues/846) -- Change dataSet axis dependency [\#845](https://github.com/danielgindi/Charts/issues/845) -- integrate native chart display incorrectly [\#842](https://github.com/danielgindi/Charts/issues/842) -- How can I draw bubble charts in swift project. [\#841](https://github.com/danielgindi/Charts/issues/841) -- Making HorizontalBarChartView scrolling vertically [\#839](https://github.com/danielgindi/Charts/issues/839) -- custom BallonMaker text [\#838](https://github.com/danielgindi/Charts/issues/838) -- Horizontal zoom in line chart [\#837](https://github.com/danielgindi/Charts/issues/837) -- ScatterChart - Is it possible to create a background color like this? [\#835](https://github.com/danielgindi/Charts/issues/835) -- How to create Stacked Bar Chart and Grouped Bar Chart [\#834](https://github.com/danielgindi/Charts/issues/834) -- fatal error: unexpectedly found nil while unwrapping an Optional value error when I set barChartView.noDataText [\#833](https://github.com/danielgindi/Charts/issues/833) -- Can I change fonts of labels on x And y axis in a bar graph. [\#832](https://github.com/danielgindi/Charts/issues/832) -- LineChartView avoid painting 0 values [\#830](https://github.com/danielgindi/Charts/issues/830) -- \[Feature\] Double-tap Gesture [\#829](https://github.com/danielgindi/Charts/issues/829) -- How to draw a rectangle,or how to get the last point's CGPoint? [\#827](https://github.com/danielgindi/Charts/issues/827) -- Changing width of the bar in bar chart [\#820](https://github.com/danielgindi/Charts/issues/820) -- The return value is a problem with the calculateMinimumRadiusForSpacedSlice method [\#819](https://github.com/danielgindi/Charts/issues/819) -- import Charts: Error No Such Module Charts? [\#818](https://github.com/danielgindi/Charts/issues/818) -- Can we define minor and major grid lines 
with specification like \(line color, line thickness, on/off \)? [\#817](https://github.com/danielgindi/Charts/issues/817) -- LineChart Delegate for line values [\#816](https://github.com/danielgindi/Charts/issues/816) -- Linechart X Labels overlap feature [\#813](https://github.com/danielgindi/Charts/issues/813) -- Can we support 2 more than y scales/ multiple Y axis ? [\#812](https://github.com/danielgindi/Charts/issues/812) -- Codesign error to physical device on latest [\#810](https://github.com/danielgindi/Charts/issues/810) -- Programatically scroll to end of line chart [\#809](https://github.com/danielgindi/Charts/issues/809) -- BalloonMarker - display X data [\#808](https://github.com/danielgindi/Charts/issues/808) -- multiple datasets with different x-values in chart [\#807](https://github.com/danielgindi/Charts/issues/807) -- Will ios-charts supoprt non-uniform data [\#806](https://github.com/danielgindi/Charts/issues/806) -- Not able to build for iPhone 6 [\#805](https://github.com/danielgindi/Charts/issues/805) -- Gap issues on latest version [\#804](https://github.com/danielgindi/Charts/issues/804) -- Error in 'ChartPlatform.swift' while compiling : Expected \#else or \#endif at the end of configuration block [\#803](https://github.com/danielgindi/Charts/issues/803) -- In iOS-Chart how to hide the x and y axis and all the grid lines. [\#801](https://github.com/danielgindi/Charts/issues/801) -- Create Chart from data in Firebase db [\#800](https://github.com/danielgindi/Charts/issues/800) -- How to make the chart and the other chart with the same translation [\#799](https://github.com/danielgindi/Charts/issues/799) -- Color of crosshairs? [\#796](https://github.com/danielgindi/Charts/issues/796) -- How to make horizontal dotted line to solid line same as vertical line. [\#793](https://github.com/danielgindi/Charts/issues/793) -- ios 8.1 fatal error:value failed to bridge from Swift type to a Objective-C type [\#792](https://github.com/danielgindi/Charts/issues/792) -- xAxis end label is cutting down in Line chart [\#791](https://github.com/danielgindi/Charts/issues/791) -- Is there a way to have multi line labels in x axis. [\#790](https://github.com/danielgindi/Charts/issues/790) -- help! [\#788](https://github.com/danielgindi/Charts/issues/788) -- Positioning on changing of the screen orientation [\#786](https://github.com/danielgindi/Charts/issues/786) -- Scatter chart data set color not working [\#784](https://github.com/danielgindi/Charts/issues/784) -- fatal error: value failed to bridge from Swift type to a Objective-C type [\#783](https://github.com/danielgindi/Charts/issues/783) -- Error on RadarChart \(drawFilledEnabled set to true\) [\#760](https://github.com/danielgindi/Charts/issues/760) -- Can't set x axis offset [\#677](https://github.com/danielgindi/Charts/issues/677) -- Right Y-Axis values displaying incorrectly in LineChartDemo [\#665](https://github.com/danielgindi/Charts/issues/665) -- Y - Axis Values stick together [\#608](https://github.com/danielgindi/Charts/issues/608) -- Charts over scrollview not scrolling in iPad only [\#550](https://github.com/danielgindi/Charts/issues/550) -- Stepped line charts [\#539](https://github.com/danielgindi/Charts/issues/539) -- Line chart circle positions [\#535](https://github.com/danielgindi/Charts/issues/535) -- Y-Axis values "stick together" occasionally [\#469](https://github.com/danielgindi/Charts/issues/469) -- Feature : initial display of the graph [\#468](https://github.com/danielgindi/Charts/issues/468) -- Candle Stick not filled make the stick and the gridline show within the candle [\#444](https://github.com/danielgindi/Charts/issues/444) -- Unit tests? ;\) [\#414](https://github.com/danielgindi/Charts/issues/414) -- How to draw a line only for the 5th value of dataset along x axis? [\#409](https://github.com/danielgindi/Charts/issues/409) -- Data Showing 0 and 1 only in y-axis if array contains only 0.0 double values. [\#338](https://github.com/danielgindi/Charts/issues/338) -- Extending lines between data points when zoomed and panning [\#330](https://github.com/danielgindi/Charts/issues/330) -- lowestVisibleXIndex never gets zero after zooming out [\#294](https://github.com/danielgindi/Charts/issues/294) -- on candle graph, when the candle is small then its not showing [\#281](https://github.com/danielgindi/Charts/issues/281) -- Bar Chart \> Range bar [\#100](https://github.com/danielgindi/Charts/issues/100) -- General discussion & news [\#92](https://github.com/danielgindi/Charts/issues/92) -- Core Data interfacing? [\#15](https://github.com/danielgindi/Charts/issues/15) - -**Merged pull requests:** - -- remove duplicated statement [\#894](https://github.com/danielgindi/Charts/pull/894) ([liuxuan30](https://github.com/liuxuan30)) -- Add new pie chart renderer with polyline indicate [\#869](https://github.com/danielgindi/Charts/pull/869) ([wjacker](https://github.com/wjacker)) -- Add a Gitter chat badge to README.md [\#861](https://github.com/danielgindi/Charts/pull/861) ([gitter-badger](https://github.com/gitter-badger)) -- Type bug in PieChartData [\#847](https://github.com/danielgindi/Charts/pull/847) ([leoMehlig](https://github.com/leoMehlig)) -- Supporting borders on bars, Fixes issue \#822 [\#844](https://github.com/danielgindi/Charts/pull/844) ([AndreasIgelCC](https://github.com/AndreasIgelCC)) -- Update Readme [\#828](https://github.com/danielgindi/Charts/pull/828) ([PhilJay](https://github.com/PhilJay)) -- Keep position on rotation [\#824](https://github.com/danielgindi/Charts/pull/824) ([leoMehlig](https://github.com/leoMehlig)) -- Set code signing identity for iOS targets [\#811](https://github.com/danielgindi/Charts/pull/811) ([krbarnes](https://github.com/krbarnes)) -- Add trailing newline for preprocessor statement [\#795](https://github.com/danielgindi/Charts/pull/795) ([boourns](https://github.com/boourns)) - -## [v2.2.3](https://github.com/danielgindi/Charts/tree/v2.2.3) (2016-02-29) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.2.2...v2.2.3) - -**Closed issues:** - -- How to create the chartmarker with swift? [\#776](https://github.com/danielgindi/Charts/issues/776) -- CombinedChartView: Wrong positions of bars when using multiple Bar and Graph -Datasets [\#775](https://github.com/danielgindi/Charts/issues/775) -- Getting co-ordinates of all plotted points in LineChartView [\#774](https://github.com/danielgindi/Charts/issues/774) -- Multiline label on xAxis cutting off [\#773](https://github.com/danielgindi/Charts/issues/773) -- Can't set ChartViewBase's data property back to nil to clear out data [\#771](https://github.com/danielgindi/Charts/issues/771) -- How to set position label radar chart. in Swift . [\#770](https://github.com/danielgindi/Charts/issues/770) -- How to control which entries on xAxis be shown? [\#768](https://github.com/danielgindi/Charts/issues/768) -- Tests failing after startAtZero was removed [\#767](https://github.com/danielgindi/Charts/issues/767) -- When a value repeats, bars are not showed [\#766](https://github.com/danielgindi/Charts/issues/766) -- Proposal: shall we unify yAxis.entries and yAxis.axisRange to have same max and min value? [\#763](https://github.com/danielgindi/Charts/issues/763) -- Ability to set linechart with fixed amount of x values shown and pan to other data points [\#762](https://github.com/danielgindi/Charts/issues/762) -- PieChart setMaxAngle [\#757](https://github.com/danielgindi/Charts/issues/757) -- Simply not installing [\#749](https://github.com/danielgindi/Charts/issues/749) -- Line charts have unintended breaks when next or previous point not visible. [\#748](https://github.com/danielgindi/Charts/issues/748) -- Remove border around linechart with gradient fill [\#747](https://github.com/danielgindi/Charts/issues/747) -- Old graphics not removed when adding new data [\#745](https://github.com/danielgindi/Charts/issues/745) -- Display values outside of the piechart [\#743](https://github.com/danielgindi/Charts/issues/743) -- Cubic line charts don't get filled correctly if data doesn't start at index 0 [\#711](https://github.com/danielgindi/Charts/issues/711) -- Center text vertically [\#682](https://github.com/danielgindi/Charts/issues/682) -- Animated moveViewToX\(\) [\#318](https://github.com/danielgindi/Charts/issues/318) -- Any chance of porting this to OSX? [\#43](https://github.com/danielgindi/Charts/issues/43) - -**Merged pull requests:** - -- Add "Toggle Data" option to demo charts. \(\#771 Support\) [\#781](https://github.com/danielgindi/Charts/pull/781) ([ospr](https://github.com/ospr)) -- Add missing UIKit imports for iOS 7 [\#780](https://github.com/danielgindi/Charts/pull/780) ([asmarques](https://github.com/asmarques)) -- Feature \#539 Stepped line charts [\#778](https://github.com/danielgindi/Charts/pull/778) ([ezamagni](https://github.com/ezamagni)) -- Make ChartViewBase's \_data optional. \(Fixes \#771\) [\#772](https://github.com/danielgindi/Charts/pull/772) ([ospr](https://github.com/ospr)) -- Add Carthage compatibility badge [\#769](https://github.com/danielgindi/Charts/pull/769) ([Bogidon](https://github.com/Bogidon)) -- update cocoapods url [\#755](https://github.com/danielgindi/Charts/pull/755) ([stevenedds](https://github.com/stevenedds)) -- add ci status [\#752](https://github.com/danielgindi/Charts/pull/752) ([petester42](https://github.com/petester42)) -- Correct the spelling of CocoaPods in README [\#751](https://github.com/danielgindi/Charts/pull/751) ([ReadmeCritic](https://github.com/ReadmeCritic)) -- LineChartRenderer context bug [\#746](https://github.com/danielgindi/Charts/pull/746) ([leoMehlig](https://github.com/leoMehlig)) -- Fix for cubic line chart fill when charts that don't start at x-index 0 \#711 [\#712](https://github.com/danielgindi/Charts/pull/712) ([gunterhager](https://github.com/gunterhager)) -- add support for lineCap setting for line chart [\#658](https://github.com/danielgindi/Charts/pull/658) ([liuxuan30](https://github.com/liuxuan30)) - -## [v2.2.2](https://github.com/danielgindi/Charts/tree/v2.2.2) (2016-02-09) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.2.1...v2.2.2) - -**Fixed bugs:** - -- Using BarChartDataSet default initializer causes a crash [\#734](https://github.com/danielgindi/Charts/issues/734) - -**Closed issues:** - -- Display dataSet labels on axis for horizontal bar [\#741](https://github.com/danielgindi/Charts/issues/741) -- Getting x,y values of points in LineChart [\#739](https://github.com/danielgindi/Charts/issues/739) -- Module 'Realm' not found in v2.2.1 [\#735](https://github.com/danielgindi/Charts/issues/735) -- cannot compile ios charts because of Ream environment missing. [\#733](https://github.com/danielgindi/Charts/issues/733) -- Issue in valueFormatter [\#732](https://github.com/danielgindi/Charts/issues/732) -- Multi colors for linechart's circles [\#730](https://github.com/danielgindi/Charts/issues/730) -- LineChartData omits and misaligns values when data isn't continuous [\#728](https://github.com/danielgindi/Charts/issues/728) -- Apache license and correct attribution in an iOS app? [\#678](https://github.com/danielgindi/Charts/issues/678) - -## [v2.2.1](https://github.com/danielgindi/Charts/tree/v2.2.1) (2016-02-01) -[Full Changelog](https://github.com/danielgindi/Charts/compare/2.2.1...v2.2.1) - -## [2.2.1](https://github.com/danielgindi/Charts/tree/2.2.1) (2016-02-01) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.2.0...2.2.1) - -**Fixed bugs:** - -- Can't set hole color to nil for Pie Chart [\#646](https://github.com/danielgindi/Charts/issues/646) - -**Closed issues:** - -- X-Axis at bottom of chart? [\#727](https://github.com/danielgindi/Charts/issues/727) -- 2.2.0 not published yet [\#723](https://github.com/danielgindi/Charts/issues/723) -- Highlight selected line by changing line width or line color [\#721](https://github.com/danielgindi/Charts/issues/721) -- Draw a Line that connects dots in Scatter Chart \(Simulate Line Chart not equidistant\) [\#720](https://github.com/danielgindi/Charts/issues/720) -- drawCubicEnabled performance issues [\#717](https://github.com/danielgindi/Charts/issues/717) -- how to disable zooming of graph on double click? [\#716](https://github.com/danielgindi/Charts/issues/716) -- Convert it to percent bar graph system [\#674](https://github.com/danielgindi/Charts/issues/674) -- Refresh charts view when the data change [\#672](https://github.com/danielgindi/Charts/issues/672) -- The most top label of ChartYAxis doesn't render which seems a bug. [\#647](https://github.com/danielgindi/Charts/issues/647) -- RadarChart animation [\#574](https://github.com/danielgindi/Charts/issues/574) -- Having the area below a line graph be gradient layer instead of background color [\#186](https://github.com/danielgindi/Charts/issues/186) - -**Merged pull requests:** - -- Update podspec for realm and 2.2.0 [\#725](https://github.com/danielgindi/Charts/pull/725) ([petester42](https://github.com/petester42)) - -## [v2.2.0](https://github.com/danielgindi/Charts/tree/v2.2.0) (2016-01-26) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.6...v2.2.0) - -**Fixed bugs:** - -- ChartDataSet calcYValueSum\(\) bug [\#604](https://github.com/danielgindi/Charts/issues/604) - -**Closed issues:** - -- Realm module not found when using a static library of Realm in my pod project in Objective-C [\#714](https://github.com/danielgindi/Charts/issues/714) -- how to get a custom legend [\#710](https://github.com/danielgindi/Charts/issues/710) -- I can't change the default grey background on the line chart [\#706](https://github.com/danielgindi/Charts/issues/706) -- I couldn't find Charts.xcodeproj [\#705](https://github.com/danielgindi/Charts/issues/705) -- Background Colour Changes [\#701](https://github.com/danielgindi/Charts/issues/701) -- Continuing the last closed \#695 [\#700](https://github.com/danielgindi/Charts/issues/700) -- Realm error [\#699](https://github.com/danielgindi/Charts/issues/699) -- Grid with constant width cells [\#697](https://github.com/danielgindi/Charts/issues/697) -- Pie chart is too small in tableview header view [\#696](https://github.com/danielgindi/Charts/issues/696) -- The delegate method is not getting called [\#695](https://github.com/danielgindi/Charts/issues/695) -- Not compatible with app extensions as a framework [\#693](https://github.com/danielgindi/Charts/issues/693) -- Set label for each column in group bar chart [\#691](https://github.com/danielgindi/Charts/issues/691) -- How to custom XAxis [\#689](https://github.com/danielgindi/Charts/issues/689) -- Need Help to setup this library on application with Objective C\(No auto layout\) with deployment target iOS 7.0 [\#688](https://github.com/danielgindi/Charts/issues/688) -- RadarChartView - Unknown type name [\#687](https://github.com/danielgindi/Charts/issues/687) -- How to make CandleStickChart and BarChart do the same action [\#685](https://github.com/danielgindi/Charts/issues/685) -- Issue with x-axis fixed label width [\#684](https://github.com/danielgindi/Charts/issues/684) -- Can I package the project in a dynamic library \(.framework\)? [\#681](https://github.com/danielgindi/Charts/issues/681) -- Dynamic LineChartView [\#680](https://github.com/danielgindi/Charts/issues/680) -- Horizontal Bar Chart Rounding [\#676](https://github.com/danielgindi/Charts/issues/676) -- Line Chart Highlight Styling [\#671](https://github.com/danielgindi/Charts/issues/671) -- Allow control of circle line width in Line Chart. [\#669](https://github.com/danielgindi/Charts/issues/669) -- Programatically highlight a data point in line chart [\#668](https://github.com/danielgindi/Charts/issues/668) -- Question: X-Axis set range of displayed entries, LineChart [\#667](https://github.com/danielgindi/Charts/issues/667) -- "No such module" error for archive with custom configuration in objc project. [\#664](https://github.com/danielgindi/Charts/issues/664) -- How to run this chart in iOS7? [\#663](https://github.com/danielgindi/Charts/issues/663) -- draw only the maximum and minimum values on the LineChartView [\#662](https://github.com/danielgindi/Charts/issues/662) -- Combine horizontal bar chart and line chart [\#661](https://github.com/danielgindi/Charts/issues/661) -- Can't import charts in Swift [\#659](https://github.com/danielgindi/Charts/issues/659) -- Realtime data [\#657](https://github.com/danielgindi/Charts/issues/657) -- xcode7.2 iOS 9 crash [\#656](https://github.com/danielgindi/Charts/issues/656) -- draw line chart with Gradient background [\#653](https://github.com/danielgindi/Charts/issues/653) -- Draw Straight Line on Line Chart with 2 fingers and show the Gradient of it [\#652](https://github.com/danielgindi/Charts/issues/652) -- Add To existing project and that too for iOS 7 [\#650](https://github.com/danielgindi/Charts/issues/650) -- xcode 7.1 error at xctest [\#644](https://github.com/danielgindi/Charts/issues/644) -- How to work out this in objective c [\#642](https://github.com/danielgindi/Charts/issues/642) -- 【StackedBarChartView】How to handle 0? [\#637](https://github.com/danielgindi/Charts/issues/637) -- Not able to archive build : Command failed due to signal: Segmentation fault: 11 [\#634](https://github.com/danielgindi/Charts/issues/634) -- Xcode7.1.1 contains error [\#633](https://github.com/danielgindi/Charts/issues/633) -- ChartDataSet's entryCount computed property raises a signal when \_yVals is nil [\#631](https://github.com/danielgindi/Charts/issues/631) -- Not able to set custom class as a BarChartViewController in objective c [\#628](https://github.com/danielgindi/Charts/issues/628) -- I want to know the project name - swift. h class of how to generate [\#627](https://github.com/danielgindi/Charts/issues/627) -- LineChart xAxis can't match the point [\#626](https://github.com/danielgindi/Charts/issues/626) -- set width of highlight in pie [\#625](https://github.com/danielgindi/Charts/issues/625) -- what's wrong with:\_OBJC\_CLASS\_$\_\_TtC6Charts13LineChartView [\#623](https://github.com/danielgindi/Charts/issues/623) -- How to draw a LineChartDataSet skipping certain data points [\#622](https://github.com/danielgindi/Charts/issues/622) -- Show % Percentage value with Legend data [\#621](https://github.com/danielgindi/Charts/issues/621) -- \[Enhancement\] avoidFirstLastClipping should keep the labels centered [\#619](https://github.com/danielgindi/Charts/issues/619) -- yAxis label shows only when i touch the view [\#618](https://github.com/danielgindi/Charts/issues/618) -- Legend colors not correct [\#617](https://github.com/danielgindi/Charts/issues/617) -- \[suggestion\] Warning when wrong ChartDataSet is used for view [\#616](https://github.com/danielgindi/Charts/issues/616) -- How to make the chart and the other chart with the same action [\#615](https://github.com/danielgindi/Charts/issues/615) -- touchesEnded event in BarChartView not called [\#613](https://github.com/danielgindi/Charts/issues/613) -- I put the deployment of XCODE target to 8.0 is an error, but change to 8.3 won't go wrong, what's the matter? [\#612](https://github.com/danielgindi/Charts/issues/612) -- why drawValues has some condition which uses break, some uses continue? [\#611](https://github.com/danielgindi/Charts/issues/611) -- Real Time Data and Moving X happens automatically ? [\#610](https://github.com/danielgindi/Charts/issues/610) -- A way to add data to chart data entries in real time ? [\#609](https://github.com/danielgindi/Charts/issues/609) -- Min and max number of horizontal lines [\#603](https://github.com/danielgindi/Charts/issues/603) -- Pie Chart only one Legend data is visible [\#602](https://github.com/danielgindi/Charts/issues/602) -- Myproject-swift.h has not founded in my project why?? [\#599](https://github.com/danielgindi/Charts/issues/599) -- Charts pulled from cocoapods is still of version 2.1.3 and it has compile errors against Swift 2.0 [\#598](https://github.com/danielgindi/Charts/issues/598) -- Fetch Stack Label at the click of the stack bar in the bar chart [\#596](https://github.com/danielgindi/Charts/issues/596) -- Cannot load underlying module for 'XCTest' when i am using charts in xcode7.1 [\#595](https://github.com/danielgindi/Charts/issues/595) -- setLabelsToSkip does not seem to function properly [\#594](https://github.com/danielgindi/Charts/issues/594) -- Work around for scalable xaxis for line chart [\#593](https://github.com/danielgindi/Charts/issues/593) -- unknown class Issue [\#592](https://github.com/danielgindi/Charts/issues/592) -- Selective fill colors on LineChartView [\#591](https://github.com/danielgindi/Charts/issues/591) -- how to set the YAxis or XAxis for custom value [\#590](https://github.com/danielgindi/Charts/issues/590) -- Finger drawing \(draw values into the chart with touch-gesture\) implemented? [\#589](https://github.com/danielgindi/Charts/issues/589) -- how to limit the YAxis Label's width? [\#588](https://github.com/danielgindi/Charts/issues/588) -- how to combine chart as follows [\#587](https://github.com/danielgindi/Charts/issues/587) -- no data available [\#585](https://github.com/danielgindi/Charts/issues/585) -- Is there a way to add arrows to highlight line? [\#584](https://github.com/danielgindi/Charts/issues/584) -- Getting question \(?\) mark while importing the library. How to get it resolved [\#583](https://github.com/danielgindi/Charts/issues/583) -- Mixed Font Style for Line Chart of X-Axis [\#581](https://github.com/danielgindi/Charts/issues/581) -- How to remove background gridlines from Bar Chart [\#579](https://github.com/danielgindi/Charts/issues/579) -- Question: Gesture Detection [\#578](https://github.com/danielgindi/Charts/issues/578) -- Crash originating in ChartViewPortHandler [\#576](https://github.com/danielgindi/Charts/issues/576) -- Add gaps in LineChart [\#572](https://github.com/danielgindi/Charts/issues/572) -- Cannot call getBarBounds from objective-c [\#570](https://github.com/danielgindi/Charts/issues/570) -- issue with Bar width [\#569](https://github.com/danielgindi/Charts/issues/569) -- UIPanGesture blocked while zoomed out completely [\#566](https://github.com/danielgindi/Charts/issues/566) -- Using Charts library for real-time plotting [\#565](https://github.com/danielgindi/Charts/issues/565) -- iOS-Charts not working on Jenkins [\#564](https://github.com/danielgindi/Charts/issues/564) -- Swift 2 \(Xcode 7\) Bad address on accessing chart view [\#563](https://github.com/danielgindi/Charts/issues/563) -- Custom offsets [\#562](https://github.com/danielgindi/Charts/issues/562) -- iOS 7 && Xcode 7.1.1 build not success, 'Charts' Module no found [\#560](https://github.com/danielgindi/Charts/issues/560) -- ChartYAxisValueFormatter in iOS [\#559](https://github.com/danielgindi/Charts/issues/559) -- can i add this? [\#557](https://github.com/danielgindi/Charts/issues/557) -- Problem uploading the archive. [\#556](https://github.com/danielgindi/Charts/issues/556) -- A strange issue when the APP second launch in debug mode [\#554](https://github.com/danielgindi/Charts/issues/554) -- Auto-adjusting graph scale on moving [\#553](https://github.com/danielgindi/Charts/issues/553) -- Bar Chart view group in Swift [\#551](https://github.com/danielgindi/Charts/issues/551) -- how to change the bar width [\#549](https://github.com/danielgindi/Charts/issues/549) -- Calculating space \(in px\) between two points [\#548](https://github.com/danielgindi/Charts/issues/548) -- CocoaPods can only install Charts with Version `2.1.3` [\#547](https://github.com/danielgindi/Charts/issues/547) -- App didn't started with Charts [\#546](https://github.com/danielgindi/Charts/issues/546) -- Setting custom values on top of bar chart [\#545](https://github.com/danielgindi/Charts/issues/545) -- Issues submitting app to Apple store [\#544](https://github.com/danielgindi/Charts/issues/544) -- Guidance on scrollable/pannable charts [\#543](https://github.com/danielgindi/Charts/issues/543) -- Line chart in tableview cell [\#542](https://github.com/danielgindi/Charts/issues/542) -- center lineChart value label to circle [\#541](https://github.com/danielgindi/Charts/issues/541) -- Use LineChartView create chartview will not slide, [\#540](https://github.com/danielgindi/Charts/issues/540) -- Getting some interesting errors when trying to upload our project to ITC with the latest ios-charts. [\#538](https://github.com/danielgindi/Charts/issues/538) -- Running demo direct error, this is how it happened [\#536](https://github.com/danielgindi/Charts/issues/536) -- StackLabels [\#534](https://github.com/danielgindi/Charts/issues/534) -- Legend at bottom of graph show on more than one line. [\#532](https://github.com/danielgindi/Charts/issues/532) -- Do we have any static library for ios-charts? [\#531](https://github.com/danielgindi/Charts/issues/531) -- Highlight a label in xAxis [\#530](https://github.com/danielgindi/Charts/issues/530) -- BalloonMarker shows float number with many digits after '.' [\#529](https://github.com/danielgindi/Charts/issues/529) -- Get the visible max and min yAxis values [\#528](https://github.com/danielgindi/Charts/issues/528) -- Scale and displacement by code [\#527](https://github.com/danielgindi/Charts/issues/527) -- My own app is crashed and got error is fatal error: value failed to bridge from Swift type to a Objective-C type [\#525](https://github.com/danielgindi/Charts/issues/525) -- if I want to set the RadarLabel like this! [\#524](https://github.com/danielgindi/Charts/issues/524) -- Pie Chart Legends Missing with the dynamically filled data. [\#518](https://github.com/danielgindi/Charts/issues/518) -- Resize chart due to data update [\#517](https://github.com/danielgindi/Charts/issues/517) -- How to detect end of chart event? [\#508](https://github.com/danielgindi/Charts/issues/508) -- Cannot distribute inhouse build with ios-charts library embedded to my project [\#486](https://github.com/danielgindi/Charts/issues/486) -- Excessive Printing to Console [\#417](https://github.com/danielgindi/Charts/issues/417) -- Module is not extensible [\#357](https://github.com/danielgindi/Charts/issues/357) - -**Merged pull requests:** - -- Activate require app extension safe API to be able to use library inside an app extension [\#708](https://github.com/danielgindi/Charts/pull/708) ([ghost](https://github.com/ghost)) -- fix code indent problem in ChartYAxisRendererRadarChart, ChartYAxisRenderer, BarChartDataSet, RadarChartView [\#675](https://github.com/danielgindi/Charts/pull/675) ([liuxuan30](https://github.com/liuxuan30)) -- add an option to set line cap of axis grid line [\#660](https://github.com/danielgindi/Charts/pull/660) ([mconintet](https://github.com/mconintet)) -- Fix minor typo in BarLineChartViewBase [\#651](https://github.com/danielgindi/Charts/pull/651) ([patrickreynolds](https://github.com/patrickreynolds)) -- Stop axis labels duplicating. \#315 \[Pending squash and cleanup\] [\#648](https://github.com/danielgindi/Charts/pull/648) ([noais](https://github.com/noais)) -- Adapted ChartLegendRenderer class to upcoming Swift 3 changes and improved code readability [\#643](https://github.com/danielgindi/Charts/pull/643) ([zntfdr](https://github.com/zntfdr)) -- Remove verbose semicolons [\#639](https://github.com/danielgindi/Charts/pull/639) ([AntiMoron](https://github.com/AntiMoron)) -- Adds CI [\#636](https://github.com/danielgindi/Charts/pull/636) ([petester42](https://github.com/petester42)) -- Add missing images for bar chart tests [\#635](https://github.com/danielgindi/Charts/pull/635) ([petester42](https://github.com/petester42)) -- Use nil coalescing in ChartDataSet's entryCount \(Fixes \#631\) [\#632](https://github.com/danielgindi/Charts/pull/632) ([aarondaub](https://github.com/aarondaub)) -- add highlight circle for radar chart [\#630](https://github.com/danielgindi/Charts/pull/630) ([liuxuan30](https://github.com/liuxuan30)) -- Remove useless parentheses causing swift build error [\#614](https://github.com/danielgindi/Charts/pull/614) ([chanil1218](https://github.com/chanil1218)) -- Add change log file. [\#605](https://github.com/danielgindi/Charts/pull/605) ([skywinder](https://github.com/skywinder)) -- add initialize dataSets in setter [\#600](https://github.com/danielgindi/Charts/pull/600) ([liuxuan30](https://github.com/liuxuan30)) -- Bar chart tests [\#580](https://github.com/danielgindi/Charts/pull/580) ([alvesjtiago](https://github.com/alvesjtiago)) -- Make getBarBounds callable from Objective-C code \(Fixes \#570\) [\#571](https://github.com/danielgindi/Charts/pull/571) ([ghost](https://github.com/ghost)) -- round the float value before we cast to Int [\#558](https://github.com/danielgindi/Charts/pull/558) ([liuxuan30](https://github.com/liuxuan30)) - -## [v2.1.6](https://github.com/danielgindi/Charts/tree/v2.1.6) (2015-11-02) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.5...v2.1.6) - -**Implemented enhancements:** - -- X axis names visibility \(Rotation\) [\#61](https://github.com/danielgindi/Charts/issues/61) - -**Closed issues:** - -- hello,this library is very great!!! [\#523](https://github.com/danielgindi/Charts/issues/523) -- \[BUG\] highlight when triggering pan gesture in default scale not working [\#520](https://github.com/danielgindi/Charts/issues/520) -- Implementing Gestures [\#519](https://github.com/danielgindi/Charts/issues/519) -- Does ios-charts work for Mac Cocoa programming? [\#516](https://github.com/danielgindi/Charts/issues/516) -- No 'setHighlightPerTapEnabled\(boolean enabled\)' in iosCharts? [\#515](https://github.com/danielgindi/Charts/issues/515) -- This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release. [\#514](https://github.com/danielgindi/Charts/issues/514) -- How to set position of description? [\#512](https://github.com/danielgindi/Charts/issues/512) -- Can't update library to 2.1.5 by cocoapods [\#511](https://github.com/danielgindi/Charts/issues/511) -- How in your chart on the basis of the modified? [\#510](https://github.com/danielgindi/Charts/issues/510) -- How can I reset bargraph total width ? [\#509](https://github.com/danielgindi/Charts/issues/509) -- ComboChartView highlight [\#507](https://github.com/danielgindi/Charts/issues/507) -- Making a line chart set with images on the chart [\#506](https://github.com/danielgindi/Charts/issues/506) -- the text rotation (Cry for help) [\#505](https://github.com/danielgindi/Charts/issues/505) -- StackedBar Chart highlighting complete single bar [\#504](https://github.com/danielgindi/Charts/issues/504) -- LineChart crashes if no entries [\#496](https://github.com/danielgindi/Charts/issues/496) -- Background color and floats on Y axis. [\#495](https://github.com/danielgindi/Charts/issues/495) -- Facing problem while achieving the build on Xcode7 [\#492](https://github.com/danielgindi/Charts/issues/492) -- About method setCircleColor & setCircleHoleColor [\#491](https://github.com/danielgindi/Charts/issues/491) -- inner web lines missing. [\#490](https://github.com/danielgindi/Charts/issues/490) -- Positioning using screen points instead of xIndex [\#487](https://github.com/danielgindi/Charts/issues/487) -- Selectable marker view & images at Y axis [\#485](https://github.com/danielgindi/Charts/issues/485) -- Could you draw a discontinuous line? [\#484](https://github.com/danielgindi/Charts/issues/484) -- Using image as marker in the chart [\#483](https://github.com/danielgindi/Charts/issues/483) -- Line chart can set the position of the x axis, such as in the chart below [\#482](https://github.com/danielgindi/Charts/issues/482) -- ```xAxis.avoidFirstLastClippingEnabled=YES``` problem.Version 2.1.4a [\#479](https://github.com/danielgindi/Charts/issues/479) -- Zombie exception [\#477](https://github.com/danielgindi/Charts/issues/477) -- chartView does't overlay with dark color highlighted value in bar chart [\#449](https://github.com/danielgindi/Charts/issues/449) -- viewPortHandler.setMaximumScaleX not working for horizontal bar chart [\#256](https://github.com/danielgindi/Charts/issues/256) - -**Merged pull requests:** - -- Implemented support for rotated labels on the x-axis [\#513](https://github.com/danielgindi/Charts/pull/513) ([danielgindi](https://github.com/danielgindi)) -- update targets to build framework with same name [\#501](https://github.com/danielgindi/Charts/pull/501) ([petester42](https://github.com/petester42)) -- Adds test support without cocoapods [\#500](https://github.com/danielgindi/Charts/pull/500) ([petester42](https://github.com/petester42)) -- Fixed drag offset panning bug [\#498](https://github.com/danielgindi/Charts/pull/498) ([leoMehlig](https://github.com/leoMehlig)) -- Revert "BUGFIX:fix xAxis labels of bar chart" [\#497](https://github.com/danielgindi/Charts/pull/497) ([danielgindi](https://github.com/danielgindi)) -- if only line data exists and no other data, turn \_deltaX to 1.0 [\#493](https://github.com/danielgindi/Charts/pull/493) ([liuxuan30](https://github.com/liuxuan30)) -- BUGFIX:fix xAxis labels of bar chart [\#489](https://github.com/danielgindi/Charts/pull/489) ([AntiMoron](https://github.com/AntiMoron)) -- Fix issue related to PhilJay/MPAndroidChart\#1121 [\#488](https://github.com/danielgindi/Charts/pull/488) ([PhilJay](https://github.com/PhilJay)) -- Approved, pending styling: Fix Scroll issue when the graph is in a UITableView [\#464](https://github.com/danielgindi/Charts/pull/464) ([coupgar](https://github.com/coupgar)) -- Add ability to turn off antialias for grid lines [\#462](https://github.com/danielgindi/Charts/pull/462) ([vvit](https://github.com/vvit)) - -## [v2.1.5](https://github.com/danielgindi/Charts/tree/v2.1.5) (2015-10-15) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.4a...v2.1.5) - -**Fixed bugs:** - -- chart is scrolling to top when reach maxScaleY and try zoom in again [\#463](https://github.com/danielgindi/Charts/issues/463) -- Pie chart does not work well with separate animations on x and y axis simultaneously [\#456](https://github.com/danielgindi/Charts/issues/456) - -**Closed issues:** - -- YAxis size calculations [\#480](https://github.com/danielgindi/Charts/issues/480) -- Can't install app due to non matching architecture. [\#476](https://github.com/danielgindi/Charts/issues/476) -- compiling for iPhone4s gives error like \#344 [\#475](https://github.com/danielgindi/Charts/issues/475) -- Compilation issue [\#473](https://github.com/danielgindi/Charts/issues/473) -- Problem with marker in Swift [\#472](https://github.com/danielgindi/Charts/issues/472) -- Crash: function signature specialization \ of Charts.BarLineChartViewBase.calcModulus \(Charts.BarLineChartViewBase\)\(\) -\> \(\), line 444 [\#471](https://github.com/danielgindi/Charts/issues/471) -- Pinch to Zoom is not being disabled properly. [\#470](https://github.com/danielgindi/Charts/issues/470) -- how to draw a graph having x value but no values in y [\#467](https://github.com/danielgindi/Charts/issues/467) -- Why set barRect.size.height = bottom - top to be negative? [\#465](https://github.com/danielgindi/Charts/issues/465) -- swift 1.2 branch [\#459](https://github.com/danielgindi/Charts/issues/459) -- Has anyone meet the '\# has been removed from swift' problem under XCode version 7.0.1? [\#458](https://github.com/danielgindi/Charts/issues/458) -- Multiple negative-able values in Stack bar chart [\#455](https://github.com/danielgindi/Charts/issues/455) -- Limit Line Label Text Color [\#454](https://github.com/danielgindi/Charts/issues/454) -- problems using autoScaleMinMaxEnabled [\#453](https://github.com/danielgindi/Charts/issues/453) -- how to update the ios-charts in existing projects. [\#452](https://github.com/danielgindi/Charts/issues/452) -- Provide callbacks on ChartViewDelegate to better handle dragging, touch, etc [\#451](https://github.com/danielgindi/Charts/issues/451) -- moveViewToX problem [\#450](https://github.com/danielgindi/Charts/issues/450) -- bar width [\#448](https://github.com/danielgindi/Charts/issues/448) -- Can we show title of Axis? [\#447](https://github.com/danielgindi/Charts/issues/447) -- Make \_chart in CombinedChartRenderer internal [\#446](https://github.com/danielgindi/Charts/issues/446) -- Dynamic graph display [\#445](https://github.com/danielgindi/Charts/issues/445) -- Demo project is not working [\#443](https://github.com/danielgindi/Charts/issues/443) -- xcode 7 issue? - non-existent file for the CFBundleExecutable key [\#442](https://github.com/danielgindi/Charts/issues/442) -- Custom Y Axis entries with String values [\#441](https://github.com/danielgindi/Charts/issues/441) -- Change size of the view that contain the chart [\#440](https://github.com/danielgindi/Charts/issues/440) -- Label lines with different style, larger and not for all lines in grid [\#439](https://github.com/danielgindi/Charts/issues/439) -- Pie chart data labels not in correct position. [\#436](https://github.com/danielgindi/Charts/issues/436) -- Glitch while scrolling [\#430](https://github.com/danielgindi/Charts/issues/430) -- A field crash issue for highestVisibleXIndex [\#329](https://github.com/danielgindi/Charts/issues/329) -- Empty configuration over full configuration [\#308](https://github.com/danielgindi/Charts/issues/308) -- \[BarChart\] single dataSet + force groupSpace=0.8 leads to wrong xAxis label rendering and highlight [\#284](https://github.com/danielgindi/Charts/issues/284) -- Prebuilt Frameworks & Tagged Releases [\#217](https://github.com/danielgindi/Charts/issues/217) - -**Merged pull requests:** - -- Changed \_chart access modifier from private to internal [\#478](https://github.com/danielgindi/Charts/pull/478) ([AlBirdie](https://github.com/AlBirdie)) -- fixed noDataText and NoDataTextDescription texts ovelapping issue [\#457](https://github.com/danielgindi/Charts/pull/457) ([zntfdr](https://github.com/zntfdr)) -- Only alow scaling further if the user can still zoom \(Fixes \#437\) [\#438](https://github.com/danielgindi/Charts/pull/438) ([iangmaia](https://github.com/iangmaia)) -- Make the ChartXAxisRenderer more flexible: now possible to overwrite drawing the line or label of the ChartLimitLine [\#432](https://github.com/danielgindi/Charts/pull/432) ([pajai](https://github.com/pajai)) - -## [v2.1.4a](https://github.com/danielgindi/Charts/tree/v2.1.4a) (2015-10-02) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.4...v2.1.4a) - -**Fixed bugs:** - -- CGContextAddLineToPoint no current point. [\#419](https://github.com/danielgindi/Charts/issues/419) -- Crash by initialize\(\) of CombinedChartView [\#406](https://github.com/danielgindi/Charts/issues/406) -- Radar chart + Bar Line chart Base + startAtZeroEnabled = false + negative values [\#166](https://github.com/danielgindi/Charts/issues/166) - -**Closed issues:** - -- RadarChart \(spider web chart\) issue [\#435](https://github.com/danielgindi/Charts/issues/435) -- dyld\_fatal\_error [\#434](https://github.com/danielgindi/Charts/issues/434) -- Xcode 6.4 compilation errors [\#433](https://github.com/danielgindi/Charts/issues/433) -- Error: Can't build demo project with XCode Version 6.4 \(6E35b\) [\#431](https://github.com/danielgindi/Charts/issues/431) -- Custom ChartXAxisValueFormatter not Being Called with Data containing NSObjects [\#429](https://github.com/danielgindi/Charts/issues/429) -- Error Swift 2 - ChartViewBase.swift [\#428](https://github.com/danielgindi/Charts/issues/428) -- How to return xIndex that be selected in chart? [\#427](https://github.com/danielgindi/Charts/issues/427) -- always return 0 in chartValueSelected function [\#426](https://github.com/danielgindi/Charts/issues/426) -- Radar Chart can not open in Charts Demo project [\#424](https://github.com/danielgindi/Charts/issues/424) -- ScatterChartRenderer - create a custom shape [\#423](https://github.com/danielgindi/Charts/issues/423) -- How to add custom text to the diagram [\#421](https://github.com/danielgindi/Charts/issues/421) -- App/Xcode crashing when charts are loaded [\#410](https://github.com/danielgindi/Charts/issues/410) -- Max Y value sometimes get clipped [\#405](https://github.com/danielgindi/Charts/issues/405) -- Display X-axis and y-axis names and Can i display x axis values vertically [\#403](https://github.com/danielgindi/Charts/issues/403) -- How to show time values in horizontal Bar chart? [\#402](https://github.com/danielgindi/Charts/issues/402) -- ios 9 - xcode 7 [\#400](https://github.com/danielgindi/Charts/issues/400) -- bar chart with gradient [\#398](https://github.com/danielgindi/Charts/issues/398) -- Multiple Lines in LineChart. [\#397](https://github.com/danielgindi/Charts/issues/397) -- Line Graph error [\#396](https://github.com/danielgindi/Charts/issues/396) -- Charts running on Simulator only [\#381](https://github.com/danielgindi/Charts/issues/381) -- Multiple axis - line charts drawing [\#366](https://github.com/danielgindi/Charts/issues/366) -- Marker frame adjustment according to bounds [\#364](https://github.com/danielgindi/Charts/issues/364) -- Sequencing of legend titles [\#363](https://github.com/danielgindi/Charts/issues/363) -- Legend has only one label [\#361](https://github.com/danielgindi/Charts/issues/361) -- Can add the missing value support [\#355](https://github.com/danielgindi/Charts/issues/355) -- CombinedChartView line + bar [\#353](https://github.com/danielgindi/Charts/issues/353) -- drawFillEnabled in line chart bug? [\#351](https://github.com/danielgindi/Charts/issues/351) -- \[BUG\] highlighted bar animation on Y Axis for all bar charts is wrong and not same speed [\#349](https://github.com/danielgindi/Charts/issues/349) -- HELP : some problem never met about iOS-charts [\#341](https://github.com/danielgindi/Charts/issues/341) -- Multiple line Chart, same view [\#340](https://github.com/danielgindi/Charts/issues/340) -- Position Pie Chart over the View [\#337](https://github.com/danielgindi/Charts/issues/337) -- Having multiple colour bands with an area that changes dynamically over time [\#336](https://github.com/danielgindi/Charts/issues/336) -- Adding Large number of data points -- addEntry\(\) [\#333](https://github.com/danielgindi/Charts/issues/333) -- Can I implement this kind of chart with this library? [\#328](https://github.com/danielgindi/Charts/issues/328) -- iOS Chart Y-Axis High Limit [\#317](https://github.com/danielgindi/Charts/issues/317) -- how to place the Y axis label at the bottom of the chart? [\#314](https://github.com/danielgindi/Charts/issues/314) -- Real-time Charts [\#263](https://github.com/danielgindi/Charts/issues/263) -- Drawing circles for values on the radar chart [\#138](https://github.com/danielgindi/Charts/issues/138) - -**Merged pull requests:** - -- Start of pan gesture should not be cancelled by no drag [\#420](https://github.com/danielgindi/Charts/pull/420) ([niraj-rayalla](https://github.com/niraj-rayalla)) -- Allow the minimum offset to be customized [\#395](https://github.com/danielgindi/Charts/pull/395) ([icecrystal23](https://github.com/icecrystal23)) -- Add support for a legend above the chart [\#393](https://github.com/danielgindi/Charts/pull/393) ([icecrystal23](https://github.com/icecrystal23)) -- Add target for tvOS and get it to compile [\#392](https://github.com/danielgindi/Charts/pull/392) ([icecrystal23](https://github.com/icecrystal23)) -- be explicit on how to install 'Charts' when using CocoaPods since [\#376](https://github.com/danielgindi/Charts/pull/376) ([codeHatcher](https://github.com/codeHatcher)) - -## [v2.1.4](https://github.com/danielgindi/Charts/tree/v2.1.4) (2015-09-21) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.3...v2.1.4) - -**Fixed bugs:** - -- UIPanGestureRecognizer causes index out of bounds crash [\#327](https://github.com/danielgindi/Charts/issues/327) -- Radar chart radius is still affected by label size when label drawing is disabled [\#153](https://github.com/danielgindi/Charts/issues/153) -- XGrid not in sync for identical x values but different chart types [\#99](https://github.com/danielgindi/Charts/issues/99) - -**Closed issues:** - -- Xcode 7 and iOS 9 Support \(Deployment Target iOS 7.0\) [\#404](https://github.com/danielgindi/Charts/issues/404) -- Legend titles aren't printing if there are more than 5 [\#401](https://github.com/danielgindi/Charts/issues/401) -- Swift 2.0 branch not found [\#399](https://github.com/danielgindi/Charts/issues/399) -- Values are not drawn in the correct location when the y-axis does not start at zero [\#391](https://github.com/danielgindi/Charts/issues/391) -- Swift-2.0 branch runtime crashes after distributed on the TestFlight [\#390](https://github.com/danielgindi/Charts/issues/390) -- ios-charts Integration problem [\#389](https://github.com/danielgindi/Charts/issues/389) -- Can't change X-axis label color [\#387](https://github.com/danielgindi/Charts/issues/387) -- StackedBarChart in horizontal manner [\#384](https://github.com/danielgindi/Charts/issues/384) -- Add ios-charts to existing project in XCode 7 [\#383](https://github.com/danielgindi/Charts/issues/383) -- Xcode7 Swift 2.0 issue \[ChartSelectionDetail.swift\] [\#380](https://github.com/danielgindi/Charts/issues/380) -- Installing ios-charts in an existing project [\#379](https://github.com/danielgindi/Charts/issues/379) -- I upgraded my UXcode 7,I can't use charts framework. [\#378](https://github.com/danielgindi/Charts/issues/378) -- How to achieve 0 spacing between bars? [\#365](https://github.com/danielgindi/Charts/issues/365) -- Xcode 7.0 and Swift 2.0 issue [\#358](https://github.com/danielgindi/Charts/issues/358) -- Unable to run a demo [\#356](https://github.com/danielgindi/Charts/issues/356) -- Using Embedded Binaries giving build failed error in xcode 7 ? [\#354](https://github.com/danielgindi/Charts/issues/354) -- is there a object-c version this project? [\#352](https://github.com/danielgindi/Charts/issues/352) -- adding cross platform feature [\#350](https://github.com/danielgindi/Charts/issues/350) -- Some problems about CandleStickChart [\#348](https://github.com/danielgindi/Charts/issues/348) -- Some problems about CandleStickChart [\#347](https://github.com/danielgindi/Charts/issues/347) -- Pie chart is getting drawn again and again on rotation in iOS [\#346](https://github.com/danielgindi/Charts/issues/346) -- 对于高于限制线的点,我怎么改变点的样式和颜色呢? [\#345](https://github.com/danielgindi/Charts/issues/345) -- Swift-2.0 Branch Error [\#344](https://github.com/danielgindi/Charts/issues/344) -- Multiple lines [\#342](https://github.com/danielgindi/Charts/issues/342) -- Daniel are you really fit? [\#339](https://github.com/danielgindi/Charts/issues/339) -- For CandleStickChart, how can I limit according to the count of candles [\#334](https://github.com/danielgindi/Charts/issues/334) -- how can i disable the doubles? i only need the chat show int data [\#332](https://github.com/danielgindi/Charts/issues/332) -- Bug: Xcode 7 beta 5: dyld: Library not loaded: @rpath/Charts.framework/Charts [\#326](https://github.com/danielgindi/Charts/issues/326) -- Disappearing Line Segment when scrolling [\#325](https://github.com/danielgindi/Charts/issues/325) -- CombinedChart with BarChartData cuts the first and last bars in half [\#323](https://github.com/danielgindi/Charts/issues/323) -- Bug \(?\) in CandleStickChartRenderer when showing empty dataset among multiple datasets [\#320](https://github.com/danielgindi/Charts/issues/320) -- Xcode 7 Beta 6 print\(.. appendNewLine\) - Swift 2.0 branch [\#316](https://github.com/danielgindi/Charts/issues/316) -- Ability to disable legends completely [\#312](https://github.com/danielgindi/Charts/issues/312) -- BarChart draws additional horizontal grid lines when setting custom customAxisMax/labelCount [\#310](https://github.com/danielgindi/Charts/issues/310) -- Take selectionShift into account when displaying pie chart [\#309](https://github.com/danielgindi/Charts/issues/309) -- Line Chart Line is not drawing properly for the large yValues [\#307](https://github.com/danielgindi/Charts/issues/307) -- Zero valued slices overlap [\#305](https://github.com/danielgindi/Charts/issues/305) -- setVisibleXRangeMaximum working differently than expected [\#304](https://github.com/danielgindi/Charts/issues/304) -- MyProject-Swift.h header not found when embedding framework into ObjectiveC project [\#303](https://github.com/danielgindi/Charts/issues/303) -- Using NSNumberFormatter or .getBarBounds\(\) to Display Custom Values [\#302](https://github.com/danielgindi/Charts/issues/302) -- Unknown class \_TtC6Charts12BarChartView in Interface Builder file. [\#301](https://github.com/danielgindi/Charts/issues/301) -- Possible regression because of recent `startAtZeroEnabled` changes [\#300](https://github.com/danielgindi/Charts/issues/300) -- Axis titles? [\#299](https://github.com/danielgindi/Charts/issues/299) -- xcode 6.4 , Swift 1.2 build fail [\#298](https://github.com/danielgindi/Charts/issues/298) -- it has this problem "'\#' has been removed from Swift" in many places [\#296](https://github.com/danielgindi/Charts/issues/296) -- chartScaled not so useful without the touch location [\#295](https://github.com/danielgindi/Charts/issues/295) -- ChartMarker don't draw [\#293](https://github.com/danielgindi/Charts/issues/293) -- Multiple line charts on the same graph [\#292](https://github.com/danielgindi/Charts/issues/292) -- Release Version 2.1.3 on CocoaPods [\#289](https://github.com/danielgindi/Charts/issues/289) -- saveToCameraRoll strange behavior [\#288](https://github.com/danielgindi/Charts/issues/288) -- ios-charts for swift 2.0 cannot compile on XCode7 beta 5 - self.dynamicType.allocWithZone\(zone\) issue [\#287](https://github.com/danielgindi/Charts/issues/287) -- installing with cocoapods [\#283](https://github.com/danielgindi/Charts/issues/283) -- iOS 9 Won't Compile \(Also, no such module 'Charts'\) [\#282](https://github.com/danielgindi/Charts/issues/282) -- Allow to align the Legend! [\#279](https://github.com/danielgindi/Charts/issues/279) -- Demo chart for Swift? [\#278](https://github.com/danielgindi/Charts/issues/278) -- Cocoapods support [\#277](https://github.com/danielgindi/Charts/issues/277) -- ios-charts different plotting activity than MKAndroidChart [\#276](https://github.com/danielgindi/Charts/issues/276) -- Highlight Doest'n work properly on UIPageViewController in LineChart. [\#275](https://github.com/danielgindi/Charts/issues/275) -- command failed due to signal: Abort trap: 6 charts [\#271](https://github.com/danielgindi/Charts/issues/271) -- having hard time to put working on version iOS 7.1 [\#270](https://github.com/danielgindi/Charts/issues/270) -- Library not found while building application through distribution certificate [\#266](https://github.com/danielgindi/Charts/issues/266) -- Crash on one entry point in charts [\#265](https://github.com/danielgindi/Charts/issues/265) -- when add points dynamicly, scale is changeing, [\#264](https://github.com/danielgindi/Charts/issues/264) -- About Auto-scaling on axis [\#259](https://github.com/danielgindi/Charts/issues/259) -- \[CombinedChart\] Grouped Bars + line chart [\#252](https://github.com/danielgindi/Charts/issues/252) -- \*\*\* Announcements \*\*\* [\#236](https://github.com/danielgindi/Charts/issues/236) -- \[BUG\] xAxis label too long causes radar chart cannot render correctly [\#205](https://github.com/danielgindi/Charts/issues/205) - -**Merged pull requests:** - -- Allow setting maximum y-scale factor [\#388](https://github.com/danielgindi/Charts/pull/388) ([noais](https://github.com/noais)) -- Swift 2.0 [\#386](https://github.com/danielgindi/Charts/pull/386) ([danielgindi](https://github.com/danielgindi)) -- Fix default value of forceLabelsEnabled [\#360](https://github.com/danielgindi/Charts/pull/360) ([yas375](https://github.com/yas375)) -- Update BarLineChartViewBase.swift [\#359](https://github.com/danielgindi/Charts/pull/359) ([Ewg777](https://github.com/Ewg777)) -- combined chart - seems we should use same chartXMin and chartXMax even there is no bubble data [\#324](https://github.com/danielgindi/Charts/pull/324) ([liuxuan30](https://github.com/liuxuan30)) -- fix pie chart clipping [\#313](https://github.com/danielgindi/Charts/pull/313) ([petester42](https://github.com/petester42)) -- Changed Release signing configuration to "iOS Developer" to improve Carthage compatibility [\#297](https://github.com/danielgindi/Charts/pull/297) ([JaviSoto](https://github.com/JaviSoto)) -- Fixes xcode beta 5 compile errors [\#291](https://github.com/danielgindi/Charts/pull/291) ([petester42](https://github.com/petester42)) -- bump podspec to 2.1.3 [\#290](https://github.com/danielgindi/Charts/pull/290) ([petester42](https://github.com/petester42)) -- Minor refactor for BarLineChartViewBase [\#268](https://github.com/danielgindi/Charts/pull/268) ([liuxuan30](https://github.com/liuxuan30)) -- Enhanced label positioning at limit lines \(enum ChartLimitLabelPosition\) [\#243](https://github.com/danielgindi/Charts/pull/243) ([SvenMuc](https://github.com/SvenMuc)) - -## [v2.1.3](https://github.com/danielgindi/Charts/tree/v2.1.3) (2015-08-05) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.2...v2.1.3) - -**Closed issues:** - -- Limit Legend for combined charts [\#272](https://github.com/danielgindi/Charts/issues/272) -- Default zoom level at a position. [\#267](https://github.com/danielgindi/Charts/issues/267) -- drawValuesForWholeStackEnabled deprecated? [\#261](https://github.com/danielgindi/Charts/issues/261) -- Another Command failed due to signal: Segmentation fault: 11 [\#260](https://github.com/danielgindi/Charts/issues/260) -- moveViewToX [\#258](https://github.com/danielgindi/Charts/issues/258) -- How to add point dynamicly [\#257](https://github.com/danielgindi/Charts/issues/257) -- Real time graph - X-axis moving? [\#255](https://github.com/danielgindi/Charts/issues/255) -- 2.1.2 Not Yet in CocoaPods Master Repo [\#251](https://github.com/danielgindi/Charts/issues/251) -- Heads up [\#250](https://github.com/danielgindi/Charts/issues/250) -- Disable HorizontalHighlightIndicator on LineChart. [\#249](https://github.com/danielgindi/Charts/issues/249) -- double vision in the chart [\#245](https://github.com/danielgindi/Charts/issues/245) -- Can't find anything like "isWordWrapEnabled" in PieChart [\#244](https://github.com/danielgindi/Charts/issues/244) -- Grouped columns misplaced [\#242](https://github.com/danielgindi/Charts/issues/242) -- Swift2 upgrade problem "Redundant conformance of 'ChartDataEntry' to protocol 'Equatable'" [\#241](https://github.com/danielgindi/Charts/issues/241) -- App created by Archive cannot run on devices. [\#240](https://github.com/danielgindi/Charts/issues/240) -- What's the differences between setAxisMaximum and customAxisMax [\#239](https://github.com/danielgindi/Charts/issues/239) -- Problem importing framework to Xcode 6.4 in Swift Project [\#233](https://github.com/danielgindi/Charts/issues/233) -- PieChartData initialisers ambiguous when xVals parameter is nil [\#224](https://github.com/danielgindi/Charts/issues/224) -- \[BUG\] all-negative Stacked horizontal Bar Chart size is not correct [\#222](https://github.com/danielgindi/Charts/issues/222) -- \[BUG\] Bar Chart incorrect rendering for special data [\#214](https://github.com/danielgindi/Charts/issues/214) -- Projects using Charts [\#145](https://github.com/danielgindi/Charts/issues/145) -- Legend Height Adjustment [\#81](https://github.com/danielgindi/Charts/issues/81) -- Multiple legend entrys will be rendered outside of the view [\#80](https://github.com/danielgindi/Charts/issues/80) - -**Merged pull requests:** - -- Add a Code Hunt vote badge to README.md [\#262](https://github.com/danielgindi/Charts/pull/262) ([CodeHuntIO](https://github.com/CodeHuntIO)) -- Updated podspec [\#254](https://github.com/danielgindi/Charts/pull/254) ([petester42](https://github.com/petester42)) -- try to fix bar chart + Horizontal Bar chart wrong render + highlight position bug for issue \#214 and \#242. [\#248](https://github.com/danielgindi/Charts/pull/248) ([liuxuan30](https://github.com/liuxuan30)) - -## [v2.1.2](https://github.com/danielgindi/Charts/tree/v2.1.2) (2015-07-26) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.1...v2.1.2) - -## [v2.1.1](https://github.com/danielgindi/Charts/tree/v2.1.1) (2015-07-26) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.1.0...v2.1.1) - -**Fixed bugs:** - -- Render Crash Due to Rect NAN from rectValueToPixel in BarChartRenderer.swift [\#177](https://github.com/danielgindi/Charts/issues/177) -- Can we add nil values to a dataset yet? [\#113](https://github.com/danielgindi/Charts/issues/113) -- Incorrect chart view adjustment after moveViewtoX\(xIndex: Int\) [\#82](https://github.com/danielgindi/Charts/issues/82) -- Margin insets not changing during zoom when formatter changes output width [\#72](https://github.com/danielgindi/Charts/issues/72) -- Line chart crashes with a big float [\#62](https://github.com/danielgindi/Charts/issues/62) - -**Closed issues:** - -- App is crashing when line chart is scrolled into view and then back out. [\#238](https://github.com/danielgindi/Charts/issues/238) -- Demo Project: In BalloonMarker.swift : "Error: No such module 'charts' " XCode 6.4 [\#237](https://github.com/danielgindi/Charts/issues/237) -- How to draw Line segments in one Line Chart. [\#235](https://github.com/danielgindi/Charts/issues/235) -- How to disable the continuos selection in chart with swipe? [\#234](https://github.com/danielgindi/Charts/issues/234) -- Podspec 3 months old [\#231](https://github.com/danielgindi/Charts/issues/231) -- Setting background in Objective C [\#230](https://github.com/danielgindi/Charts/issues/230) -- ChartYAxis valueFormatter NSFormatter instead of NSNumberFormatter [\#228](https://github.com/danielgindi/Charts/issues/228) -- How to setup up y-axis with min, max value and a fixed step between the grid lines? [\#227](https://github.com/danielgindi/Charts/issues/227) -- What's the proper way to manually set chart's scale and scroll offset? [\#226](https://github.com/danielgindi/Charts/issues/226) -- How could you set the Y values at the bottom in LineChart? [\#223](https://github.com/danielgindi/Charts/issues/223) -- Is there guidance to beginner to use this? [\#220](https://github.com/danielgindi/Charts/issues/220) -- Chart's PanGesture conflicts with UITableView PanGesture [\#219](https://github.com/danielgindi/Charts/issues/219) -- \(swift-2.0 branch\) building Charts.xcodeproj fails \(exit code 65\) with Release configuration [\#218](https://github.com/danielgindi/Charts/issues/218) -- Crash on device - iOS 8.3 [\#216](https://github.com/danielgindi/Charts/issues/216) -- Remove dependencies warning [\#215](https://github.com/danielgindi/Charts/issues/215) -- Update Podspec to reflect commits since early May? [\#213](https://github.com/danielgindi/Charts/issues/213) -- \[BUG\]negative values rendering +highlight rect rendering not correct for stacked bar + stacked horizontal bar chart [\#212](https://github.com/danielgindi/Charts/issues/212) -- \[BUG\]postive bars in demo Stack BarChart Negative disappear after scrolling [\#211](https://github.com/danielgindi/Charts/issues/211) -- Horizontal bar chart in combined bar chart. [\#210](https://github.com/danielgindi/Charts/issues/210) -- Can I use this library in an objective-c project targeting iOS 7 & 8? [\#206](https://github.com/danielgindi/Charts/issues/206) -- When animating charts after reload, chart is shown fully drawn before animating. [\#204](https://github.com/danielgindi/Charts/issues/204) -- Array index out of range when removing entries from DataSet [\#203](https://github.com/danielgindi/Charts/issues/203) -- Issue while displaying the chart \(HorizontalBarChartView\) [\#202](https://github.com/danielgindi/Charts/issues/202) -- Charts stuttering when reloaded [\#201](https://github.com/danielgindi/Charts/issues/201) -- Scaling Yaxis [\#199](https://github.com/danielgindi/Charts/issues/199) -- Don't draw zero value label [\#197](https://github.com/danielgindi/Charts/issues/197) -- Library not loaded: @rpath/Charts.framework/Charts [\#196](https://github.com/danielgindi/Charts/issues/196) -- How can i get this chart? [\#195](https://github.com/danielgindi/Charts/issues/195) -- Crashing on adding the null value to and array [\#193](https://github.com/danielgindi/Charts/issues/193) -- ChartDataEntry not drawn after certain xIndex [\#190](https://github.com/danielgindi/Charts/issues/190) -- Highlight multiple values [\#187](https://github.com/danielgindi/Charts/issues/187) -- ChartData.removeEntryByXIndex removes the wrong entry [\#182](https://github.com/danielgindi/Charts/issues/182) -- Label on Limit Lines cause crash [\#181](https://github.com/danielgindi/Charts/issues/181) -- \[feature request\] render xAxis like yAxis style Namely from discrete way to continuous way [\#176](https://github.com/danielgindi/Charts/issues/176) -- Annotation label support? [\#175](https://github.com/danielgindi/Charts/issues/175) -- Multiple DataSet Error [\#174](https://github.com/danielgindi/Charts/issues/174) -- AddEntry issue in ChartData [\#173](https://github.com/danielgindi/Charts/issues/173) -- Bar Chart Bars Disappears On Zoom And Highlight Bars Don't Match [\#172](https://github.com/danielgindi/Charts/issues/172) -- Clearing all highlighted values [\#171](https://github.com/danielgindi/Charts/issues/171) -- BarChartView work with TableView [\#167](https://github.com/danielgindi/Charts/issues/167) -- Make scroll to graph without pinch [\#164](https://github.com/danielgindi/Charts/issues/164) -- When i set valueformatter , Have problem. [\#163](https://github.com/danielgindi/Charts/issues/163) -- Combined Chart With array of line charts [\#162](https://github.com/danielgindi/Charts/issues/162) -- Issues with chart rendering... [\#161](https://github.com/danielgindi/Charts/issues/161) -- How to set yAxis to normal number [\#160](https://github.com/danielgindi/Charts/issues/160) -- How to set yValue display 0 2 3 5 [\#159](https://github.com/danielgindi/Charts/issues/159) -- \[BUG\] \_yAxis.entries will not be cleaned up in computeAxisValues in radar chart [\#158](https://github.com/danielgindi/Charts/issues/158) -- \[feature request\] support fixed yAxis interval and xAxis labelCount [\#155](https://github.com/danielgindi/Charts/issues/155) -- app crashes at launch as in house release build on iPhone - but debugging is fine [\#154](https://github.com/danielgindi/Charts/issues/154) -- \[feature request\] enable legend view scrollable [\#151](https://github.com/danielgindi/Charts/issues/151) -- \[feature request\] support custom handler for gestures [\#148](https://github.com/danielgindi/Charts/issues/148) -- unsuccessful at installing for ios 7.0 [\#144](https://github.com/danielgindi/Charts/issues/144) -- cannot po swift local variable in my Objective-C project [\#143](https://github.com/danielgindi/Charts/issues/143) -- Real time line chart [\#142](https://github.com/danielgindi/Charts/issues/142) -- Bar chart some values \< 0 [\#141](https://github.com/danielgindi/Charts/issues/141) -- Any demo in swift ? [\#139](https://github.com/danielgindi/Charts/issues/139) -- compiling time costs 2-3 minutes after import swift code files, is it normal? [\#137](https://github.com/danielgindi/Charts/issues/137) -- iOS7 can't build success [\#136](https://github.com/danielgindi/Charts/issues/136) -- Warnings on the comments [\#135](https://github.com/danielgindi/Charts/issues/135) -- Still seeing undeclared UIColor, CGFloat error with latest code [\#133](https://github.com/danielgindi/Charts/issues/133) -- Error while drawing radar chart [\#132](https://github.com/danielgindi/Charts/issues/132) -- Cannot assign a value of type 'ChartLimitLabelPosition' to a value of type 'ChartLimitLine.ChartLimitLabelPosition' [\#131](https://github.com/danielgindi/Charts/issues/131) -- Data disappearing while zooming/panning when y-values are not ordered by x [\#130](https://github.com/danielgindi/Charts/issues/130) -- Cannot load underlying module for 'Charts' [\#129](https://github.com/danielgindi/Charts/issues/129) -- Any way to add/use image for xVals? [\#126](https://github.com/danielgindi/Charts/issues/126) -- Install with cocoapod into project supporting iOS 7 and later [\#125](https://github.com/danielgindi/Charts/issues/125) -- Lines clipping top and bottom with lineWidth \> 1 [\#123](https://github.com/danielgindi/Charts/issues/123) -- Candle chart - make the shadow same color as an increasing/decreasing candle color [\#122](https://github.com/danielgindi/Charts/issues/122) -- Down-casted Array element failed to match the target type [\#121](https://github.com/danielgindi/Charts/issues/121) -- y axis spaces between labels are too wide [\#120](https://github.com/danielgindi/Charts/issues/120) -- Different colors for single data set in Bar Chart [\#118](https://github.com/danielgindi/Charts/issues/118) -- The new version demo has a problem. [\#117](https://github.com/danielgindi/Charts/issues/117) -- non-public selectors while submitting app [\#116](https://github.com/danielgindi/Charts/issues/116) -- Adding a minimum parameter to setVisibleXRange [\#115](https://github.com/danielgindi/Charts/issues/115) -- Add 'drawHighlightEnabled' to ChartDataSet [\#114](https://github.com/danielgindi/Charts/issues/114) -- Pull to refresh [\#112](https://github.com/danielgindi/Charts/issues/112) -- Can we create thumb for each chart? [\#111](https://github.com/danielgindi/Charts/issues/111) -- Issue setting the chartView.delegate to self. [\#110](https://github.com/danielgindi/Charts/issues/110) -- combine swift in Objective-C project [\#108](https://github.com/danielgindi/Charts/issues/108) -- get X translation distance on the x-axis [\#105](https://github.com/danielgindi/Charts/issues/105) -- Horizontal Bar Chart Screenshot on README is Broken [\#103](https://github.com/danielgindi/Charts/issues/103) -- Bars [\#102](https://github.com/danielgindi/Charts/issues/102) -- Crash when redraw graph from 2 lines to 1 line with click on highlight [\#101](https://github.com/danielgindi/Charts/issues/101) -- Release Bug [\#98](https://github.com/danielgindi/Charts/issues/98) -- Add '@objc' to ChartViewPortHandler [\#97](https://github.com/danielgindi/Charts/issues/97) -- Bar Chart Delegate. [\#96](https://github.com/danielgindi/Charts/issues/96) -- Cannot turn off Barchart Zoom Propertry [\#91](https://github.com/danielgindi/Charts/issues/91) -- calcMinMax\(\) during scrolling / panning [\#89](https://github.com/danielgindi/Charts/issues/89) -- defaultTouchEventsEnabled [\#88](https://github.com/danielgindi/Charts/issues/88) -- 'chartsample-Swift.h' file not found [\#87](https://github.com/danielgindi/Charts/issues/87) -- Infinite loop when setting data on ChartDataEntry object [\#86](https://github.com/danielgindi/Charts/issues/86) -- Custom text over bar chart. [\#84](https://github.com/danielgindi/Charts/issues/84) -- Stop hiding of xAxis label. [\#79](https://github.com/danielgindi/Charts/issues/79) -- Consider draw map chart without location, navigation stuff? [\#78](https://github.com/danielgindi/Charts/issues/78) -- Line Chart - Simple Design [\#77](https://github.com/danielgindi/Charts/issues/77) -- Can you give me a swift's demo [\#75](https://github.com/danielgindi/Charts/issues/75) -- What files exactly should I drag to my project to make it work on iOS 7.0? [\#73](https://github.com/danielgindi/Charts/issues/73) -- How to check chart is zoomed in ? [\#71](https://github.com/danielgindi/Charts/issues/71) -- Changing descriptionTextColor not possible [\#70](https://github.com/danielgindi/Charts/issues/70) -- Confused by this snippet code [\#69](https://github.com/danielgindi/Charts/issues/69) -- XAxis Co-Ordination with Y Axis [\#68](https://github.com/danielgindi/Charts/issues/68) -- Is there a way can make LineDataSets not selected when their visible property is no? [\#67](https://github.com/danielgindi/Charts/issues/67) -- Multiple Chart View Within ScrollView [\#65](https://github.com/danielgindi/Charts/issues/65) - -**Merged pull requests:** - -- Fixes to allow the code to compile with Swift 2.0 [\#232](https://github.com/danielgindi/Charts/pull/232) ([jmacmullin](https://github.com/jmacmullin)) -- fix radar chart negative value rendering bug if startAtZeroEnabled is false for issue \#166 [\#207](https://github.com/danielgindi/Charts/pull/207) ([liuxuan30](https://github.com/liuxuan30)) -- Fixes for beta 3 [\#200](https://github.com/danielgindi/Charts/pull/200) ([petester42](https://github.com/petester42)) -- Performance Enhancements \#29 - candle chart [\#192](https://github.com/danielgindi/Charts/pull/192) ([dorsoft](https://github.com/dorsoft)) -- Candle chart - make the shadow same color as an candle color \#122 [\#191](https://github.com/danielgindi/Charts/pull/191) ([dorsoft](https://github.com/dorsoft)) -- ChartData.removeEntryByXIndex removes the wrong entry \#182 [\#185](https://github.com/danielgindi/Charts/pull/185) ([dorsoft](https://github.com/dorsoft)) -- The line charts have started to properly display balloon markers [\#179](https://github.com/danielgindi/Charts/pull/179) ([Maxim-38RUS-Zabelin](https://github.com/Maxim-38RUS-Zabelin)) -- Fix a silly bug. should check if first is -0.0 [\#165](https://github.com/danielgindi/Charts/pull/165) ([liuxuan30](https://github.com/liuxuan30)) -- add NaN check to allow non-digits handling for radar chart [\#152](https://github.com/danielgindi/Charts/pull/152) ([liuxuan30](https://github.com/liuxuan30)) -- optional protocol method should not be force unwrapped [\#147](https://github.com/danielgindi/Charts/pull/147) ([liuxuan30](https://github.com/liuxuan30)) -- add missing module CoreGraphics for BubbleChartView [\#146](https://github.com/danielgindi/Charts/pull/146) ([liuxuan30](https://github.com/liuxuan30)) -- Adding a minimum parameter to setVisibleXRange [\#119](https://github.com/danielgindi/Charts/pull/119) ([dorsoft](https://github.com/dorsoft)) -- Added support for setting a custom width that is wider than the longe… [\#107](https://github.com/danielgindi/Charts/pull/107) ([AlBirdie](https://github.com/AlBirdie)) -- Offset adjustment when drawLabels on the x axis is disabled. [\#106](https://github.com/danielgindi/Charts/pull/106) ([AlBirdie](https://github.com/AlBirdie)) -- AutoScaling yAxis during panning / zooming [\#95](https://github.com/danielgindi/Charts/pull/95) ([AlBirdie](https://github.com/AlBirdie)) -- Allow access to setLabelsToSkip from Objective-C. [\#93](https://github.com/danielgindi/Charts/pull/93) ([mkubenka](https://github.com/mkubenka)) -- Changing iOS deployment target to 8.0 from 8.1 [\#74](https://github.com/danielgindi/Charts/pull/74) ([michaelmcguire](https://github.com/michaelmcguire)) - -## [v2.1.0](https://github.com/danielgindi/Charts/tree/v2.1.0) (2015-05-05) -[Full Changelog](https://github.com/danielgindi/Charts/compare/v2.0.9...v2.1.0) - -**Implemented enhancements:** - -- Drawing CubicLineChart based on NSDates [\#38](https://github.com/danielgindi/Charts/issues/38) -- Skip first and last value [\#23](https://github.com/danielgindi/Charts/issues/23) - -**Fixed bugs:** - -- Chart Line vanishes on pinch to zoom [\#63](https://github.com/danielgindi/Charts/issues/63) - -**Closed issues:** - -- Expose chartYMin and chartYMax to rendererDelegates [\#64](https://github.com/danielgindi/Charts/issues/64) -- dyld\_fatal\_error [\#60](https://github.com/danielgindi/Charts/issues/60) -- Unknown class LineChartView in Interface Builder file [\#59](https://github.com/danielgindi/Charts/issues/59) -- Is there any inertia effect in the library? [\#58](https://github.com/danielgindi/Charts/issues/58) -- Library not loaded: @rpath/Charts.framework/Charts Xcode 6.3.1, iOS 8.3 [\#57](https://github.com/danielgindi/Charts/issues/57) -- i am getting this issue? [\#55](https://github.com/danielgindi/Charts/issues/55) -- sample swift project of danielgindi/ios-charts? [\#54](https://github.com/danielgindi/Charts/issues/54) -- i want develop charts in swift? [\#53](https://github.com/danielgindi/Charts/issues/53) -- When I used iOS-charts in iOS 7 project [\#52](https://github.com/danielgindi/Charts/issues/52) -- Changing the specific data point \(circle color\) in Line Chart [\#51](https://github.com/danielgindi/Charts/issues/51) -- When i use ios-charts with swift .. [\#50](https://github.com/danielgindi/Charts/issues/50) -- Charts won't draw unless initialized with a frame [\#49](https://github.com/danielgindi/Charts/issues/49) -- PieChart chartValueSelected don't return the good entry [\#48](https://github.com/danielgindi/Charts/issues/48) -- Cannot find this repo through Cocoapods.org [\#47](https://github.com/danielgindi/Charts/issues/47) -- Use of undeclared type 'CGFloat' [\#44](https://github.com/danielgindi/Charts/issues/44) -- CandleChartData isn't combinable with other data types [\#42](https://github.com/danielgindi/Charts/issues/42) -- Two graphs overlaying each other [\#41](https://github.com/danielgindi/Charts/issues/41) -- Charts with long Title [\#40](https://github.com/danielgindi/Charts/issues/40) -- piechart - yOffset [\#39](https://github.com/danielgindi/Charts/issues/39) -- Two different-scale axis support for different data sets [\#36](https://github.com/danielgindi/Charts/issues/36) -- IBInspectable support? [\#34](https://github.com/danielgindi/Charts/issues/34) -- ChartsDemo-swift.h file not found [\#31](https://github.com/danielgindi/Charts/issues/31) -- Pinch zoom release triggers pan [\#30](https://github.com/danielgindi/Charts/issues/30) -- UISwipeGestureRecognizer [\#28](https://github.com/danielgindi/Charts/issues/28) -- pod not support iOS 7.0 ??? [\#27](https://github.com/danielgindi/Charts/issues/27) -- How to add a line-chart view in UITableViewCell ? [\#26](https://github.com/danielgindi/Charts/issues/26) -- Charts/Charts.h file not found [\#24](https://github.com/danielgindi/Charts/issues/24) -- Carthage support [\#21](https://github.com/danielgindi/Charts/issues/21) -- Unresolved identifier `CGFloat` in iOS 7 project [\#19](https://github.com/danielgindi/Charts/issues/19) -- Last item's visibility issue when zooming [\#18](https://github.com/danielgindi/Charts/issues/18) -- Unable to hide Y values [\#17](https://github.com/danielgindi/Charts/issues/17) - -**Merged pull requests:** - -- Fix x-axis limit line render issue. [\#66](https://github.com/danielgindi/Charts/pull/66) ([mkubenka](https://github.com/mkubenka)) -- Added possibility to set the axisLabelModulus manually. [\#56](https://github.com/danielgindi/Charts/pull/56) ([webventil](https://github.com/webventil)) -- Add missing UIKit imports for iOS 7 support [\#45](https://github.com/danielgindi/Charts/pull/45) ([msanders](https://github.com/msanders)) -- Add 'init' to PieChartData to be used from Swift [\#37](https://github.com/danielgindi/Charts/pull/37) ([jmnavarro](https://github.com/jmnavarro)) -- Bubble chart work by @petester42 [\#32](https://github.com/danielgindi/Charts/pull/32) ([danielgindi](https://github.com/danielgindi)) -- Added Bubble Chart Type [\#25](https://github.com/danielgindi/Charts/pull/25) ([petester42](https://github.com/petester42)) -- Shared Charts.framework scheme [\#22](https://github.com/danielgindi/Charts/pull/22) ([zenkimoto](https://github.com/zenkimoto)) -- Add missing UIKit [\#20](https://github.com/danielgindi/Charts/pull/20) ([mkalmes](https://github.com/mkalmes)) - -## [v2.0.9](https://github.com/danielgindi/Charts/tree/v2.0.9) (2015-04-08) -[Full Changelog](https://github.com/danielgindi/Charts/compare/0.0.1...v2.0.9) - -**Closed issues:** - -- Import with Swift\(not objc\) not working [\#14](https://github.com/danielgindi/Charts/issues/14) - -**Merged pull requests:** - -- Added a podspec [\#13](https://github.com/danielgindi/Charts/pull/13) ([petester42](https://github.com/petester42)) - -## [0.0.1](https://github.com/danielgindi/Charts/tree/0.0.1) (2015-04-07) -**Closed issues:** - -- Need Version to be compatible with Xcode 6.2 [\#12](https://github.com/danielgindi/Charts/issues/12) -- Can't import "module-swift.h" [\#11](https://github.com/danielgindi/Charts/issues/11) -- A lot of compile errors. [\#10](https://github.com/danielgindi/Charts/issues/10) -- 357 Compile Errors on framework files [\#8](https://github.com/danielgindi/Charts/issues/8) -- demo crashes, and no swift examples? [\#7](https://github.com/danielgindi/Charts/issues/7) -- xcode complains ChartsDemo-Swift.h can't be found [\#6](https://github.com/danielgindi/Charts/issues/6) -- Cocoapod [\#4](https://github.com/danielgindi/Charts/issues/4) -- Trying to compile demo code,but tons of compiler errors [\#3](https://github.com/danielgindi/Charts/issues/3) -- Command failed due to signal: Segmentation fault: 11 [\#2](https://github.com/danielgindi/Charts/issues/2) - -**Merged pull requests:** - -- Fix README typo [\#5](https://github.com/danielgindi/Charts/pull/5) ([nwest](https://github.com/nwest)) -- Add a Bitdeli Badge to README [\#1](https://github.com/danielgindi/Charts/pull/1) ([bitdeli-chef](https://github.com/bitdeli-chef)) - - - -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/CONTRIBUTING.md b/Carthage/Checkouts/Charts/CONTRIBUTING.md deleted file mode 100644 index 5b66f22f..00000000 --- a/Carthage/Checkouts/Charts/CONTRIBUTING.md +++ /dev/null @@ -1,49 +0,0 @@ -# How to contribute - -Bug-fixes and features often come from users of the Charts framework, and improving it greatly. We want to keep it as easy as possible to contribute changes that improve the experience for users all around the world. There are a few guidelines that we -need contributors to follow so that we can have a chance of keeping on -top of things. - -## Simple issues and bug reports - -If you are reporting a bug which can be observed visually, please add to your issue either: - -* Screenshots, if the bug is easily explainable -* A working sample project that we can compile, run, and immediately observe the issue - -## Getting Started with Contributions - -* Make sure you have a [GitHub account](https://github.com/signup/free) -* Submit a ticket for your issue, assuming one does not already exist. - * Clearly describe the issue including steps to reproduce when it is a bug. - * Make sure you fill in the earliest version (or commit number) that you know has the issue. -* Fork the repository on GitHub - -## Making Changes - -* Create a topic branch from where you want to base your work. This is usually the master branch. -* Make commits of logical units. -* Make sure your code conforms to the code style around it. It's easy, just look around! -* If you have made changes back and forth, or have made merges, your commit history might look messy and hard to understand. A single issue or change should still be in one commit. So please squash those commits together and rebase them however you need to - to make our lives easier when reading it later. -* Check for unnecessary whitespace with `git diff --check` before committing. -* Make sure your commit messages are in the proper format. - -```` - First line must be up to 50 chars (Fixes #1234) - - The first line should be a short statement as to what have changed, and should also include an issue number, prefixed with a hash. - The body of the message comes after an empty new line, and describes the changes - more thoroughly, especially if there was a special case handled there, - or maybe some trickery that only code wizards can understand. -```` - -* Make sure you have tested your changes well. -* If your changes could theoretically affect some other component or case, which you do not necessarily use, you still have to test it. -* Create a Pull Request from your topic branch to the relevant branch in the main repo. If you go to the main repo of the framework, you'll see a big green button which pretty much prepares the PR for you. You just have to hit it. - -## Making Trivial Changes - -For changes of a trivial nature to comments and documentation, it is not -always necessary to create a new ticket. In this case, it is -appropriate to start the first line of a commit with '(doc)' instead of -a ticket number. Even the default commit message the GitHub generates is fine with us. diff --git a/Carthage/Checkouts/Charts/Cartfile.private b/Carthage/Checkouts/Charts/Cartfile.private deleted file mode 100644 index ca931038..00000000 --- a/Carthage/Checkouts/Charts/Cartfile.private +++ /dev/null @@ -1 +0,0 @@ -github "uber/ios-snapshot-test-case" diff --git a/Carthage/Checkouts/Charts/Cartfile.resolved b/Carthage/Checkouts/Charts/Cartfile.resolved deleted file mode 100644 index 8f69010a..00000000 --- a/Carthage/Checkouts/Charts/Cartfile.resolved +++ /dev/null @@ -1 +0,0 @@ -github "uber/ios-snapshot-test-case" "6.1.0" diff --git a/Carthage/Checkouts/Charts/Charts.podspec b/Carthage/Checkouts/Charts/Charts.podspec deleted file mode 100644 index bf0dcf37..00000000 --- a/Carthage/Checkouts/Charts/Charts.podspec +++ /dev/null @@ -1,19 +0,0 @@ -Pod::Spec.new do |s| - s.name = "Charts" - s.version = "3.4.0" - s.summary = "Charts is a powerful & easy to use chart library for iOS, tvOS and OSX (and Android)" - s.homepage = "https://github.com/danielgindi/Charts" - s.license = { :type => "Apache License, Version 2.0", :file => "LICENSE" } - s.authors = "Daniel Cohen Gindi", "Philipp Jahoda" - s.ios.deployment_target = "8.0" - s.tvos.deployment_target = "9.0" - s.osx.deployment_target = "10.11" - s.source = { :git => "https://github.com/danielgindi/Charts.git", :tag => "v#{s.version}" } - s.default_subspec = "Core" - s.swift_version = '5.0' - s.cocoapods_version = '>= 1.5.0' - - s.subspec "Core" do |ss| - ss.source_files = "Source/Charts/**/*.swift" - end -end diff --git a/Carthage/Checkouts/Charts/Charts.xcodeproj/project.pbxproj b/Carthage/Checkouts/Charts/Charts.xcodeproj/project.pbxproj deleted file mode 100644 index 6d110138..00000000 --- a/Carthage/Checkouts/Charts/Charts.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1262 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 00B8BF5901C2D220357B0B2A /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */; }; - 00BC23EF0E04E17188344403 /* BarChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */; }; - 02A6E6E1A82A27A66B8D08C4 /* MoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */; }; - 03960E8148C6AEDACE4B77CC /* IMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 596963A429D485E3894C4666 /* IMarker.swift */; }; - 0511E43EF3FD2CDE7F7F15DB /* ScatterChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD37A55B4D85D883E29C744 /* ScatterChartDataProvider.swift */; }; - 05253AFC448C107DEF54C2FE /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */; }; - 0529DD51622C8769C1121F90 /* CrossShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */; }; - 0577C2B38BCE4C871F262714 /* AnimatedZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */; }; - 064989461F5C99C7006E8BB3 /* Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 064989451F5C99C7006E8BB3 /* Snapshot.swift */; }; - 0A772AEC08246FEC480673E5 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */; }; - 0C52C70C6E6EA09BD7426386 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */; }; - 0CAF514A280FF6A14E2A1A23 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */; }; - 0D8A89398F9BD5DCC8D7F976 /* ICandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18BFB0A14A5C47A302A597D9 /* ICandleChartDataSet.swift */; }; - 11F68AA2EBF822D7208EE002 /* YAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA5A16F4A382813C4FE8BDF9 /* YAxisRendererRadarChart.swift */; }; - 1311BEC21E9CC264E971EFAF /* ILineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7E6A99D82E6AE3804D5A39 /* ILineRadarChartDataSet.swift */; }; - 135F11CE20425AF600D655A3 /* PieChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135F11CD20425AF600D655A3 /* PieChartTests.swift */; }; - 146EE16342C2BADC92E45BF2 /* ILineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9249AD9AEC8C85772365A128 /* ILineScatterCandleRadarChartDataSet.swift */; }; - 17E994DA88777AA1D8CCFC58 /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */; }; - 203A39685CC96FC625F616E4 /* IHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998F2BFE318471AFC05B50AC /* IHighlighter.swift */; }; - 219192CA6B4895319AB49DCA /* BarLineScatterCandleBubbleRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */; }; - 224EFF991FBAAC4700CF9B3B /* EquatableTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224EFF981FBAAC4700CF9B3B /* EquatableTests.swift */; }; - 23649EFC635A76022F07FFA6 /* PieChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */; }; - 23FA50B2730D8C7ACA091C4F /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F279974FE650E57A061B09 /* BarChartRenderer.swift */; }; - 24151B0729D77251A8494D70 /* LineRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */; }; - 2876E17AEB1D92D7BBC4C38A /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DCD13D558BA177D5952AD66 /* PieChartView.swift */; }; - 28FEE609C5B22FD64C7E5D10 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FF03960A871A092F5B54315 /* BarLineScatterCandleBubbleChartDataProvider.swift */; }; - 2A94F1724FEA9E16A81A8E1F /* XAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F3D55A7E6176D52DC957D27 /* XAxisRendererHorizontalBarChart.swift */; }; - 2B791E64E7C4523B1A63F72A /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7AD2FC320A16CA1EE0A52F4 /* ScatterChartData.swift */; }; - 2B821AAC3EBD60A73EACBCE6 /* LegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F715DB2C56C9E0615542625B /* LegendRenderer.swift */; }; - 2BA03CEC36BADCF682F1328B /* LineChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */; }; - 2BF85BEA981B359A65E9BF67 /* LineChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */; }; - 2C40CFFC8D88BEA70E0A50B0 /* IBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3788EC55EF908B0805D7C2F /* IBubbleChartDataSet.swift */; }; - 2C879FC24D7A15D70BE4063F /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E03A4987F72414A02A0631B /* PieChartData.swift */; }; - 2FBA7E982EB57932B9F3E9B5 /* YAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB92A80F861C1362EED8D946 /* YAxis.swift */; }; - 3097296AC7FFA994FE4AD312 /* PieRadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */; }; - 30DCC4BAA5601B154ABADA13 /* CandleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */; }; - 331AA2C4BC34F56C23012F02 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */; }; - 3395682A1E27756651FF6F4D /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0108D5925E21A47DA36A66AA /* BarChartData.swift */; }; - 369DEB23452CB436A3A1A644 /* MarkerImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392AAEB02DD7B351D92907C2 /* MarkerImage.swift */; }; - 383D68A13E1C3D6A251E5147 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274116834B1B0345D622E027 /* CandleChartDataSet.swift */; }; - 3B11556EB7DC034E2FC958E4 /* BarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */; }; - 3CBE95F1E9394FA08CDCF31E /* BarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 543729805D897CC03E5F78D3 /* BarHighlighter.swift */; }; - 40C82F2209E1BA9E41E8F3DA /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6227A646166E248F90F86AD /* ChartColorTemplates.swift */; }; - 41B13F3179ACB5A3837C6E55 /* YAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688B80F1AA88AE54152BE768 /* YAxisRenderer.swift */; }; - 41BEBF8BDB9DC403B5697D67 /* XAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */; }; - 4272DA5D44AF7DA05A5A8287 /* BubbleChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDEAF554FD0D68EA4C0E7E49 /* BubbleChartDataProvider.swift */; }; - 4390D74986A92DEF4F4F2BF0 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6DEBFAB1D73E944ED430B4F /* ChartLimitLine.swift */; }; - 45C459FA25DFCBE62FA6A06C /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3F8BFF1CBC58D5B9DBFFB9B /* BarChartDataEntry.swift */; }; - 48E875BBD6540BDE1C1B7D3D /* AxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B7AEFBF4D85B9D2EAAB3071 /* AxisBase.swift */; }; - 4E98788ABEF6496C23F3E6C6 /* HorizontalBarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33BE9A97FFA41D3D85CAFFC7 /* HorizontalBarHighlighter.swift */; }; - 4FACC6FD308AFB231EB4A93D /* XAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */; }; - 50476F8E6662CAFC1EFE0723 /* IScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219BC9CEA037F897E92E45D1 /* IScatterChartDataSet.swift */; }; - 515E286E6C47594D3FFA3DD1 /* ViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */; }; - 53A91F6F86740E26FE733639 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D717F0808DE7EC8A4AE9C2A /* BarLineScatterCandleBubbleChartDataSet.swift */; }; - 56E0F5EA9255B9B92876E040 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */; }; - 5C457D9A50DA20869AD1739D /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */; }; - 5DC9BC1B6C128B2C9995AB84 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */; }; - 5F96E95C7073D21EFE02BCF7 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */; }; - 60EDF735AAB7195DCFA5FE4D /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */; }; - 6303DBDEE4FAB8E40D023BCE /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2440DB759AB93B4A928A3F6F /* RadarChartView.swift */; }; - 63C0A21D145BFEDED5406E4D /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */; }; - 64FA1EDB4DC1F65727D52D10 /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */; }; - 65EA404AE098EBCE8D5DE04B /* CombinedChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A140F644332704916947B58C /* CombinedChartDataProvider.swift */; }; - 66A18A8EEBAAAC2EDA31ABEC /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CEC0C69C89CE9B99F3B4409 /* ChartDataSet.swift */; }; - 69EA073EDF75D49ABE1715D6 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */; }; - 73EDF662AD989E930D365B72 /* PieHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7036F11832C017E26AC750A4 /* PieHighlighter.swift */; }; - 758EB1C75063ED3373542F3B /* Highlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D64616883374310C505EC39 /* Highlight.swift */; }; - 779B46E9F13A087BFA47D539 /* DefaultAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4770E0F75EFFC30707A7C8 /* DefaultAxisValueFormatter.swift */; }; - 78084A4F1D850D5775BC139E /* XAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5225ABC3C0C2F65FC094EEBB /* XAxis.swift */; }; - 795E100895C24049509F1EDE /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D8013D44629521B1746364 /* PieChartRenderer.swift */; }; - 796D3E63A37A95FD9D1AB9A1 /* ChevronDownShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */; }; - 7C9CE6718D18859A35146098 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 559DB735FEA17AB90676D6CA /* BarLineScatterCandleBubbleChartData.swift */; }; - 7CB7F74752619B0270CCB0A9 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */; }; - 7D546013F3A14FF5BB7F3294 /* ChartDataEntryBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */; }; - 7E7561DE19DC7CABBE0B2D3A /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0619A877C69A95ECCC440A44 /* LineChartView.swift */; }; - 7EE6EFE70CF4D8B09CAFCD01 /* AnimatedMoveViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */; }; - 8102A555DD6C93AC1290EA7C /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A4CFFFB65819121595F06F1 /* Fill.swift */; }; - 81892994002C0640AD858748 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E120E76C6F1B5877D56126DD /* ChartData.swift */; }; - 83BBAF3EDC31FD452F8BF1DB /* IRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EAD807534620E3B53327F04 /* IRadarChartDataSet.swift */; }; - 846AC09831FA93F66732591B /* YAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE417AAA0FCA0DD00E77489 /* YAxisRendererHorizontalBarChart.swift */; }; - 8A463E2947F211C594CA5E95 /* TransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 324C9127B53A8D39C8B49277 /* TransformerHorizontalBarChart.swift */; }; - 8A9FF54E2075A9047CC8E953 /* IShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D3D13180C2E3893A82546 /* IShapeRenderer.swift */; }; - 8BCCD709AACC565613D9DA68 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */; }; - 8E1192F7A7152E9DA92C56A9 /* ChartUtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */; }; - 8EF7B3FBE37F72CC030CD865 /* SquareShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FC01A016DFF1BA73AF9182 /* SquareShapeRenderer.swift */; }; - 8F4B1A9060472764073DFA0B /* TriangleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FB6219B143F8F7DA762950 /* TriangleShapeRenderer.swift */; }; - 9360348A04723E653FBC8B18 /* MarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48164CCD83C51B496533CB77 /* MarkerView.swift */; }; - 93A94E1FF55041A6032891FE /* XShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */; }; - 9400725714D0DA707DDECD2E /* ViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7BDB22C97F39A4B33E38A7 /* ViewPortJob.swift */; }; - 95B6D6F35684292A62DBEA74 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A75AA73C5AA381DA517959 /* LineChartDataSet.swift */; }; - 967EE2EDDE3337C5C4337C59 /* IndexAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */; }; - 97AD2D4620AF917100F9C24A /* Platform+Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97AD2D4520AF917100F9C24A /* Platform+Accessibility.swift */; }; - 97E033CC0ABEF0F448DAFA8E /* DataApproximator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93EF9709CF635BEE70D1ABC5 /* DataApproximator.swift */; }; - 98E2EEF45E8933E4AD182D58 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30EFAD7920F76360ADB3B5F5 /* ChartViewBase.swift */; }; - 9A26C8DB1F87B01700367599 /* DataApproximator+N.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A26C8DA1F87B01700367599 /* DataApproximator+N.swift */; }; - 9C91C151608E2D6E19B1EAD1 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F099502DA50C56204E7B744 /* Range.swift */; }; - 9F760570BCECB0BF5727AF90 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */; }; - A40ACF0CCE96EEE104B0463D /* IValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EAA8AA30C377D54D22A577A /* IValueFormatter.swift */; }; - A692D8BDE42717F69DB790BE /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */; }; - AEE9C4E4AC02B8FB3CD21975 /* ZoomViewJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB3A4F5987E58F3E5BE855F9 /* ZoomViewJob.swift */; }; - AF4AAF3709ED9DDF6362EAE8 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5649B272BF3EBFC8A1EF0C1 /* IBarLineScatterCandleBubbleChartDataSet.swift */; }; - B0D28C68BB9A958DC56EB214 /* DefaultValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107D8F8163EE54D6D9E916B0 /* DefaultValueFormatter.swift */; }; - B13C74B4FF705D7B595D01EF /* IAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */; }; - B539114951455C35BADAE3F3 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4FB5E3761EF8B4D1E1E1014 /* PieChartDataSet.swift */; }; - B66817462241E3CC00017CF1 /* HorizontalBarChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B66817452241E3CC00017CF1 /* HorizontalBarChartTests.swift */; }; - B6BF9A561F91993A00E62A5D /* CombinedChartTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6BF9A551F91993A00E62A5D /* CombinedChartTests.swift */; }; - B6C9F450D937B87224D29D5C /* IFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818AC6B12505B7C0A53D62F9 /* IFillFormatter.swift */; }; - B6DCC229615EFE706F64A37D /* LineScatterCandleRadarRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 923206233CA89FD03565FF87 /* LineScatterCandleRadarRenderer.swift */; }; - B85DEB06B4C1AFFC8A0E3295 /* CircleShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE1B1623D3AF69CECAE8562 /* CircleShapeRenderer.swift */; }; - BEFD9518F3A74ACF8FA33308 /* Charts.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F9922F0641F7955DC6CD324 /* Charts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C04D269AD4A373FD2B621C43 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C978F31F23C7D21197DC2A1 /* LineChartData.swift */; }; - C09E91F67A4AC43C277E7D82 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8ED233775EEC31243A6919 /* BubbleChartDataEntry.swift */; }; - C20A62D8CB9120523D5FB650 /* LegendEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E7C673B9ED4340F550A9283 /* LegendEntry.swift */; }; - C2EFB4EC8C97FA9987F1B50D /* RadarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91EEEDE2AB8F2DA3AFCF0733 /* RadarChartDataEntry.swift */; }; - C33E1AF5471A60BA42DAF52E /* RadarHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F368CF209744D8F3B85B1028 /* RadarHighlighter.swift */; }; - C3F0DDB7F0A922F0BB7EDB8A /* IBarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A53A9E42FC07FFDACA937C1 /* IBarChartDataSet.swift */; }; - C7B150D740255670DEB9F455 /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */; }; - CB785FE9B6B312408D17BC3B /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FDA09EF973925A110506799 /* ChartUtils.swift */; }; - CC7F8198A13249B5DEBBF25E /* AnimatedViewPortJob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 710D7C9B2F1DB4A331EE405A /* AnimatedViewPortJob.swift */; }; - CEF68F42A5390A73113F3663 /* Renderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F66B32AD8A878CBD6DB6ED2 /* Renderer.swift */; }; - D29BBEF55C9CC90114919CD2 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E783CFB4889A767C76510917 /* BarChartView.swift */; }; - D326491E8BCDE54A0921E137 /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5983826927D825EF5F855C28 /* ChartHighlighter.swift */; }; - D50B0EC2BB2245F32E757C50 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */; }; - D819331DA581C7E0AC5F8CEF /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3976E5F9D60E30CD94CE6156 /* Animator.swift */; }; - DBC9DB402CC9BB84B76968C4 /* Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = B137428B41C143D5115726C4 /* Description.swift */; }; - DDE704689FDF2C0E0338488B /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4785FEACAE4367F36FB8868 /* CandleChartData.swift */; }; - DE0F434FE8C24C52B023370F /* Transformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF475B9593B9898853814340 /* Transformer.swift */; }; - E3B28EA1E21279DF3889BCE8 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */; }; - E4B2F363414E84C4D4B8A885 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED352A98860E031F13AFB7 /* BubbleChartView.swift */; }; - E50D291A6B6E69BF0B56A67C /* ChartBaseDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */; }; - E68CA3DC66EB638C956E09B8 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */; }; - E8F0F4F47CD7D72B4EE5A794 /* IChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A32510073A303CBB38E094A /* IChartDataSet.swift */; }; - E9FF0ECB5E0CA92DBF4C1BC4 /* Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ED23C354AFE81818D78E645 /* Platform.swift */; }; - EAEA60D22CA8C1B7E18D3F7D /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F22750328058DEC2F019646F /* ChartDataEntry.swift */; }; - EB56849433A76B08606B73EB /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */; }; - ECE7EAE7179A7F57CE9BBD8F /* Legend.swift in Sources */ = {isa = PBXBuildFile; fileRef = E64A75540C627E09080B402A /* Legend.swift */; }; - ECECC58CEF03B1718F8267E8 /* AxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75935E899183DDFA181E2CC /* AxisRendererBase.swift */; }; - F100D68395F169B93590FA96 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 539382766378B702660FDFB2 /* HorizontalBarChartRenderer.swift */; }; - F103D90FC5DEEA0D7BB4407E /* ChevronUpShapeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA70259ED16FF80D8EEB0F94 /* ChevronUpShapeRenderer.swift */; }; - F37B07008B8AE7F3909FFB9C /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */; }; - F5A209116FAC68F5903D0B46 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB762958EE8E6521563665D /* ChartAnimationEasing.swift */; }; - F744C510DA9B85C228BBB335 /* DefaultFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */; }; - F941C88BF814DF51C465CB95 /* ILineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 429E88F2729735DC092EE556 /* ILineChartDataSet.swift */; }; - FA07D034D9C3BC7795184ACA /* LineScatterCandleRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */; }; - FAAD9FF6565DED2652188584 /* IPieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2AA6CC89F809DCCD7605B4 /* IPieChartDataSet.swift */; }; - FD37AAC0270F390FFC470A65 /* ChartDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */; }; - FDBDAFA7A5337C6E3992DACE /* ComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - C2005F425A98942473657ED2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 193FC8DF32D250560C5F5D77 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A58A4ED274A941CA248EA921; - remoteInfo = Charts; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 0108D5925E21A47DA36A66AA /* BarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarChartData.swift; sourceTree = ""; }; - 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataRendererBase.swift; path = Source/Charts/Renderers/ChartDataRendererBase.swift; sourceTree = ""; }; - 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarHighlighter.swift; path = Source/Charts/Highlight/PieRadarHighlighter.swift; sourceTree = ""; }; - 0619A877C69A95ECCC440A44 /* LineChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartView.swift; path = Source/Charts/Charts/LineChartView.swift; sourceTree = ""; }; - 064989451F5C99C7006E8BB3 /* Snapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Snapshot.swift; path = Tests/Charts/Snapshot.swift; sourceTree = ""; }; - 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IAxisValueFormatter.swift; path = Source/Charts/Formatters/IAxisValueFormatter.swift; sourceTree = ""; }; - 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartRenderer.swift; path = Source/Charts/Renderers/LineChartRenderer.swift; sourceTree = ""; }; - 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartData.swift; path = Source/Charts/Data/Implementations/Standard/CombinedChartData.swift; sourceTree = ""; }; - 0F099502DA50C56204E7B744 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = Source/Charts/Highlight/Range.swift; sourceTree = ""; }; - 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarRenderer.swift; path = Source/Charts/Renderers/LineRadarRenderer.swift; sourceTree = ""; }; - 107D8F8163EE54D6D9E916B0 /* DefaultValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultValueFormatter.swift; path = Source/Charts/Formatters/DefaultValueFormatter.swift; sourceTree = ""; }; - 10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexAxisValueFormatter.swift; path = Source/Charts/Formatters/IndexAxisValueFormatter.swift; sourceTree = ""; }; - 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartView.swift; path = Source/Charts/Charts/CombinedChartView.swift; sourceTree = ""; }; - 12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntryBase.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntryBase.swift; sourceTree = ""; }; - 135F11CD20425AF600D655A3 /* PieChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PieChartTests.swift; path = Tests/Charts/PieChartTests.swift; sourceTree = ""; }; - 18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartView.swift; path = Source/Charts/Charts/ScatterChartView.swift; sourceTree = ""; }; - 18BFB0A14A5C47A302A597D9 /* ICandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ICandleChartDataSet.swift; path = Source/Charts/Data/Interfaces/ICandleChartDataSet.swift; sourceTree = ""; }; - 1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRenderer.swift; path = Source/Charts/Renderers/XAxisRenderer.swift; sourceTree = ""; }; - 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ChartsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F3D55A7E6176D52DC957D27 /* XAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/XAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartRenderer.swift; path = Source/Charts/Renderers/BubbleChartRenderer.swift; sourceTree = ""; }; - 219BC9CEA037F897E92E45D1 /* IScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IScatterChartDataSet.swift; path = Source/Charts/Data/Interfaces/IScatterChartDataSet.swift; sourceTree = ""; }; - 224EFF981FBAAC4700CF9B3B /* EquatableTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EquatableTests.swift; path = Tests/Charts/EquatableTests.swift; sourceTree = ""; }; - 23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/XShapeRenderer.swift; sourceTree = ""; }; - 2440DB759AB93B4A928A3F6F /* RadarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartView.swift; path = Source/Charts/Charts/RadarChartView.swift; sourceTree = ""; }; - 2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedHighlighter.swift; path = Source/Charts/Highlight/CombinedHighlighter.swift; sourceTree = ""; }; - 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoveViewJob.swift; path = Source/Charts/Jobs/MoveViewJob.swift; sourceTree = ""; }; - 274116834B1B0345D622E027 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataSet.swift; sourceTree = ""; }; - 2EAD807534620E3B53327F04 /* IRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IRadarChartDataSet.swift; sourceTree = ""; }; - 2FD37A55B4D85D883E29C744 /* ScatterChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataProvider.swift; path = Source/Charts/Interfaces/ScatterChartDataProvider.swift; sourceTree = ""; }; - 30EFAD7920F76360ADB3B5F5 /* ChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartViewBase.swift; path = Source/Charts/Charts/ChartViewBase.swift; sourceTree = ""; }; - 324C9127B53A8D39C8B49277 /* TransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformerHorizontalBarChart.swift; path = Source/Charts/Utils/TransformerHorizontalBarChart.swift; sourceTree = ""; }; - 32FC01A016DFF1BA73AF9182 /* SquareShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SquareShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/SquareShapeRenderer.swift; sourceTree = ""; }; - 33BE9A97FFA41D3D85CAFFC7 /* HorizontalBarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarHighlighter.swift; path = Source/Charts/Highlight/HorizontalBarHighlighter.swift; sourceTree = ""; }; - 392AAEB02DD7B351D92907C2 /* MarkerImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerImage.swift; path = Source/Charts/Components/MarkerImage.swift; sourceTree = ""; }; - 3976E5F9D60E30CD94CE6156 /* Animator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Animator.swift; path = Source/Charts/Animation/Animator.swift; sourceTree = ""; }; - 3A32510073A303CBB38E094A /* IChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IChartDataSet.swift; path = Source/Charts/Data/Interfaces/IChartDataSet.swift; sourceTree = ""; }; - 3D64616883374310C505EC39 /* Highlight.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Highlight.swift; path = Source/Charts/Highlight/Highlight.swift; sourceTree = ""; }; - 3ED23C354AFE81818D78E645 /* Platform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.swift; path = Source/Charts/Utils/Platform.swift; sourceTree = ""; }; - 3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataProvider.swift; path = Source/Charts/Interfaces/CandleChartDataProvider.swift; sourceTree = ""; }; - 3FDA09EF973925A110506799 /* ChartUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtils.swift; path = Source/Charts/Utils/ChartUtils.swift; sourceTree = ""; }; - 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = "Tests/Supporting Files/Media.xcassets"; sourceTree = ""; }; - 429E88F2729735DC092EE556 /* ILineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineChartDataSet.swift; sourceTree = ""; }; - 45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineChartViewBase.swift; path = Source/Charts/Charts/BarLineChartViewBase.swift; sourceTree = ""; }; - 45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineRadarChartDataSet.swift; sourceTree = ""; }; - 46D8013D44629521B1746364 /* PieChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartRenderer.swift; path = Source/Charts/Renderers/PieChartRenderer.swift; sourceTree = ""; }; - 48164CCD83C51B496533CB77 /* MarkerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarkerView.swift; path = Source/Charts/Components/MarkerView.swift; sourceTree = ""; }; - 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieRadarChartViewBase.swift; path = Source/Charts/Charts/PieRadarChartViewBase.swift; sourceTree = ""; }; - 4B7AEFBF4D85B9D2EAAB3071 /* AxisBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisBase.swift; path = Source/Charts/Components/AxisBase.swift; sourceTree = ""; }; - 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartData.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartData.swift; sourceTree = ""; }; - 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedZoomViewJob.swift; path = Source/Charts/Jobs/AnimatedZoomViewJob.swift; sourceTree = ""; }; - 4C978F31F23C7D21197DC2A1 /* LineChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartData.swift; path = Source/Charts/Data/Implementations/Standard/LineChartData.swift; sourceTree = ""; }; - 4EAA8AA30C377D54D22A577A /* IValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IValueFormatter.swift; path = Source/Charts/Formatters/IValueFormatter.swift; sourceTree = ""; }; - 4EED352A98860E031F13AFB7 /* BubbleChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartView.swift; path = Source/Charts/Charts/BubbleChartView.swift; sourceTree = ""; }; - 4F7E6A99D82E6AE3804D5A39 /* ILineRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift; sourceTree = ""; }; - 4F9922F0641F7955DC6CD324 /* Charts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Charts.h; path = "Source/Supporting Files/Charts.h"; sourceTree = ""; }; - 5225ABC3C0C2F65FC094EEBB /* XAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxis.swift; path = Source/Charts/Components/XAxis.swift; sourceTree = ""; }; - 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartRenderer.swift; path = Source/Charts/Renderers/CombinedChartRenderer.swift; sourceTree = ""; }; - 539382766378B702660FDFB2 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartRenderer.swift; path = Source/Charts/Renderers/HorizontalBarChartRenderer.swift; sourceTree = ""; }; - 543729805D897CC03E5F78D3 /* BarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarHighlighter.swift; path = Source/Charts/Highlight/BarHighlighter.swift; sourceTree = ""; }; - 559DB735FEA17AB90676D6CA /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; - 596963A429D485E3894C4666 /* IMarker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IMarker.swift; path = Source/Charts/Components/IMarker.swift; sourceTree = ""; }; - 5983826927D825EF5F855C28 /* ChartHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartHighlighter.swift; path = Source/Charts/Highlight/ChartHighlighter.swift; sourceTree = ""; }; - 5A4CFFFB65819121595F06F1 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Source/Charts/Utils/Fill.swift; sourceTree = ""; }; - 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleRenderer.swift; path = Source/Charts/Renderers/BarLineScatterCandleBubbleRenderer.swift; sourceTree = ""; }; - 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartTests.swift; path = Tests/Charts/BarChartTests.swift; sourceTree = ""; }; - 6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartView.swift; path = Source/Charts/Charts/HorizontalBarChartView.swift; sourceTree = ""; }; - 62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataProvider.swift; path = Source/Charts/Interfaces/ChartDataProvider.swift; sourceTree = ""; }; - 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 688B80F1AA88AE54152BE768 /* YAxisRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRenderer.swift; path = Source/Charts/Renderers/YAxisRenderer.swift; sourceTree = ""; }; - 6A4770E0F75EFFC30707A7C8 /* DefaultAxisValueFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAxisValueFormatter.swift; path = Source/Charts/Formatters/DefaultAxisValueFormatter.swift; sourceTree = ""; }; - 6CEC0C69C89CE9B99F3B4409 /* ChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataSet.swift; sourceTree = ""; }; - 6D717F0808DE7EC8A4AE9C2A /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 6E03A4987F72414A02A0631B /* PieChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartData.swift; path = Source/Charts/Data/Implementations/Standard/PieChartData.swift; sourceTree = ""; }; - 6F66B32AD8A878CBD6DB6ED2 /* Renderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Renderer.swift; path = Source/Charts/Renderers/Renderer.swift; sourceTree = ""; }; - 7036F11832C017E26AC750A4 /* PieHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieHighlighter.swift; path = Source/Charts/Highlight/PieHighlighter.swift; sourceTree = ""; }; - 710D7C9B2F1DB4A331EE405A /* AnimatedViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedViewPortJob.swift; path = Source/Charts/Jobs/AnimatedViewPortJob.swift; sourceTree = ""; }; - 72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortHandler.swift; path = Source/Charts/Utils/ViewPortHandler.swift; sourceTree = ""; }; - 75F279974FE650E57A061B09 /* BarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartRenderer.swift; path = Source/Charts/Renderers/BarChartRenderer.swift; sourceTree = ""; }; - 7A53A9E42FC07FFDACA937C1 /* IBarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarChartDataSet.swift; sourceTree = ""; }; - 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartUtilsTests.swift; path = Tests/Charts/ChartUtilsTests.swift; sourceTree = ""; }; - 7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartRenderer.swift; path = Source/Charts/Renderers/RadarChartRenderer.swift; sourceTree = ""; }; - 7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartData.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartData.swift; sourceTree = ""; }; - 80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartRenderer.swift; path = Source/Charts/Renderers/ScatterChartRenderer.swift; sourceTree = ""; }; - 818AC6B12505B7C0A53D62F9 /* IFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IFillFormatter.swift; path = Source/Charts/Formatters/IFillFormatter.swift; sourceTree = ""; }; - 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CrossShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift; sourceTree = ""; }; - 8FF03960A871A092F5B54315 /* BarLineScatterCandleBubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarLineScatterCandleBubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift; sourceTree = ""; }; - 910DBFE1DA1B2CA237A736DF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Source/Supporting Files/Info.plist"; sourceTree = ""; }; - 91EEEDE2AB8F2DA3AFCF0733 /* RadarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift; sourceTree = ""; }; - 923206233CA89FD03565FF87 /* LineScatterCandleRadarRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarRenderer.swift; path = Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift; sourceTree = ""; }; - 9249AD9AEC8C85772365A128 /* ILineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ILineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - 93EF9709CF635BEE70D1ABC5 /* DataApproximator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataApproximator.swift; path = Source/Charts/Filters/DataApproximator.swift; sourceTree = ""; }; - 97AD2D4520AF917100F9C24A /* Platform+Accessibility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "Platform+Accessibility.swift"; path = "Source/Charts/Utils/Platform+Accessibility.swift"; sourceTree = ""; }; - 998F2BFE318471AFC05B50AC /* IHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IHighlighter.swift; path = Source/Charts/Highlight/IHighlighter.swift; sourceTree = ""; }; - 9A26C8DA1F87B01700367599 /* DataApproximator+N.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "DataApproximator+N.swift"; path = "Source/Charts/Filters/DataApproximator+N.swift"; sourceTree = ""; }; - 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataProvider.swift; path = Source/Charts/Interfaces/BarChartDataProvider.swift; sourceTree = ""; }; - 9DCD13D558BA177D5952AD66 /* PieChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartView.swift; path = Source/Charts/Charts/PieChartView.swift; sourceTree = ""; }; - 9E7C673B9ED4340F550A9283 /* LegendEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendEntry.swift; path = Source/Charts/Components/LegendEntry.swift; sourceTree = ""; }; - A140F644332704916947B58C /* CombinedChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedChartDataProvider.swift; path = Source/Charts/Interfaces/CombinedChartDataProvider.swift; sourceTree = ""; }; - A4FB5E3761EF8B4D1E1E1014 /* PieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataSet.swift; sourceTree = ""; }; - A5649B272BF3EBFC8A1EF0C1 /* IBarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBarLineScatterCandleBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - A5A75AA73C5AA381DA517959 /* LineChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineChartDataSet.swift; sourceTree = ""; }; - AA5A16F4A382813C4FE8BDF9 /* YAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererRadarChart.swift; path = Source/Charts/Renderers/YAxisRendererRadarChart.swift; sourceTree = ""; }; - AA70259ED16FF80D8EEB0F94 /* ChevronUpShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronUpShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift; sourceTree = ""; }; - B137428B41C143D5115726C4 /* Description.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Description.swift; path = Source/Charts/Components/Description.swift; sourceTree = ""; }; - B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift; sourceTree = ""; }; - B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift; sourceTree = ""; }; - B66817452241E3CC00017CF1 /* HorizontalBarChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HorizontalBarChartTests.swift; path = Tests/Charts/HorizontalBarChartTests.swift; sourceTree = ""; }; - B6BF9A551F91993A00E62A5D /* CombinedChartTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = CombinedChartTests.swift; path = Tests/Charts/CombinedChartTests.swift; sourceTree = ""; }; - BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedMoveViewJob.swift; path = Source/Charts/Jobs/AnimatedMoveViewJob.swift; sourceTree = ""; }; - BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartView.swift; path = Source/Charts/Charts/CandleStickChartView.swift; sourceTree = ""; }; - BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XAxisRendererRadarChart.swift; path = Source/Charts/Renderers/XAxisRendererRadarChart.swift; sourceTree = ""; }; - BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PieChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/PieChartDataEntry.swift; sourceTree = ""; }; - BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleStickChartRenderer.swift; path = Source/Charts/Renderers/CandleStickChartRenderer.swift; sourceTree = ""; }; - BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartDataProvider.swift; path = Source/Charts/Interfaces/LineChartDataProvider.swift; sourceTree = ""; }; - C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataSet.swift; sourceTree = ""; }; - C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChevronDownShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift; sourceTree = ""; }; - C574E1BC7E12D937A5471EF8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Tests/Supporting Files/Info.plist"; sourceTree = ""; }; - C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineScatterCandleRadarChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift; sourceTree = ""; }; - C75935E899183DDFA181E2CC /* AxisRendererBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AxisRendererBase.swift; path = Source/Charts/Renderers/AxisRendererBase.swift; sourceTree = ""; }; - C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComponentBase.swift; path = Source/Charts/Components/ComponentBase.swift; sourceTree = ""; }; - C8FB6219B143F8F7DA762950 /* TriangleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TriangleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/TriangleShapeRenderer.swift; sourceTree = ""; }; - C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartBaseDataSet.swift; path = Source/Charts/Data/Implementations/ChartBaseDataSet.swift; sourceTree = ""; }; - CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartDataSet.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartDataSet.swift; sourceTree = ""; }; - D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineChartTests.swift; path = Tests/Charts/LineChartTests.swift; sourceTree = ""; }; - D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartDataEntry.swift; sourceTree = ""; }; - D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultFillFormatter.swift; path = Source/Charts/Formatters/DefaultFillFormatter.swift; sourceTree = ""; }; - DA2AA6CC89F809DCCD7605B4 /* IPieChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IPieChartDataSet.swift; path = Source/Charts/Data/Interfaces/IPieChartDataSet.swift; sourceTree = ""; }; - DD8ED233775EEC31243A6919 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BubbleChartDataEntry.swift; sourceTree = ""; }; - DFB762958EE8E6521563665D /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartAnimationEasing.swift; path = Source/Charts/Animation/ChartAnimationEasing.swift; sourceTree = ""; }; - E120E76C6F1B5877D56126DD /* ChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartData.swift; path = Source/Charts/Data/Implementations/Standard/ChartData.swift; sourceTree = ""; }; - E3F8BFF1CBC58D5B9DBFFB9B /* BarChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/BarChartDataEntry.swift; sourceTree = ""; }; - E64A75540C627E09080B402A /* Legend.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Legend.swift; path = Source/Charts/Components/Legend.swift; sourceTree = ""; }; - E783CFB4889A767C76510917 /* BarChartView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BarChartView.swift; path = Source/Charts/Charts/BarChartView.swift; sourceTree = ""; }; - E7AD2FC320A16CA1EE0A52F4 /* ScatterChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScatterChartData.swift; path = Source/Charts/Data/Implementations/Standard/ScatterChartData.swift; sourceTree = ""; }; - EAE417AAA0FCA0DD00E77489 /* YAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxisRendererHorizontalBarChart.swift; path = Source/Charts/Renderers/YAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - ECE1B1623D3AF69CECAE8562 /* CircleShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CircleShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/CircleShapeRenderer.swift; sourceTree = ""; }; - EDEAF554FD0D68EA4C0E7E49 /* BubbleChartDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BubbleChartDataProvider.swift; path = Source/Charts/Interfaces/BubbleChartDataProvider.swift; sourceTree = ""; }; - F22750328058DEC2F019646F /* ChartDataEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartDataEntry.swift; path = Source/Charts/Data/Implementations/Standard/ChartDataEntry.swift; sourceTree = ""; }; - F368CF209744D8F3B85B1028 /* RadarHighlighter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RadarHighlighter.swift; path = Source/Charts/Highlight/RadarHighlighter.swift; sourceTree = ""; }; - F3788EC55EF908B0805D7C2F /* IBubbleChartDataSet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IBubbleChartDataSet.swift; path = Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift; sourceTree = ""; }; - F4785FEACAE4367F36FB8868 /* CandleChartData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CandleChartData.swift; path = Source/Charts/Data/Implementations/Standard/CandleChartData.swift; sourceTree = ""; }; - F6227A646166E248F90F86AD /* ChartColorTemplates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartColorTemplates.swift; path = Source/Charts/Utils/ChartColorTemplates.swift; sourceTree = ""; }; - F6DEBFAB1D73E944ED430B4F /* ChartLimitLine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChartLimitLine.swift; path = Source/Charts/Components/ChartLimitLine.swift; sourceTree = ""; }; - F715DB2C56C9E0615542625B /* LegendRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegendRenderer.swift; path = Source/Charts/Renderers/LegendRenderer.swift; sourceTree = ""; }; - FA1D3D13180C2E3893A82546 /* IShapeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IShapeRenderer.swift; path = Source/Charts/Renderers/Scatter/IShapeRenderer.swift; sourceTree = ""; }; - FA7BDB22C97F39A4B33E38A7 /* ViewPortJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewPortJob.swift; path = Source/Charts/Jobs/ViewPortJob.swift; sourceTree = ""; }; - FB3A4F5987E58F3E5BE855F9 /* ZoomViewJob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZoomViewJob.swift; path = Source/Charts/Jobs/ZoomViewJob.swift; sourceTree = ""; }; - FB92A80F861C1362EED8D946 /* YAxis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = YAxis.swift; path = Source/Charts/Components/YAxis.swift; sourceTree = ""; }; - FF475B9593B9898853814340 /* Transformer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transformer.swift; path = Source/Charts/Utils/Transformer.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 77997192275C47C45A0A2E9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C7B150D740255670DEB9F455 /* Charts.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C16A09321DC2DCF289FF0E3B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 031D7C33F3BF172E30664862 /* Interfaces */ = { - isa = PBXGroup; - children = ( - 9D7184C8A5A60A3522AB9B05 /* BarChartDataProvider.swift */, - 8FF03960A871A092F5B54315 /* BarLineScatterCandleBubbleChartDataProvider.swift */, - EDEAF554FD0D68EA4C0E7E49 /* BubbleChartDataProvider.swift */, - 3F8146ABC9FC311AF8CA699C /* CandleChartDataProvider.swift */, - 62B73FCEDD3841E7B958F6A9 /* ChartDataProvider.swift */, - A140F644332704916947B58C /* CombinedChartDataProvider.swift */, - BFABD027DAF6851088F002AC /* LineChartDataProvider.swift */, - 2FD37A55B4D85D883E29C744 /* ScatterChartDataProvider.swift */, - ); - name = Interfaces; - sourceTree = ""; - }; - 033FD152BB2F906750106A85 /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; - 098621EDFBF928494B94BEA1 /* Data */ = { - isa = PBXGroup; - children = ( - 3B9DD76FCE8D873300A822C7 /* Implementations */, - DB2D9648877455028EBEAA8F /* Interfaces */, - ); - name = Data; - sourceTree = ""; - }; - 20C350D33133A4D89BB365B1 /* Source */ = { - isa = PBXGroup; - children = ( - E9F158C8C566B26AFD775911 /* Supporting Files */, - 2647844720BC6574A544A337 /* Charts */, - ); - name = Source; - sourceTree = ""; - }; - 2647844720BC6574A544A337 /* Charts */ = { - isa = PBXGroup; - children = ( - A49C1F0F9CCD6E5C143C29F4 /* Animation */, - 8C531E3F3C3DE5843C93C3DA /* Charts */, - 51EF1986C9884C25EED1C2CB /* Components */, - 098621EDFBF928494B94BEA1 /* Data */, - AA79AB82B0ADCA926510B73E /* Filters */, - 74A391010038924F637D6752 /* Formatters */, - 42824E1F334B0C484AF4C594 /* Highlight */, - 031D7C33F3BF172E30664862 /* Interfaces */, - AD1224C45A29A5C88D6B7450 /* Jobs */, - E7589D3E7C2BD2449960AD59 /* Renderers */, - D047819AB7170595896D6FE8 /* Utils */, - ); - name = Charts; - sourceTree = ""; - }; - 3B9DD76FCE8D873300A822C7 /* Implementations */ = { - isa = PBXGroup; - children = ( - C9FE42E868A225C116537368 /* ChartBaseDataSet.swift */, - 740017197A160047EBB8A9A0 /* Standard */, - ); - name = Implementations; - sourceTree = ""; - }; - 42824E1F334B0C484AF4C594 /* Highlight */ = { - isa = PBXGroup; - children = ( - 543729805D897CC03E5F78D3 /* BarHighlighter.swift */, - 5983826927D825EF5F855C28 /* ChartHighlighter.swift */, - 2465CB73738EBAFB46C57288 /* CombinedHighlighter.swift */, - 3D64616883374310C505EC39 /* Highlight.swift */, - 33BE9A97FFA41D3D85CAFFC7 /* HorizontalBarHighlighter.swift */, - 998F2BFE318471AFC05B50AC /* IHighlighter.swift */, - 7036F11832C017E26AC750A4 /* PieHighlighter.swift */, - 04F7B9DF1F2D66E7279771D4 /* PieRadarHighlighter.swift */, - F368CF209744D8F3B85B1028 /* RadarHighlighter.swift */, - 0F099502DA50C56204E7B744 /* Range.swift */, - ); - name = Highlight; - sourceTree = ""; - }; - 51EF1986C9884C25EED1C2CB /* Components */ = { - isa = PBXGroup; - children = ( - 4B7AEFBF4D85B9D2EAAB3071 /* AxisBase.swift */, - F6DEBFAB1D73E944ED430B4F /* ChartLimitLine.swift */, - C8C9A105A7DB64F39DDA648B /* ComponentBase.swift */, - B137428B41C143D5115726C4 /* Description.swift */, - 596963A429D485E3894C4666 /* IMarker.swift */, - E64A75540C627E09080B402A /* Legend.swift */, - 9E7C673B9ED4340F550A9283 /* LegendEntry.swift */, - 392AAEB02DD7B351D92907C2 /* MarkerImage.swift */, - 48164CCD83C51B496533CB77 /* MarkerView.swift */, - 5225ABC3C0C2F65FC094EEBB /* XAxis.swift */, - FB92A80F861C1362EED8D946 /* YAxis.swift */, - ); - name = Components; - sourceTree = ""; - }; - 740017197A160047EBB8A9A0 /* Standard */ = { - isa = PBXGroup; - children = ( - 0108D5925E21A47DA36A66AA /* BarChartData.swift */, - E3F8BFF1CBC58D5B9DBFFB9B /* BarChartDataEntry.swift */, - C31AA65EA27776F8C653C7E8 /* BarChartDataSet.swift */, - 559DB735FEA17AB90676D6CA /* BarLineScatterCandleBubbleChartData.swift */, - 6D717F0808DE7EC8A4AE9C2A /* BarLineScatterCandleBubbleChartDataSet.swift */, - 7EDA3AD550AEFC93C8D15B9C /* BubbleChartData.swift */, - DD8ED233775EEC31243A6919 /* BubbleChartDataEntry.swift */, - B44829AF0ADA583F1F0279B7 /* BubbleChartDataSet.swift */, - F4785FEACAE4367F36FB8868 /* CandleChartData.swift */, - D2E698FF540029B70AC97AD7 /* CandleChartDataEntry.swift */, - 274116834B1B0345D622E027 /* CandleChartDataSet.swift */, - E120E76C6F1B5877D56126DD /* ChartData.swift */, - F22750328058DEC2F019646F /* ChartDataEntry.swift */, - 12409C3EA15787C11AF0D2BC /* ChartDataEntryBase.swift */, - 6CEC0C69C89CE9B99F3B4409 /* ChartDataSet.swift */, - 0DDE409E9ECF54D2C146A6F0 /* CombinedChartData.swift */, - 4C978F31F23C7D21197DC2A1 /* LineChartData.swift */, - A5A75AA73C5AA381DA517959 /* LineChartDataSet.swift */, - 45E31A4356CC6F283C29954B /* LineRadarChartDataSet.swift */, - C58BD7B14BEA440783ED8D2B /* LineScatterCandleRadarChartDataSet.swift */, - 6E03A4987F72414A02A0631B /* PieChartData.swift */, - BD02157CF8CEE1189BF681DA /* PieChartDataEntry.swift */, - A4FB5E3761EF8B4D1E1E1014 /* PieChartDataSet.swift */, - 4BBB57D6FA41029B08F26D7B /* RadarChartData.swift */, - 91EEEDE2AB8F2DA3AFCF0733 /* RadarChartDataEntry.swift */, - B1BA6B21CBDF77A15848994F /* RadarChartDataSet.swift */, - E7AD2FC320A16CA1EE0A52F4 /* ScatterChartData.swift */, - CB1DD1A0F64266A10EE94194 /* ScatterChartDataSet.swift */, - ); - name = Standard; - sourceTree = ""; - }; - 74A391010038924F637D6752 /* Formatters */ = { - isa = PBXGroup; - children = ( - 6A4770E0F75EFFC30707A7C8 /* DefaultAxisValueFormatter.swift */, - D6C1BEFDF17404666C7B6054 /* DefaultFillFormatter.swift */, - 107D8F8163EE54D6D9E916B0 /* DefaultValueFormatter.swift */, - 0BD9DF16AF59680A3BB49452 /* IAxisValueFormatter.swift */, - 818AC6B12505B7C0A53D62F9 /* IFillFormatter.swift */, - 10DD0A02E3CF611BD11EBA9B /* IndexAxisValueFormatter.swift */, - 4EAA8AA30C377D54D22A577A /* IValueFormatter.swift */, - ); - name = Formatters; - sourceTree = ""; - }; - 865A1CF149F52850CAB7F177 = { - isa = PBXGroup; - children = ( - AB2D554102718F209377399E /* Products */, - 033FD152BB2F906750106A85 /* Frameworks */, - 20C350D33133A4D89BB365B1 /* Source */, - D2C26AC015E753014C7571E4 /* Tests */, - ); - sourceTree = ""; - }; - 8C531E3F3C3DE5843C93C3DA /* Charts */ = { - isa = PBXGroup; - children = ( - E783CFB4889A767C76510917 /* BarChartView.swift */, - 45C6D3723C4E001B119CA0C8 /* BarLineChartViewBase.swift */, - 4EED352A98860E031F13AFB7 /* BubbleChartView.swift */, - BA1A58428DC4780BAB4EAADC /* CandleStickChartView.swift */, - 30EFAD7920F76360ADB3B5F5 /* ChartViewBase.swift */, - 11EF1FE22549E885C8F40738 /* CombinedChartView.swift */, - 6021C9E424C36116AEA78CC9 /* HorizontalBarChartView.swift */, - 0619A877C69A95ECCC440A44 /* LineChartView.swift */, - 9DCD13D558BA177D5952AD66 /* PieChartView.swift */, - 4A6C9631C69B2D772BBD9232 /* PieRadarChartViewBase.swift */, - 2440DB759AB93B4A928A3F6F /* RadarChartView.swift */, - 18462BFDD9DEE76D51D40503 /* ScatterChartView.swift */, - ); - name = Charts; - sourceTree = ""; - }; - 9613A7C800C7F065A823D587 /* Charts */ = { - isa = PBXGroup; - children = ( - 5C3F5E1A69EC06E86505F7B1 /* BarChartTests.swift */, - B66817452241E3CC00017CF1 /* HorizontalBarChartTests.swift */, - 224EFF981FBAAC4700CF9B3B /* EquatableTests.swift */, - 7AB9062A28AAB9469752A954 /* ChartUtilsTests.swift */, - B6BF9A551F91993A00E62A5D /* CombinedChartTests.swift */, - D2E1819D72CD7B6C4A4E8048 /* LineChartTests.swift */, - 135F11CD20425AF600D655A3 /* PieChartTests.swift */, - 064989451F5C99C7006E8BB3 /* Snapshot.swift */, - ); - name = Charts; - sourceTree = ""; - }; - A49C1F0F9CCD6E5C143C29F4 /* Animation */ = { - isa = PBXGroup; - children = ( - 3976E5F9D60E30CD94CE6156 /* Animator.swift */, - DFB762958EE8E6521563665D /* ChartAnimationEasing.swift */, - ); - name = Animation; - sourceTree = ""; - }; - AA79AB82B0ADCA926510B73E /* Filters */ = { - isa = PBXGroup; - children = ( - 93EF9709CF635BEE70D1ABC5 /* DataApproximator.swift */, - 9A26C8DA1F87B01700367599 /* DataApproximator+N.swift */, - ); - name = Filters; - sourceTree = ""; - }; - AB2D554102718F209377399E /* Products */ = { - isa = PBXGroup; - children = ( - 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */, - 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - AD1224C45A29A5C88D6B7450 /* Jobs */ = { - isa = PBXGroup; - children = ( - BA157EFF2F952192C11DF937 /* AnimatedMoveViewJob.swift */, - 710D7C9B2F1DB4A331EE405A /* AnimatedViewPortJob.swift */, - 4C2EA58CB336967198D30D20 /* AnimatedZoomViewJob.swift */, - 266E162DA8B29D9AEB6A9397 /* MoveViewJob.swift */, - FA7BDB22C97F39A4B33E38A7 /* ViewPortJob.swift */, - FB3A4F5987E58F3E5BE855F9 /* ZoomViewJob.swift */, - ); - name = Jobs; - sourceTree = ""; - }; - BF662941E21BC049994B2598 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C574E1BC7E12D937A5471EF8 /* Info.plist */, - 41DDB768A1D033A34F0EF9E0 /* Media.xcassets */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - D047819AB7170595896D6FE8 /* Utils */ = { - isa = PBXGroup; - children = ( - F6227A646166E248F90F86AD /* ChartColorTemplates.swift */, - 3FDA09EF973925A110506799 /* ChartUtils.swift */, - 5A4CFFFB65819121595F06F1 /* Fill.swift */, - 3ED23C354AFE81818D78E645 /* Platform.swift */, - 97AD2D4520AF917100F9C24A /* Platform+Accessibility.swift */, - FF475B9593B9898853814340 /* Transformer.swift */, - 324C9127B53A8D39C8B49277 /* TransformerHorizontalBarChart.swift */, - 72EAEBB7CF73E33565FC2896 /* ViewPortHandler.swift */, - ); - name = Utils; - sourceTree = ""; - }; - D2C26AC015E753014C7571E4 /* Tests */ = { - isa = PBXGroup; - children = ( - BF662941E21BC049994B2598 /* Supporting Files */, - 9613A7C800C7F065A823D587 /* Charts */, - ); - name = Tests; - sourceTree = ""; - }; - DB2D9648877455028EBEAA8F /* Interfaces */ = { - isa = PBXGroup; - children = ( - 7A53A9E42FC07FFDACA937C1 /* IBarChartDataSet.swift */, - A5649B272BF3EBFC8A1EF0C1 /* IBarLineScatterCandleBubbleChartDataSet.swift */, - F3788EC55EF908B0805D7C2F /* IBubbleChartDataSet.swift */, - 18BFB0A14A5C47A302A597D9 /* ICandleChartDataSet.swift */, - 3A32510073A303CBB38E094A /* IChartDataSet.swift */, - 429E88F2729735DC092EE556 /* ILineChartDataSet.swift */, - 4F7E6A99D82E6AE3804D5A39 /* ILineRadarChartDataSet.swift */, - 9249AD9AEC8C85772365A128 /* ILineScatterCandleRadarChartDataSet.swift */, - DA2AA6CC89F809DCCD7605B4 /* IPieChartDataSet.swift */, - 2EAD807534620E3B53327F04 /* IRadarChartDataSet.swift */, - 219BC9CEA037F897E92E45D1 /* IScatterChartDataSet.swift */, - ); - name = Interfaces; - sourceTree = ""; - }; - E7589D3E7C2BD2449960AD59 /* Renderers */ = { - isa = PBXGroup; - children = ( - C75935E899183DDFA181E2CC /* AxisRendererBase.swift */, - 75F279974FE650E57A061B09 /* BarChartRenderer.swift */, - 5B1C588E9DF6FFD56D7ADF8E /* BarLineScatterCandleBubbleRenderer.swift */, - 2194AA554712E6BA2677F114 /* BubbleChartRenderer.swift */, - BD5C6D20243EC2F19069AACD /* CandleStickChartRenderer.swift */, - 0216EDC6A1FE272F4EB19FCF /* ChartDataRendererBase.swift */, - 52265C1B343CCC41AF2300E3 /* CombinedChartRenderer.swift */, - 539382766378B702660FDFB2 /* HorizontalBarChartRenderer.swift */, - F715DB2C56C9E0615542625B /* LegendRenderer.swift */, - 0DABDBBCCE6B3620C967F04A /* LineChartRenderer.swift */, - 105FFC9D3773A9C7A60A897F /* LineRadarRenderer.swift */, - 923206233CA89FD03565FF87 /* LineScatterCandleRadarRenderer.swift */, - 46D8013D44629521B1746364 /* PieChartRenderer.swift */, - 7AC9C3D69ACB5BDE22421E15 /* RadarChartRenderer.swift */, - 6F66B32AD8A878CBD6DB6ED2 /* Renderer.swift */, - F7059584CB30EF419CFB3335 /* Scatter */, - 80D5B764EC0AE1E17E55DC67 /* ScatterChartRenderer.swift */, - 1C02C3AF5C92FCFC18224C35 /* XAxisRenderer.swift */, - 1F3D55A7E6176D52DC957D27 /* XAxisRendererHorizontalBarChart.swift */, - BC19DC2434D65FFB446A61B7 /* XAxisRendererRadarChart.swift */, - 688B80F1AA88AE54152BE768 /* YAxisRenderer.swift */, - EAE417AAA0FCA0DD00E77489 /* YAxisRendererHorizontalBarChart.swift */, - AA5A16F4A382813C4FE8BDF9 /* YAxisRendererRadarChart.swift */, - ); - name = Renderers; - sourceTree = ""; - }; - E9F158C8C566B26AFD775911 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 910DBFE1DA1B2CA237A736DF /* Info.plist */, - 4F9922F0641F7955DC6CD324 /* Charts.h */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - F7059584CB30EF419CFB3335 /* Scatter */ = { - isa = PBXGroup; - children = ( - C52E8344160B5E689DA3C25C /* ChevronDownShapeRenderer.swift */, - AA70259ED16FF80D8EEB0F94 /* ChevronUpShapeRenderer.swift */, - ECE1B1623D3AF69CECAE8562 /* CircleShapeRenderer.swift */, - 823F7DB281C6C6F069A69605 /* CrossShapeRenderer.swift */, - FA1D3D13180C2E3893A82546 /* IShapeRenderer.swift */, - 32FC01A016DFF1BA73AF9182 /* SquareShapeRenderer.swift */, - C8FB6219B143F8F7DA762950 /* TriangleShapeRenderer.swift */, - 23D35CF6F9177D77B6B97AE1 /* XShapeRenderer.swift */, - ); - name = Scatter; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - B2B2DD73E237562739EE1F83 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BEFD9518F3A74ACF8FA33308 /* Charts.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - A58A4ED274A941CA248EA921 /* Charts */ = { - isa = PBXNativeTarget; - buildConfigurationList = F1D4AA9E26EA32041FC0E3B6 /* Build configuration list for PBXNativeTarget "Charts" */; - buildPhases = ( - B2B2DD73E237562739EE1F83 /* Headers */, - B5996DB2D9B6F0DB0E9D3F3E /* Sources */, - E257C254E738A8AE047C6FB6 /* Resources */, - C16A09321DC2DCF289FF0E3B /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Charts; - productName = Charts; - productReference = 65AD9E95D9ED4DC0BD73A743 /* Charts.framework */; - productType = "com.apple.product-type.framework"; - }; - F2749BD5443C1CB5FE2080C2 /* ChartsTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = E61E9728E2BF9CC4048B13D5 /* Build configuration list for PBXNativeTarget "ChartsTests" */; - buildPhases = ( - D6BF00523905132F162A7710 /* Build Dependencies */, - E356A2384A2368AB3D2C7912 /* Sources */, - 5B102E31AA8399941CC6248D /* Resources */, - 77997192275C47C45A0A2E9A /* Frameworks */, - 6BA68666BDA3FCF79C2A6801 /* Copy Carthage Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 8676F8A013D87F9961E92465 /* PBXTargetDependency */, - ); - name = ChartsTests; - productName = ChartsTests; - productReference = 1CBBC58C6CE1EBEE9852CE41 /* ChartsTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 193FC8DF32D250560C5F5D77 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 1020; - TargetAttributes = { - A58A4ED274A941CA248EA921 = { - LastSwiftMigration = 0900; - }; - F2749BD5443C1CB5FE2080C2 = { - LastSwiftMigration = 0900; - }; - }; - }; - buildConfigurationList = 493FF4FB1D40FC7C51DDDA6B /* Build configuration list for PBXProject "Charts" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - ); - mainGroup = 865A1CF149F52850CAB7F177; - productRefGroup = AB2D554102718F209377399E /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - A58A4ED274A941CA248EA921 /* Charts */, - F2749BD5443C1CB5FE2080C2 /* ChartsTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 5B102E31AA8399941CC6248D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00B8BF5901C2D220357B0B2A /* Media.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E257C254E738A8AE047C6FB6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 6BA68666BDA3FCF79C2A6801 /* Copy Carthage Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - FBSnapshotTestCase.framework, - ); - name = "Copy Carthage Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = " exec \"${SRCROOT}/scripts/copy-carthage-frameworks.sh\""; - }; - D6BF00523905132F162A7710 /* Build Dependencies */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "Build Dependencies"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "exec \"${SRCROOT}/scripts/build-dependencies.sh\""; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - B5996DB2D9B6F0DB0E9D3F3E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D819331DA581C7E0AC5F8CEF /* Animator.swift in Sources */, - F5A209116FAC68F5903D0B46 /* ChartAnimationEasing.swift in Sources */, - D29BBEF55C9CC90114919CD2 /* BarChartView.swift in Sources */, - 9F760570BCECB0BF5727AF90 /* BarLineChartViewBase.swift in Sources */, - E4B2F363414E84C4D4B8A885 /* BubbleChartView.swift in Sources */, - 60EDF735AAB7195DCFA5FE4D /* CandleStickChartView.swift in Sources */, - 98E2EEF45E8933E4AD182D58 /* ChartViewBase.swift in Sources */, - 0CAF514A280FF6A14E2A1A23 /* CombinedChartView.swift in Sources */, - A692D8BDE42717F69DB790BE /* HorizontalBarChartView.swift in Sources */, - 7E7561DE19DC7CABBE0B2D3A /* LineChartView.swift in Sources */, - 2876E17AEB1D92D7BBC4C38A /* PieChartView.swift in Sources */, - 0A772AEC08246FEC480673E5 /* PieRadarChartViewBase.swift in Sources */, - 6303DBDEE4FAB8E40D023BCE /* RadarChartView.swift in Sources */, - 5C457D9A50DA20869AD1739D /* ScatterChartView.swift in Sources */, - 48E875BBD6540BDE1C1B7D3D /* AxisBase.swift in Sources */, - 4390D74986A92DEF4F4F2BF0 /* ChartLimitLine.swift in Sources */, - FDBDAFA7A5337C6E3992DACE /* ComponentBase.swift in Sources */, - DBC9DB402CC9BB84B76968C4 /* Description.swift in Sources */, - 03960E8148C6AEDACE4B77CC /* IMarker.swift in Sources */, - ECE7EAE7179A7F57CE9BBD8F /* Legend.swift in Sources */, - C20A62D8CB9120523D5FB650 /* LegendEntry.swift in Sources */, - 369DEB23452CB436A3A1A644 /* MarkerImage.swift in Sources */, - 9360348A04723E653FBC8B18 /* MarkerView.swift in Sources */, - 78084A4F1D850D5775BC139E /* XAxis.swift in Sources */, - 2FBA7E982EB57932B9F3E9B5 /* YAxis.swift in Sources */, - E50D291A6B6E69BF0B56A67C /* ChartBaseDataSet.swift in Sources */, - 3395682A1E27756651FF6F4D /* BarChartData.swift in Sources */, - 45C459FA25DFCBE62FA6A06C /* BarChartDataEntry.swift in Sources */, - 17E994DA88777AA1D8CCFC58 /* BarChartDataSet.swift in Sources */, - 7C9CE6718D18859A35146098 /* BarLineScatterCandleBubbleChartData.swift in Sources */, - 53A91F6F86740E26FE733639 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, - E68CA3DC66EB638C956E09B8 /* BubbleChartData.swift in Sources */, - C09E91F67A4AC43C277E7D82 /* BubbleChartDataEntry.swift in Sources */, - 63C0A21D145BFEDED5406E4D /* BubbleChartDataSet.swift in Sources */, - DDE704689FDF2C0E0338488B /* CandleChartData.swift in Sources */, - D50B0EC2BB2245F32E757C50 /* CandleChartDataEntry.swift in Sources */, - 383D68A13E1C3D6A251E5147 /* CandleChartDataSet.swift in Sources */, - 81892994002C0640AD858748 /* ChartData.swift in Sources */, - EAEA60D22CA8C1B7E18D3F7D /* ChartDataEntry.swift in Sources */, - 7D546013F3A14FF5BB7F3294 /* ChartDataEntryBase.swift in Sources */, - 66A18A8EEBAAAC2EDA31ABEC /* ChartDataSet.swift in Sources */, - 331AA2C4BC34F56C23012F02 /* CombinedChartData.swift in Sources */, - C04D269AD4A373FD2B621C43 /* LineChartData.swift in Sources */, - 95B6D6F35684292A62DBEA74 /* LineChartDataSet.swift in Sources */, - 7CB7F74752619B0270CCB0A9 /* LineRadarChartDataSet.swift in Sources */, - FA07D034D9C3BC7795184ACA /* LineScatterCandleRadarChartDataSet.swift in Sources */, - 2C879FC24D7A15D70BE4063F /* PieChartData.swift in Sources */, - 23649EFC635A76022F07FFA6 /* PieChartDataEntry.swift in Sources */, - B539114951455C35BADAE3F3 /* PieChartDataSet.swift in Sources */, - 0C52C70C6E6EA09BD7426386 /* RadarChartData.swift in Sources */, - C2EFB4EC8C97FA9987F1B50D /* RadarChartDataEntry.swift in Sources */, - E3B28EA1E21279DF3889BCE8 /* RadarChartDataSet.swift in Sources */, - 9A26C8DB1F87B01700367599 /* DataApproximator+N.swift in Sources */, - 2B791E64E7C4523B1A63F72A /* ScatterChartData.swift in Sources */, - EB56849433A76B08606B73EB /* ScatterChartDataSet.swift in Sources */, - C3F0DDB7F0A922F0BB7EDB8A /* IBarChartDataSet.swift in Sources */, - AF4AAF3709ED9DDF6362EAE8 /* IBarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 2C40CFFC8D88BEA70E0A50B0 /* IBubbleChartDataSet.swift in Sources */, - 0D8A89398F9BD5DCC8D7F976 /* ICandleChartDataSet.swift in Sources */, - E8F0F4F47CD7D72B4EE5A794 /* IChartDataSet.swift in Sources */, - F941C88BF814DF51C465CB95 /* ILineChartDataSet.swift in Sources */, - 1311BEC21E9CC264E971EFAF /* ILineRadarChartDataSet.swift in Sources */, - 146EE16342C2BADC92E45BF2 /* ILineScatterCandleRadarChartDataSet.swift in Sources */, - FAAD9FF6565DED2652188584 /* IPieChartDataSet.swift in Sources */, - 83BBAF3EDC31FD452F8BF1DB /* IRadarChartDataSet.swift in Sources */, - 50476F8E6662CAFC1EFE0723 /* IScatterChartDataSet.swift in Sources */, - 97E033CC0ABEF0F448DAFA8E /* DataApproximator.swift in Sources */, - 779B46E9F13A087BFA47D539 /* DefaultAxisValueFormatter.swift in Sources */, - F744C510DA9B85C228BBB335 /* DefaultFillFormatter.swift in Sources */, - B0D28C68BB9A958DC56EB214 /* DefaultValueFormatter.swift in Sources */, - B13C74B4FF705D7B595D01EF /* IAxisValueFormatter.swift in Sources */, - B6C9F450D937B87224D29D5C /* IFillFormatter.swift in Sources */, - 967EE2EDDE3337C5C4337C59 /* IndexAxisValueFormatter.swift in Sources */, - A40ACF0CCE96EEE104B0463D /* IValueFormatter.swift in Sources */, - 3CBE95F1E9394FA08CDCF31E /* BarHighlighter.swift in Sources */, - D326491E8BCDE54A0921E137 /* ChartHighlighter.swift in Sources */, - 64FA1EDB4DC1F65727D52D10 /* CombinedHighlighter.swift in Sources */, - 758EB1C75063ED3373542F3B /* Highlight.swift in Sources */, - 4E98788ABEF6496C23F3E6C6 /* HorizontalBarHighlighter.swift in Sources */, - 203A39685CC96FC625F616E4 /* IHighlighter.swift in Sources */, - 73EDF662AD989E930D365B72 /* PieHighlighter.swift in Sources */, - 3097296AC7FFA994FE4AD312 /* PieRadarHighlighter.swift in Sources */, - C33E1AF5471A60BA42DAF52E /* RadarHighlighter.swift in Sources */, - 9C91C151608E2D6E19B1EAD1 /* Range.swift in Sources */, - 00BC23EF0E04E17188344403 /* BarChartDataProvider.swift in Sources */, - 28FEE609C5B22FD64C7E5D10 /* BarLineScatterCandleBubbleChartDataProvider.swift in Sources */, - 4272DA5D44AF7DA05A5A8287 /* BubbleChartDataProvider.swift in Sources */, - 30DCC4BAA5601B154ABADA13 /* CandleChartDataProvider.swift in Sources */, - FD37AAC0270F390FFC470A65 /* ChartDataProvider.swift in Sources */, - 65EA404AE098EBCE8D5DE04B /* CombinedChartDataProvider.swift in Sources */, - 2BA03CEC36BADCF682F1328B /* LineChartDataProvider.swift in Sources */, - 0511E43EF3FD2CDE7F7F15DB /* ScatterChartDataProvider.swift in Sources */, - 7EE6EFE70CF4D8B09CAFCD01 /* AnimatedMoveViewJob.swift in Sources */, - CC7F8198A13249B5DEBBF25E /* AnimatedViewPortJob.swift in Sources */, - 0577C2B38BCE4C871F262714 /* AnimatedZoomViewJob.swift in Sources */, - 02A6E6E1A82A27A66B8D08C4 /* MoveViewJob.swift in Sources */, - 9400725714D0DA707DDECD2E /* ViewPortJob.swift in Sources */, - AEE9C4E4AC02B8FB3CD21975 /* ZoomViewJob.swift in Sources */, - ECECC58CEF03B1718F8267E8 /* AxisRendererBase.swift in Sources */, - 23FA50B2730D8C7ACA091C4F /* BarChartRenderer.swift in Sources */, - 219192CA6B4895319AB49DCA /* BarLineScatterCandleBubbleRenderer.swift in Sources */, - 56E0F5EA9255B9B92876E040 /* BubbleChartRenderer.swift in Sources */, - 8BCCD709AACC565613D9DA68 /* CandleStickChartRenderer.swift in Sources */, - F37B07008B8AE7F3909FFB9C /* ChartDataRendererBase.swift in Sources */, - 05253AFC448C107DEF54C2FE /* CombinedChartRenderer.swift in Sources */, - F100D68395F169B93590FA96 /* HorizontalBarChartRenderer.swift in Sources */, - 2B821AAC3EBD60A73EACBCE6 /* LegendRenderer.swift in Sources */, - 5F96E95C7073D21EFE02BCF7 /* LineChartRenderer.swift in Sources */, - 24151B0729D77251A8494D70 /* LineRadarRenderer.swift in Sources */, - B6DCC229615EFE706F64A37D /* LineScatterCandleRadarRenderer.swift in Sources */, - 795E100895C24049509F1EDE /* PieChartRenderer.swift in Sources */, - 97AD2D4620AF917100F9C24A /* Platform+Accessibility.swift in Sources */, - 69EA073EDF75D49ABE1715D6 /* RadarChartRenderer.swift in Sources */, - CEF68F42A5390A73113F3663 /* Renderer.swift in Sources */, - 796D3E63A37A95FD9D1AB9A1 /* ChevronDownShapeRenderer.swift in Sources */, - F103D90FC5DEEA0D7BB4407E /* ChevronUpShapeRenderer.swift in Sources */, - B85DEB06B4C1AFFC8A0E3295 /* CircleShapeRenderer.swift in Sources */, - 0529DD51622C8769C1121F90 /* CrossShapeRenderer.swift in Sources */, - 8A9FF54E2075A9047CC8E953 /* IShapeRenderer.swift in Sources */, - 8EF7B3FBE37F72CC030CD865 /* SquareShapeRenderer.swift in Sources */, - 8F4B1A9060472764073DFA0B /* TriangleShapeRenderer.swift in Sources */, - 93A94E1FF55041A6032891FE /* XShapeRenderer.swift in Sources */, - 5DC9BC1B6C128B2C9995AB84 /* ScatterChartRenderer.swift in Sources */, - 41BEBF8BDB9DC403B5697D67 /* XAxisRenderer.swift in Sources */, - 2A94F1724FEA9E16A81A8E1F /* XAxisRendererHorizontalBarChart.swift in Sources */, - 4FACC6FD308AFB231EB4A93D /* XAxisRendererRadarChart.swift in Sources */, - 41B13F3179ACB5A3837C6E55 /* YAxisRenderer.swift in Sources */, - 846AC09831FA93F66732591B /* YAxisRendererHorizontalBarChart.swift in Sources */, - 11F68AA2EBF822D7208EE002 /* YAxisRendererRadarChart.swift in Sources */, - 40C82F2209E1BA9E41E8F3DA /* ChartColorTemplates.swift in Sources */, - CB785FE9B6B312408D17BC3B /* ChartUtils.swift in Sources */, - 8102A555DD6C93AC1290EA7C /* Fill.swift in Sources */, - E9FF0ECB5E0CA92DBF4C1BC4 /* Platform.swift in Sources */, - DE0F434FE8C24C52B023370F /* Transformer.swift in Sources */, - 8A463E2947F211C594CA5E95 /* TransformerHorizontalBarChart.swift in Sources */, - 515E286E6C47594D3FFA3DD1 /* ViewPortHandler.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E356A2384A2368AB3D2C7912 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B11556EB7DC034E2FC958E4 /* BarChartTests.swift in Sources */, - 8E1192F7A7152E9DA92C56A9 /* ChartUtilsTests.swift in Sources */, - B6BF9A561F91993A00E62A5D /* CombinedChartTests.swift in Sources */, - 2BF85BEA981B359A65E9BF67 /* LineChartTests.swift in Sources */, - B66817462241E3CC00017CF1 /* HorizontalBarChartTests.swift in Sources */, - 135F11CE20425AF600D655A3 /* PieChartTests.swift in Sources */, - 064989461F5C99C7006E8BB3 /* Snapshot.swift in Sources */, - 224EFF991FBAAC4700CF9B3B /* EquatableTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 8676F8A013D87F9961E92465 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Charts; - target = A58A4ED274A941CA248EA921 /* Charts */; - targetProxy = C2005F425A98942473657ED2 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 0EF2164C35AB4D391B503317 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Source/Supporting Files/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MARKETING_VERSION = 3.4.0; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.Charts; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 4DD0BFDA94D4BC68192A1895 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = ( - "$(SRCROOT)/Carthage/Build/tvOS/", - "$(inherited)", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = ( - "$(SRCROOT)/Carthage/Build/iOS/", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Tests/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - A17F60813C38081A2F1803D4 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - C5C79E736CA16C93F421E934 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = ""; - COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2,3,4"; - }; - name = Debug; - }; - D9365FBCFFEE9FCFC79EC4C7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = YES; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - FRAMEWORK_VERSION = A; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Source/Supporting Files/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MARKETING_VERSION = 3.4.0; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.Charts; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "macosx iphoneos iphonesimulator appletvos appletvsimulator"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - FA978B0A385680C0086D4D49 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "FRAMEWORK_SEARCH_PATHS[sdk=appletv*]" = ( - "$(SRCROOT)/Carthage/Build/tvOS/", - "$(inherited)", - ); - "FRAMEWORK_SEARCH_PATHS[sdk=iphone*]" = ( - "$(SRCROOT)/Carthage/Build/iOS/", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Tests/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.4; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = macosx; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator appletvos appletvsimulator"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 493FF4FB1D40FC7C51DDDA6B /* Build configuration list for PBXProject "Charts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C5C79E736CA16C93F421E934 /* Debug */, - A17F60813C38081A2F1803D4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E61E9728E2BF9CC4048B13D5 /* Build configuration list for PBXNativeTarget "ChartsTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FA978B0A385680C0086D4D49 /* Release */, - 4DD0BFDA94D4BC68192A1895 /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F1D4AA9E26EA32041FC0E3B6 /* Build configuration list for PBXNativeTarget "Charts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - D9365FBCFFEE9FCFC79EC4C7 /* Release */, - 0EF2164C35AB4D391B503317 /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 193FC8DF32D250560C5F5D77 /* Project object */; -} diff --git a/Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme b/Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme deleted file mode 100644 index 433e0511..00000000 --- a/Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme b/Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme deleted file mode 100644 index b3f7d608..00000000 --- a/Carthage/Checkouts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTests.xcscheme +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Charts/Charts.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/Charts/Charts.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 088d4b73..00000000 --- a/Carthage/Checkouts/Charts/Charts.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/Carthage/Checkouts/Charts/Charts.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Carthage/Checkouts/Charts/Charts.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/Carthage/Checkouts/Charts/Charts.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/project.pbxproj b/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/project.pbxproj deleted file mode 100644 index 262a6f39..00000000 --- a/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/project.pbxproj +++ /dev/null @@ -1,996 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 06A5D1861B78675500915098 /* UIGraphics+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A5D1851B78675500915098 /* UIGraphics+Extensions.swift */; }; - 55E356531ADC63BF00A57971 /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356521ADC63BF00A57971 /* BubbleChartView.swift */; }; - 55E356571ADC63CD00A57971 /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356541ADC63CD00A57971 /* BubbleChartData.swift */; }; - 55E356581ADC63CD00A57971 /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356551ADC63CD00A57971 /* BubbleChartDataEntry.swift */; }; - 55E356591ADC63CD00A57971 /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356561ADC63CD00A57971 /* BubbleChartDataSet.swift */; }; - 55E3565B1ADC63EB00A57971 /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3565A1ADC63EB00A57971 /* BubbleChartRenderer.swift */; }; - 5B0032451B6524AD00B6A2FE /* ChartHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0032441B6524AD00B6A2FE /* ChartHighlight.swift */; }; - 5B0032471B6524D300B6A2FE /* ChartRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0032461B6524D300B6A2FE /* ChartRange.swift */; }; - 5B0032491B6525FC00B6A2FE /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0032481B6525FC00B6A2FE /* ChartHighlighter.swift */; }; - 5B00324B1B652BF900B6A2FE /* BarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00324A1B652BF900B6A2FE /* BarChartHighlighter.swift */; }; - 5B00324D1B65351C00B6A2FE /* HorizontalBarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00324C1B65351C00B6A2FE /* HorizontalBarChartHighlighter.swift */; }; - 5B378F171AD500A4009414A4 /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B378F161AD500A4009414A4 /* ChartAnimationEasing.swift */; }; - 5B4BCD401AA9C4930063F019 /* ChartTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4BCD3F1AA9C4930063F019 /* ChartTransformer.swift */; }; - 5B6556F71AB72BA000FFBFD3 /* ChartComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6556F61AB72BA000FFBFD3 /* ChartComponentBase.swift */; }; - 5B6654D91BB0A86F00890030 /* ChartDefaultXAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6654D51BB0A86F00890030 /* ChartDefaultXAxisValueFormatter.swift */; settings = {ASSET_TAGS = (); }; }; - 5B6654DA1BB0A86F00890030 /* ChartFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6654D61BB0A86F00890030 /* ChartFillFormatter.swift */; settings = {ASSET_TAGS = (); }; }; - 5B6654DB1BB0A86F00890030 /* ChartXAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6654D71BB0A86F00890030 /* ChartXAxisValueFormatter.swift */; settings = {ASSET_TAGS = (); }; }; - 5B680D1D1A9D16F90026A057 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B680D1C1A9D16F90026A057 /* UIKit.framework */; }; - 5B680D1F1A9D17C30026A057 /* ChartAxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6A1A9D151C00CE82E1 /* ChartAxisBase.swift */; }; - 5B680D201A9D17C30026A057 /* ChartLegend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6B1A9D151C00CE82E1 /* ChartLegend.swift */; }; - 5B680D211A9D17C30026A057 /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6C1A9D151C00CE82E1 /* ChartLimitLine.swift */; }; - 5B680D221A9D17C30026A057 /* ChartXAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6D1A9D151C00CE82E1 /* ChartXAxis.swift */; }; - 5B680D231A9D17C30026A057 /* ChartYAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6E1A9D151C00CE82E1 /* ChartYAxis.swift */; }; - 5B680D271A9D17C30026A057 /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC791A9D151C00CE82E1 /* ChartColorTemplates.swift */; }; - 5B680D291A9D17C30026A057 /* ChartSelectionDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC7B1A9D151C00CE82E1 /* ChartSelectionDetail.swift */; }; - 5B680D2A1A9D17C30026A057 /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC7C1A9D151C00CE82E1 /* ChartUtils.swift */; }; - 5B680D3D1A9D1AD90026A057 /* Charts.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B680D3C1A9D1AD90026A057 /* Charts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B6A546B1AA5C23F000F57C2 /* ChartMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A546A1AA5C23F000F57C2 /* ChartMarker.swift */; }; - 5B6A546E1AA5D2DC000F57C2 /* ChartAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A546D1AA5D2DC000F57C2 /* ChartAnimator.swift */; }; - 5B6A54701AA5DB34000F57C2 /* ChartRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A546F1AA5DB34000F57C2 /* ChartRendererBase.swift */; }; - 5B6A54741AA5DEDC000F57C2 /* ChartXAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54731AA5DEDC000F57C2 /* ChartXAxisRenderer.swift */; }; - 5B6A54761AA5DEE3000F57C2 /* ChartXAxisRendererBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54751AA5DEE3000F57C2 /* ChartXAxisRendererBarChart.swift */; }; - 5B6A54781AA5DEF0000F57C2 /* ChartXAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54771AA5DEF0000F57C2 /* ChartXAxisRendererRadarChart.swift */; }; - 5B6A547C1AA5DF02000F57C2 /* ChartXAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A547B1AA5DF02000F57C2 /* ChartXAxisRendererHorizontalBarChart.swift */; }; - 5B6A547E1AA5DF1A000F57C2 /* ChartYAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A547D1AA5DF1A000F57C2 /* ChartYAxisRenderer.swift */; }; - 5B6A54801AA5DF28000F57C2 /* ChartYAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A547F1AA5DF28000F57C2 /* ChartYAxisRendererHorizontalBarChart.swift */; }; - 5B6A54821AA5DF34000F57C2 /* ChartYAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54811AA5DF34000F57C2 /* ChartYAxisRendererRadarChart.swift */; }; - 5B6A54851AA669C9000F57C2 /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54841AA669C9000F57C2 /* ScatterChartRenderer.swift */; }; - 5B6A54871AA669F4000F57C2 /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54861AA669F4000F57C2 /* RadarChartRenderer.swift */; }; - 5B6A54891AA66A1A000F57C2 /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54881AA66A1A000F57C2 /* PieChartRenderer.swift */; }; - 5B6A548B1AA66A3D000F57C2 /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A548A1AA66A3D000F57C2 /* LineChartRenderer.swift */; }; - 5B6A548D1AA66A60000F57C2 /* ChartLegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A548C1AA66A60000F57C2 /* ChartLegendRenderer.swift */; }; - 5B6A548F1AA66A7A000F57C2 /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A548E1AA66A7A000F57C2 /* HorizontalBarChartRenderer.swift */; }; - 5B6A54911AA66A8D000F57C2 /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54901AA66A8D000F57C2 /* ChartDataRendererBase.swift */; }; - 5B6A54931AA66AAB000F57C2 /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54921AA66AAB000F57C2 /* CombinedChartRenderer.swift */; }; - 5B6A54951AA66AC0000F57C2 /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54941AA66AC0000F57C2 /* CandleStickChartRenderer.swift */; }; - 5B6A54971AA66AD2000F57C2 /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54961AA66AD2000F57C2 /* BarChartRenderer.swift */; }; - 5B6A54991AA66B14000F57C2 /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54981AA66B14000F57C2 /* BarChartView.swift */; }; - 5B6A549B1AA66B2C000F57C2 /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A549A1AA66B2C000F57C2 /* BarLineChartViewBase.swift */; }; - 5B6A549D1AA66B3C000F57C2 /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A549C1AA66B3C000F57C2 /* CandleStickChartView.swift */; }; - 5B6A549F1AA66B59000F57C2 /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A549E1AA66B59000F57C2 /* CombinedChartView.swift */; }; - 5B6A54A31AA66B7C000F57C2 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A21AA66B7C000F57C2 /* LineChartView.swift */; }; - 5B6A54A51AA66B92000F57C2 /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A41AA66B92000F57C2 /* PieChartView.swift */; }; - 5B6A54A71AA66BA7000F57C2 /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A61AA66BA7000F57C2 /* PieRadarChartViewBase.swift */; }; - 5B6A54A91AA66BBA000F57C2 /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A81AA66BBA000F57C2 /* RadarChartView.swift */; }; - 5B6A54AB1AA66BC8000F57C2 /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54AA1AA66BC8000F57C2 /* ScatterChartView.swift */; }; - 5B6A54AC1AA66C1E000F57C2 /* ChartAxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54711AA5DCA8000F57C2 /* ChartAxisRendererBase.swift */; }; - 5B6A54CC1AA74516000F57C2 /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54B71AA74516000F57C2 /* BarChartData.swift */; }; - 5B6A54CD1AA74516000F57C2 /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54B81AA74516000F57C2 /* BarChartDataEntry.swift */; }; - 5B6A54CE1AA74516000F57C2 /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54B91AA74516000F57C2 /* BarChartDataSet.swift */; }; - 5B6A54CF1AA74516000F57C2 /* BarLineScatterCandleBubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BA1AA74516000F57C2 /* BarLineScatterCandleBubbleChartData.swift */; }; - 5B6A54D01AA74516000F57C2 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BB1AA74516000F57C2 /* BarLineScatterCandleBubbleChartDataSet.swift */; }; - 5B6A54D11AA74516000F57C2 /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BC1AA74516000F57C2 /* CandleChartData.swift */; }; - 5B6A54D21AA74516000F57C2 /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BD1AA74516000F57C2 /* CandleChartDataEntry.swift */; }; - 5B6A54D31AA74516000F57C2 /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BE1AA74516000F57C2 /* CandleChartDataSet.swift */; }; - 5B6A54D41AA74516000F57C2 /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BF1AA74516000F57C2 /* CombinedChartData.swift */; }; - 5B6A54D51AA74516000F57C2 /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C01AA74516000F57C2 /* ChartData.swift */; }; - 5B6A54D61AA74516000F57C2 /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C11AA74516000F57C2 /* ChartDataEntry.swift */; }; - 5B6A54D71AA74516000F57C2 /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C21AA74516000F57C2 /* ChartDataSet.swift */; }; - 5B6A54D81AA74516000F57C2 /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C31AA74516000F57C2 /* LineChartData.swift */; }; - 5B6A54D91AA74516000F57C2 /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C41AA74516000F57C2 /* LineChartDataSet.swift */; }; - 5B6A54DA1AA74516000F57C2 /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C51AA74516000F57C2 /* LineRadarChartDataSet.swift */; }; - 5B6A54DB1AA74516000F57C2 /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C61AA74516000F57C2 /* PieChartData.swift */; }; - 5B6A54DC1AA74516000F57C2 /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C71AA74516000F57C2 /* PieChartDataSet.swift */; }; - 5B6A54DD1AA74516000F57C2 /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C81AA74516000F57C2 /* RadarChartData.swift */; }; - 5B6A54DE1AA74516000F57C2 /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C91AA74516000F57C2 /* RadarChartDataSet.swift */; }; - 5B6A54DF1AA74516000F57C2 /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54CA1AA74516000F57C2 /* ScatterChartData.swift */; }; - 5B6A54E01AA74516000F57C2 /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54CB1AA74516000F57C2 /* ScatterChartDataSet.swift */; }; - 5B8FE2AF1B68F8F600910C9E /* LineScatterCandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8FE2AE1B68F8F600910C9E /* LineScatterCandleChartDataSet.swift */; }; - 5B8FE2B11B68FFF900910C9E /* LineScatterCandleRadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8FE2B01B68FFF900910C9E /* LineScatterCandleRadarChartRenderer.swift */; }; - 5BA8EC7D1A9D151C00CE82E1 /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC671A9D151C00CE82E1 /* ChartViewBase.swift */; }; - 5BA8EC881A9D151C00CE82E1 /* ChartDataApproximatorFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC751A9D151C00CE82E1 /* ChartDataApproximatorFilter.swift */; }; - 5BA8EC891A9D151C00CE82E1 /* ChartDataBaseFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC761A9D151C00CE82E1 /* ChartDataBaseFilter.swift */; }; - 5BAAA8561BB08E1D00B20D4D /* CombinedHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BAAA8551BB08E1D00B20D4D /* CombinedHighlighter.swift */; settings = {ASSET_TAGS = (); }; }; - 5BB6EC1D1ACC28AB006E9C25 /* ChartTransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB6EC1C1ACC28AB006E9C25 /* ChartTransformerHorizontalBarChart.swift */; }; - 5BD8F06D1AB897D500566E05 /* ChartViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD8F06C1AB897D500566E05 /* ChartViewPortHandler.swift */; }; - 5BD8F06E1AB89AD800566E05 /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A01AA66B6A000F57C2 /* HorizontalBarChartView.swift */; }; - A52C5C3A1BAC5CA400594CDD /* ChartsTV.h in Headers */ = {isa = PBXBuildFile; fileRef = A52C5C391BAC5CA400594CDD /* ChartsTV.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A52C5C3F1BAC5D1100594CDD /* ChartAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A546D1AA5D2DC000F57C2 /* ChartAnimator.swift */; }; - A52C5C401BAC5D1100594CDD /* ChartAnimationEasing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B378F161AD500A4009414A4 /* ChartAnimationEasing.swift */; }; - A52C5C411BAC5D1100594CDD /* BarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54981AA66B14000F57C2 /* BarChartView.swift */; }; - A52C5C421BAC5D1100594CDD /* BarLineChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A549A1AA66B2C000F57C2 /* BarLineChartViewBase.swift */; }; - A52C5C431BAC5D1100594CDD /* BubbleChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356521ADC63BF00A57971 /* BubbleChartView.swift */; }; - A52C5C441BAC5D1100594CDD /* CandleStickChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A549C1AA66B3C000F57C2 /* CandleStickChartView.swift */; }; - A52C5C451BAC5D1100594CDD /* ChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC671A9D151C00CE82E1 /* ChartViewBase.swift */; }; - A52C5C461BAC5D1100594CDD /* CombinedChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A549E1AA66B59000F57C2 /* CombinedChartView.swift */; }; - A52C5C471BAC5D1100594CDD /* HorizontalBarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A01AA66B6A000F57C2 /* HorizontalBarChartView.swift */; }; - A52C5C481BAC5D1100594CDD /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A21AA66B7C000F57C2 /* LineChartView.swift */; }; - A52C5C491BAC5D1100594CDD /* PieChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A41AA66B92000F57C2 /* PieChartView.swift */; }; - A52C5C4A1BAC5D1100594CDD /* PieRadarChartViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A61AA66BA7000F57C2 /* PieRadarChartViewBase.swift */; }; - A52C5C4B1BAC5D1100594CDD /* RadarChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54A81AA66BBA000F57C2 /* RadarChartView.swift */; }; - A52C5C4C1BAC5D1100594CDD /* ScatterChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54AA1AA66BC8000F57C2 /* ScatterChartView.swift */; }; - A52C5C4D1BAC5D1100594CDD /* ChartAxisBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6A1A9D151C00CE82E1 /* ChartAxisBase.swift */; }; - A52C5C4E1BAC5D1100594CDD /* ChartComponentBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6556F61AB72BA000FFBFD3 /* ChartComponentBase.swift */; }; - A52C5C4F1BAC5D1100594CDD /* ChartLegend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6B1A9D151C00CE82E1 /* ChartLegend.swift */; }; - A52C5C501BAC5D1100594CDD /* ChartLimitLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6C1A9D151C00CE82E1 /* ChartLimitLine.swift */; }; - A52C5C511BAC5D1100594CDD /* ChartMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A546A1AA5C23F000F57C2 /* ChartMarker.swift */; }; - A52C5C521BAC5D1100594CDD /* ChartXAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6D1A9D151C00CE82E1 /* ChartXAxis.swift */; }; - A52C5C531BAC5D1100594CDD /* ChartYAxis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC6E1A9D151C00CE82E1 /* ChartYAxis.swift */; }; - A52C5C541BAC5D1100594CDD /* BarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54B71AA74516000F57C2 /* BarChartData.swift */; }; - A52C5C551BAC5D1100594CDD /* BarChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54B81AA74516000F57C2 /* BarChartDataEntry.swift */; }; - A52C5C561BAC5D1100594CDD /* BarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54B91AA74516000F57C2 /* BarChartDataSet.swift */; }; - A52C5C571BAC5D1100594CDD /* BarLineScatterCandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BA1AA74516000F57C2 /* BarLineScatterCandleChartData.swift */; }; - A52C5C581BAC5D1100594CDD /* BarLineScatterCandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BB1AA74516000F57C2 /* BarLineScatterCandleChartDataSet.swift */; }; - A52C5C591BAC5D1100594CDD /* BubbleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356541ADC63CD00A57971 /* BubbleChartData.swift */; }; - A52C5C5A1BAC5D1100594CDD /* BubbleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356551ADC63CD00A57971 /* BubbleChartDataEntry.swift */; }; - A52C5C5B1BAC5D1100594CDD /* BubbleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E356561ADC63CD00A57971 /* BubbleChartDataSet.swift */; }; - A52C5C5C1BAC5D1100594CDD /* CandleChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BC1AA74516000F57C2 /* CandleChartData.swift */; }; - A52C5C5D1BAC5D1100594CDD /* CandleChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BD1AA74516000F57C2 /* CandleChartDataEntry.swift */; }; - A52C5C5E1BAC5D1100594CDD /* CandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BE1AA74516000F57C2 /* CandleChartDataSet.swift */; }; - A52C5C5F1BAC5D1100594CDD /* CombinedChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54BF1AA74516000F57C2 /* CombinedChartData.swift */; }; - A52C5C601BAC5D1100594CDD /* ChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C01AA74516000F57C2 /* ChartData.swift */; }; - A52C5C611BAC5D1100594CDD /* ChartDataEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C11AA74516000F57C2 /* ChartDataEntry.swift */; }; - A52C5C621BAC5D1100594CDD /* ChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C21AA74516000F57C2 /* ChartDataSet.swift */; }; - A52C5C631BAC5D1100594CDD /* LineChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C31AA74516000F57C2 /* LineChartData.swift */; }; - A52C5C641BAC5D1100594CDD /* LineChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C41AA74516000F57C2 /* LineChartDataSet.swift */; }; - A52C5C651BAC5D1100594CDD /* LineRadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C51AA74516000F57C2 /* LineRadarChartDataSet.swift */; }; - A52C5C661BAC5D1100594CDD /* LineScatterCandleChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8FE2AE1B68F8F600910C9E /* LineScatterCandleChartDataSet.swift */; }; - A52C5C671BAC5D1100594CDD /* PieChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C61AA74516000F57C2 /* PieChartData.swift */; }; - A52C5C681BAC5D1100594CDD /* PieChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C71AA74516000F57C2 /* PieChartDataSet.swift */; }; - A52C5C691BAC5D1100594CDD /* RadarChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C81AA74516000F57C2 /* RadarChartData.swift */; }; - A52C5C6A1BAC5D1100594CDD /* RadarChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54C91AA74516000F57C2 /* RadarChartDataSet.swift */; }; - A52C5C6B1BAC5D1100594CDD /* ScatterChartData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54CA1AA74516000F57C2 /* ScatterChartData.swift */; }; - A52C5C6C1BAC5D1100594CDD /* ScatterChartDataSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54CB1AA74516000F57C2 /* ScatterChartDataSet.swift */; }; - A52C5C6D1BAC5D1100594CDD /* ChartDataApproximatorFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC751A9D151C00CE82E1 /* ChartDataApproximatorFilter.swift */; }; - A52C5C6E1BAC5D1100594CDD /* ChartDataBaseFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC761A9D151C00CE82E1 /* ChartDataBaseFilter.swift */; }; - A52C5C6F1BAC5D1100594CDD /* ChartHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0032441B6524AD00B6A2FE /* ChartHighlight.swift */; }; - A52C5C701BAC5D1100594CDD /* ChartRange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0032461B6524D300B6A2FE /* ChartRange.swift */; }; - A52C5C711BAC5D1100594CDD /* ChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0032481B6525FC00B6A2FE /* ChartHighlighter.swift */; }; - A52C5C721BAC5D1100594CDD /* BarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00324A1B652BF900B6A2FE /* BarChartHighlighter.swift */; }; - A52C5C731BAC5D1100594CDD /* HorizontalBarChartHighlighter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00324C1B65351C00B6A2FE /* HorizontalBarChartHighlighter.swift */; }; - A52C5C741BAC5D1100594CDD /* ChartAxisRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54711AA5DCA8000F57C2 /* ChartAxisRendererBase.swift */; }; - A52C5C751BAC5D1100594CDD /* BarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54961AA66AD2000F57C2 /* BarChartRenderer.swift */; }; - A52C5C761BAC5D1100594CDD /* BubbleChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E3565A1ADC63EB00A57971 /* BubbleChartRenderer.swift */; }; - A52C5C771BAC5D1100594CDD /* CandleStickChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54941AA66AC0000F57C2 /* CandleStickChartRenderer.swift */; }; - A52C5C781BAC5D1100594CDD /* CombinedChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54921AA66AAB000F57C2 /* CombinedChartRenderer.swift */; }; - A52C5C791BAC5D1100594CDD /* ChartDataRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54901AA66A8D000F57C2 /* ChartDataRendererBase.swift */; }; - A52C5C7A1BAC5D1200594CDD /* HorizontalBarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A548E1AA66A7A000F57C2 /* HorizontalBarChartRenderer.swift */; }; - A52C5C7B1BAC5D1200594CDD /* ChartLegendRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A548C1AA66A60000F57C2 /* ChartLegendRenderer.swift */; }; - A52C5C7C1BAC5D1200594CDD /* LineChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A548A1AA66A3D000F57C2 /* LineChartRenderer.swift */; }; - A52C5C7D1BAC5D1200594CDD /* LineScatterCandleRadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8FE2B01B68FFF900910C9E /* LineScatterCandleRadarChartRenderer.swift */; }; - A52C5C7E1BAC5D1200594CDD /* PieChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54881AA66A1A000F57C2 /* PieChartRenderer.swift */; }; - A52C5C7F1BAC5D1200594CDD /* RadarChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54861AA669F4000F57C2 /* RadarChartRenderer.swift */; }; - A52C5C801BAC5D1200594CDD /* ChartRendererBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A546F1AA5DB34000F57C2 /* ChartRendererBase.swift */; }; - A52C5C811BAC5D1200594CDD /* ScatterChartRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54841AA669C9000F57C2 /* ScatterChartRenderer.swift */; }; - A52C5C821BAC5D1200594CDD /* ChartXAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54731AA5DEDC000F57C2 /* ChartXAxisRenderer.swift */; }; - A52C5C831BAC5D1200594CDD /* ChartXAxisRendererBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54751AA5DEE3000F57C2 /* ChartXAxisRendererBarChart.swift */; }; - A52C5C841BAC5D1200594CDD /* ChartXAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A547B1AA5DF02000F57C2 /* ChartXAxisRendererHorizontalBarChart.swift */; }; - A52C5C851BAC5D1200594CDD /* ChartXAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54771AA5DEF0000F57C2 /* ChartXAxisRendererRadarChart.swift */; }; - A52C5C861BAC5D1200594CDD /* ChartYAxisRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A547D1AA5DF1A000F57C2 /* ChartYAxisRenderer.swift */; }; - A52C5C871BAC5D1200594CDD /* ChartYAxisRendererHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A547F1AA5DF28000F57C2 /* ChartYAxisRendererHorizontalBarChart.swift */; }; - A52C5C881BAC5D1200594CDD /* ChartYAxisRendererRadarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B6A54811AA5DF34000F57C2 /* ChartYAxisRendererRadarChart.swift */; }; - A52C5C891BAC5D1200594CDD /* ChartColorTemplates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC791A9D151C00CE82E1 /* ChartColorTemplates.swift */; }; - A52C5C8A1BAC5D1200594CDD /* ChartFillFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4BCD3D1AA9C0A60063F019 /* ChartFillFormatter.swift */; }; - A52C5C8B1BAC5D1200594CDD /* ChartSelectionDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC7B1A9D151C00CE82E1 /* ChartSelectionDetail.swift */; }; - A52C5C8C1BAC5D1200594CDD /* ChartTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B4BCD3F1AA9C4930063F019 /* ChartTransformer.swift */; }; - A52C5C8D1BAC5D1200594CDD /* ChartTransformerHorizontalBarChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB6EC1C1ACC28AB006E9C25 /* ChartTransformerHorizontalBarChart.swift */; }; - A52C5C8E1BAC5D1200594CDD /* ChartUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA8EC7C1A9D151C00CE82E1 /* ChartUtils.swift */; }; - A52C5C8F1BAC5D1200594CDD /* ChartViewPortHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD8F06C1AB897D500566E05 /* ChartViewPortHandler.swift */; }; - A52C5C901BAC5D1200594CDD /* UIGraphics+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A5D1851B78675500915098 /* UIGraphics+Extensions.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 06A5D1851B78675500915098 /* UIGraphics+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIGraphics+Extensions.swift"; sourceTree = ""; }; - 55E356521ADC63BF00A57971 /* BubbleChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartView.swift; sourceTree = ""; }; - 55E356541ADC63CD00A57971 /* BubbleChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartData.swift; sourceTree = ""; }; - 55E356551ADC63CD00A57971 /* BubbleChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartDataEntry.swift; sourceTree = ""; }; - 55E356561ADC63CD00A57971 /* BubbleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartDataSet.swift; sourceTree = ""; }; - 55E3565A1ADC63EB00A57971 /* BubbleChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BubbleChartRenderer.swift; sourceTree = ""; }; - 5B0032441B6524AD00B6A2FE /* ChartHighlight.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartHighlight.swift; sourceTree = ""; }; - 5B0032461B6524D300B6A2FE /* ChartRange.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartRange.swift; sourceTree = ""; }; - 5B0032481B6525FC00B6A2FE /* ChartHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartHighlighter.swift; sourceTree = ""; }; - 5B00324A1B652BF900B6A2FE /* BarChartHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartHighlighter.swift; sourceTree = ""; }; - 5B00324C1B65351C00B6A2FE /* HorizontalBarChartHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartHighlighter.swift; sourceTree = ""; }; - 5B378F161AD500A4009414A4 /* ChartAnimationEasing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartAnimationEasing.swift; sourceTree = ""; }; - 5B4BCD3F1AA9C4930063F019 /* ChartTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartTransformer.swift; sourceTree = ""; }; - 5B6556F61AB72BA000FFBFD3 /* ChartComponentBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartComponentBase.swift; sourceTree = ""; }; - 5B6654D51BB0A86F00890030 /* ChartDefaultXAxisValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDefaultXAxisValueFormatter.swift; sourceTree = ""; }; - 5B6654D61BB0A86F00890030 /* ChartFillFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartFillFormatter.swift; sourceTree = ""; }; - 5B6654D71BB0A86F00890030 /* ChartXAxisValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartXAxisValueFormatter.swift; sourceTree = ""; }; - 5B680D1C1A9D16F90026A057 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 5B680D3C1A9D1AD90026A057 /* Charts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Charts.h; sourceTree = ""; }; - 5B6A546A1AA5C23F000F57C2 /* ChartMarker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartMarker.swift; sourceTree = ""; }; - 5B6A546D1AA5D2DC000F57C2 /* ChartAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartAnimator.swift; sourceTree = ""; }; - 5B6A546F1AA5DB34000F57C2 /* ChartRendererBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartRendererBase.swift; sourceTree = ""; }; - 5B6A54711AA5DCA8000F57C2 /* ChartAxisRendererBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartAxisRendererBase.swift; sourceTree = ""; }; - 5B6A54731AA5DEDC000F57C2 /* ChartXAxisRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartXAxisRenderer.swift; sourceTree = ""; }; - 5B6A54751AA5DEE3000F57C2 /* ChartXAxisRendererBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartXAxisRendererBarChart.swift; sourceTree = ""; }; - 5B6A54771AA5DEF0000F57C2 /* ChartXAxisRendererRadarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartXAxisRendererRadarChart.swift; sourceTree = ""; }; - 5B6A547B1AA5DF02000F57C2 /* ChartXAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartXAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 5B6A547D1AA5DF1A000F57C2 /* ChartYAxisRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartYAxisRenderer.swift; sourceTree = ""; }; - 5B6A547F1AA5DF28000F57C2 /* ChartYAxisRendererHorizontalBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartYAxisRendererHorizontalBarChart.swift; sourceTree = ""; }; - 5B6A54811AA5DF34000F57C2 /* ChartYAxisRendererRadarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartYAxisRendererRadarChart.swift; sourceTree = ""; }; - 5B6A54841AA669C9000F57C2 /* ScatterChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartRenderer.swift; sourceTree = ""; }; - 5B6A54861AA669F4000F57C2 /* RadarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartRenderer.swift; sourceTree = ""; }; - 5B6A54881AA66A1A000F57C2 /* PieChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartRenderer.swift; sourceTree = ""; }; - 5B6A548A1AA66A3D000F57C2 /* LineChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartRenderer.swift; sourceTree = ""; }; - 5B6A548C1AA66A60000F57C2 /* ChartLegendRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartLegendRenderer.swift; sourceTree = ""; }; - 5B6A548E1AA66A7A000F57C2 /* HorizontalBarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartRenderer.swift; sourceTree = ""; }; - 5B6A54901AA66A8D000F57C2 /* ChartDataRendererBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataRendererBase.swift; sourceTree = ""; }; - 5B6A54921AA66AAB000F57C2 /* CombinedChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartRenderer.swift; sourceTree = ""; }; - 5B6A54941AA66AC0000F57C2 /* CandleStickChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleStickChartRenderer.swift; sourceTree = ""; }; - 5B6A54961AA66AD2000F57C2 /* BarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BarChartRenderer.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5B6A54981AA66B14000F57C2 /* BarChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartView.swift; sourceTree = ""; }; - 5B6A549A1AA66B2C000F57C2 /* BarLineChartViewBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BarLineChartViewBase.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5B6A549C1AA66B3C000F57C2 /* CandleStickChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleStickChartView.swift; sourceTree = ""; }; - 5B6A549E1AA66B59000F57C2 /* CombinedChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartView.swift; sourceTree = ""; }; - 5B6A54A01AA66B6A000F57C2 /* HorizontalBarChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartView.swift; sourceTree = ""; }; - 5B6A54A21AA66B7C000F57C2 /* LineChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartView.swift; sourceTree = ""; }; - 5B6A54A41AA66B92000F57C2 /* PieChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartView.swift; sourceTree = ""; }; - 5B6A54A61AA66BA7000F57C2 /* PieRadarChartViewBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieRadarChartViewBase.swift; sourceTree = ""; }; - 5B6A54A81AA66BBA000F57C2 /* RadarChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartView.swift; sourceTree = ""; }; - 5B6A54AA1AA66BC8000F57C2 /* ScatterChartView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartView.swift; sourceTree = ""; }; - 5B6A54B71AA74516000F57C2 /* BarChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartData.swift; sourceTree = ""; }; - 5B6A54B81AA74516000F57C2 /* BarChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartDataEntry.swift; sourceTree = ""; }; - 5B6A54B91AA74516000F57C2 /* BarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarChartDataSet.swift; sourceTree = ""; }; - 5B6A54BA1AA74516000F57C2 /* BarLineScatterCandleBubbleChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineScatterCandleBubbleChartData.swift; sourceTree = ""; }; - 5B6A54BB1AA74516000F57C2 /* BarLineScatterCandleBubbleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarLineScatterCandleBubbleChartDataSet.swift; sourceTree = ""; }; - 5B6A54BC1AA74516000F57C2 /* CandleChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartData.swift; sourceTree = ""; }; - 5B6A54BD1AA74516000F57C2 /* CandleChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartDataEntry.swift; sourceTree = ""; }; - 5B6A54BE1AA74516000F57C2 /* CandleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CandleChartDataSet.swift; sourceTree = ""; }; - 5B6A54BF1AA74516000F57C2 /* CombinedChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedChartData.swift; sourceTree = ""; }; - 5B6A54C01AA74516000F57C2 /* ChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartData.swift; sourceTree = ""; }; - 5B6A54C11AA74516000F57C2 /* ChartDataEntry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataEntry.swift; sourceTree = ""; }; - 5B6A54C21AA74516000F57C2 /* ChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataSet.swift; sourceTree = ""; }; - 5B6A54C31AA74516000F57C2 /* LineChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartData.swift; sourceTree = ""; }; - 5B6A54C41AA74516000F57C2 /* LineChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineChartDataSet.swift; sourceTree = ""; }; - 5B6A54C51AA74516000F57C2 /* LineRadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineRadarChartDataSet.swift; sourceTree = ""; }; - 5B6A54C61AA74516000F57C2 /* PieChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartData.swift; sourceTree = ""; }; - 5B6A54C71AA74516000F57C2 /* PieChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PieChartDataSet.swift; sourceTree = ""; }; - 5B6A54C81AA74516000F57C2 /* RadarChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartData.swift; sourceTree = ""; }; - 5B6A54C91AA74516000F57C2 /* RadarChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarChartDataSet.swift; sourceTree = ""; }; - 5B6A54CA1AA74516000F57C2 /* ScatterChartData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartData.swift; sourceTree = ""; }; - 5B6A54CB1AA74516000F57C2 /* ScatterChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScatterChartDataSet.swift; sourceTree = ""; }; - 5B8FE2AE1B68F8F600910C9E /* LineScatterCandleChartDataSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineScatterCandleChartDataSet.swift; sourceTree = ""; }; - 5B8FE2B01B68FFF900910C9E /* LineScatterCandleRadarChartRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LineScatterCandleRadarChartRenderer.swift; sourceTree = ""; }; - 5BA8EC401A9D14DC00CE82E1 /* Charts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Charts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5BA8EC441A9D14DC00CE82E1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5BA8EC671A9D151C00CE82E1 /* ChartViewBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartViewBase.swift; sourceTree = ""; }; - 5BA8EC6A1A9D151C00CE82E1 /* ChartAxisBase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = ChartAxisBase.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 5BA8EC6B1A9D151C00CE82E1 /* ChartLegend.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartLegend.swift; sourceTree = ""; }; - 5BA8EC6C1A9D151C00CE82E1 /* ChartLimitLine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartLimitLine.swift; sourceTree = ""; }; - 5BA8EC6D1A9D151C00CE82E1 /* ChartXAxis.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartXAxis.swift; sourceTree = ""; }; - 5BA8EC6E1A9D151C00CE82E1 /* ChartYAxis.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartYAxis.swift; sourceTree = ""; }; - 5BA8EC751A9D151C00CE82E1 /* ChartDataApproximatorFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataApproximatorFilter.swift; sourceTree = ""; }; - 5BA8EC761A9D151C00CE82E1 /* ChartDataBaseFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartDataBaseFilter.swift; sourceTree = ""; }; - 5BA8EC791A9D151C00CE82E1 /* ChartColorTemplates.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartColorTemplates.swift; sourceTree = ""; }; - 5BA8EC7B1A9D151C00CE82E1 /* ChartSelectionDetail.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartSelectionDetail.swift; sourceTree = ""; }; - 5BA8EC7C1A9D151C00CE82E1 /* ChartUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartUtils.swift; sourceTree = ""; }; - 5BAAA8551BB08E1D00B20D4D /* CombinedHighlighter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CombinedHighlighter.swift; sourceTree = ""; }; - 5BB6EC1C1ACC28AB006E9C25 /* ChartTransformerHorizontalBarChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartTransformerHorizontalBarChart.swift; sourceTree = ""; }; - 5BD8F06C1AB897D500566E05 /* ChartViewPortHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartViewPortHandler.swift; sourceTree = ""; }; - A52C5C371BAC5CA400594CDD /* ChartsTV.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChartsTV.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A52C5C391BAC5CA400594CDD /* ChartsTV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChartsTV.h; sourceTree = ""; }; - A52C5C3B1BAC5CA400594CDD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 5BA8EC3C1A9D14DC00CE82E1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B680D1D1A9D16F90026A057 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A52C5C331BAC5CA400594CDD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 5B0032431B65247600B6A2FE /* Highlight */ = { - isa = PBXGroup; - children = ( - 5B0032441B6524AD00B6A2FE /* ChartHighlight.swift */, - 5B0032461B6524D300B6A2FE /* ChartRange.swift */, - 5B0032481B6525FC00B6A2FE /* ChartHighlighter.swift */, - 5B00324A1B652BF900B6A2FE /* BarChartHighlighter.swift */, - 5BAAA8551BB08E1D00B20D4D /* CombinedHighlighter.swift */, - 5B00324C1B65351C00B6A2FE /* HorizontalBarChartHighlighter.swift */, - ); - path = Highlight; - sourceTree = ""; - }; - 5B6654D41BB0A86F00890030 /* Formatters */ = { - isa = PBXGroup; - children = ( - 5B6654D51BB0A86F00890030 /* ChartDefaultXAxisValueFormatter.swift */, - 5B6654D61BB0A86F00890030 /* ChartFillFormatter.swift */, - 5B6654D71BB0A86F00890030 /* ChartXAxisValueFormatter.swift */, - ); - path = Formatters; - sourceTree = ""; - }; - 5B680D1E1A9D170B0026A057 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 5B680D1C1A9D16F90026A057 /* UIKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 5B6A546C1AA5D2D0000F57C2 /* Animation */ = { - isa = PBXGroup; - children = ( - 5B6A546D1AA5D2DC000F57C2 /* ChartAnimator.swift */, - 5B378F161AD500A4009414A4 /* ChartAnimationEasing.swift */, - ); - path = Animation; - sourceTree = ""; - }; - 5B759ED41A9F98A90039D97F /* Renderers */ = { - isa = PBXGroup; - children = ( - 5B6A54711AA5DCA8000F57C2 /* ChartAxisRendererBase.swift */, - 5B6A54961AA66AD2000F57C2 /* BarChartRenderer.swift */, - 55E3565A1ADC63EB00A57971 /* BubbleChartRenderer.swift */, - 5B6A54941AA66AC0000F57C2 /* CandleStickChartRenderer.swift */, - 5B6A54921AA66AAB000F57C2 /* CombinedChartRenderer.swift */, - 5B6A54901AA66A8D000F57C2 /* ChartDataRendererBase.swift */, - 5B6A548E1AA66A7A000F57C2 /* HorizontalBarChartRenderer.swift */, - 5B6A548C1AA66A60000F57C2 /* ChartLegendRenderer.swift */, - 5B6A548A1AA66A3D000F57C2 /* LineChartRenderer.swift */, - 5B8FE2B01B68FFF900910C9E /* LineScatterCandleRadarChartRenderer.swift */, - 5B6A54881AA66A1A000F57C2 /* PieChartRenderer.swift */, - 5B6A54861AA669F4000F57C2 /* RadarChartRenderer.swift */, - 5B6A546F1AA5DB34000F57C2 /* ChartRendererBase.swift */, - 5B6A54841AA669C9000F57C2 /* ScatterChartRenderer.swift */, - 5B6A54731AA5DEDC000F57C2 /* ChartXAxisRenderer.swift */, - 5B6A54751AA5DEE3000F57C2 /* ChartXAxisRendererBarChart.swift */, - 5B6A547B1AA5DF02000F57C2 /* ChartXAxisRendererHorizontalBarChart.swift */, - 5B6A54771AA5DEF0000F57C2 /* ChartXAxisRendererRadarChart.swift */, - 5B6A547D1AA5DF1A000F57C2 /* ChartYAxisRenderer.swift */, - 5B6A547F1AA5DF28000F57C2 /* ChartYAxisRendererHorizontalBarChart.swift */, - 5B6A54811AA5DF34000F57C2 /* ChartYAxisRendererRadarChart.swift */, - ); - path = Renderers; - sourceTree = ""; - }; - 5BA8EC361A9D14DC00CE82E1 = { - isa = PBXGroup; - children = ( - 5BA8EC651A9D151C00CE82E1 /* Classes */, - 5BA8EC431A9D14DC00CE82E1 /* Supporting Files */, - A52C5C381BAC5CA400594CDD /* ChartsTV */, - 5BA8EC411A9D14DC00CE82E1 /* Products */, - 5B680D1E1A9D170B0026A057 /* Frameworks */, - ); - sourceTree = ""; - }; - 5BA8EC411A9D14DC00CE82E1 /* Products */ = { - isa = PBXGroup; - children = ( - 5BA8EC401A9D14DC00CE82E1 /* Charts.framework */, - A52C5C371BAC5CA400594CDD /* ChartsTV.framework */, - ); - name = Products; - sourceTree = ""; - }; - 5BA8EC431A9D14DC00CE82E1 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 5B680D3C1A9D1AD90026A057 /* Charts.h */, - 5BA8EC441A9D14DC00CE82E1 /* Info.plist */, - ); - path = "Supporting Files"; - sourceTree = ""; - }; - 5BA8EC651A9D151C00CE82E1 /* Classes */ = { - isa = PBXGroup; - children = ( - 5B6A546C1AA5D2D0000F57C2 /* Animation */, - 5BA8EC661A9D151C00CE82E1 /* Charts */, - 5BA8EC691A9D151C00CE82E1 /* Components */, - 5BA8EC6F1A9D151C00CE82E1 /* Data */, - 5BA8EC741A9D151C00CE82E1 /* Filters */, - 5B6654D41BB0A86F00890030 /* Formatters */, - 5B0032431B65247600B6A2FE /* Highlight */, - 5B759ED41A9F98A90039D97F /* Renderers */, - 5BA8EC781A9D151C00CE82E1 /* Utils */, - ); - path = Classes; - sourceTree = ""; - }; - 5BA8EC661A9D151C00CE82E1 /* Charts */ = { - isa = PBXGroup; - children = ( - 5B6A54981AA66B14000F57C2 /* BarChartView.swift */, - 5B6A549A1AA66B2C000F57C2 /* BarLineChartViewBase.swift */, - 55E356521ADC63BF00A57971 /* BubbleChartView.swift */, - 5B6A549C1AA66B3C000F57C2 /* CandleStickChartView.swift */, - 5BA8EC671A9D151C00CE82E1 /* ChartViewBase.swift */, - 5B6A549E1AA66B59000F57C2 /* CombinedChartView.swift */, - 5B6A54A01AA66B6A000F57C2 /* HorizontalBarChartView.swift */, - 5B6A54A21AA66B7C000F57C2 /* LineChartView.swift */, - 5B6A54A41AA66B92000F57C2 /* PieChartView.swift */, - 5B6A54A61AA66BA7000F57C2 /* PieRadarChartViewBase.swift */, - 5B6A54A81AA66BBA000F57C2 /* RadarChartView.swift */, - 5B6A54AA1AA66BC8000F57C2 /* ScatterChartView.swift */, - ); - path = Charts; - sourceTree = ""; - }; - 5BA8EC691A9D151C00CE82E1 /* Components */ = { - isa = PBXGroup; - children = ( - 5BA8EC6A1A9D151C00CE82E1 /* ChartAxisBase.swift */, - 5B6556F61AB72BA000FFBFD3 /* ChartComponentBase.swift */, - 5BA8EC6B1A9D151C00CE82E1 /* ChartLegend.swift */, - 5BA8EC6C1A9D151C00CE82E1 /* ChartLimitLine.swift */, - 5B6A546A1AA5C23F000F57C2 /* ChartMarker.swift */, - 5BA8EC6D1A9D151C00CE82E1 /* ChartXAxis.swift */, - 5BA8EC6E1A9D151C00CE82E1 /* ChartYAxis.swift */, - ); - path = Components; - sourceTree = ""; - }; - 5BA8EC6F1A9D151C00CE82E1 /* Data */ = { - isa = PBXGroup; - children = ( - 5B6A54B71AA74516000F57C2 /* BarChartData.swift */, - 5B6A54B81AA74516000F57C2 /* BarChartDataEntry.swift */, - 5B6A54B91AA74516000F57C2 /* BarChartDataSet.swift */, - 5B6A54BA1AA74516000F57C2 /* BarLineScatterCandleBubbleChartData.swift */, - 5B6A54BB1AA74516000F57C2 /* BarLineScatterCandleBubbleChartDataSet.swift */, - 55E356541ADC63CD00A57971 /* BubbleChartData.swift */, - 55E356551ADC63CD00A57971 /* BubbleChartDataEntry.swift */, - 55E356561ADC63CD00A57971 /* BubbleChartDataSet.swift */, - 5B6A54BC1AA74516000F57C2 /* CandleChartData.swift */, - 5B6A54BD1AA74516000F57C2 /* CandleChartDataEntry.swift */, - 5B6A54BE1AA74516000F57C2 /* CandleChartDataSet.swift */, - 5B6A54BF1AA74516000F57C2 /* CombinedChartData.swift */, - 5B6A54C01AA74516000F57C2 /* ChartData.swift */, - 5B6A54C11AA74516000F57C2 /* ChartDataEntry.swift */, - 5B6A54C21AA74516000F57C2 /* ChartDataSet.swift */, - 5B6A54C31AA74516000F57C2 /* LineChartData.swift */, - 5B6A54C41AA74516000F57C2 /* LineChartDataSet.swift */, - 5B6A54C51AA74516000F57C2 /* LineRadarChartDataSet.swift */, - 5B8FE2AE1B68F8F600910C9E /* LineScatterCandleChartDataSet.swift */, - 5B6A54C61AA74516000F57C2 /* PieChartData.swift */, - 5B6A54C71AA74516000F57C2 /* PieChartDataSet.swift */, - 5B6A54C81AA74516000F57C2 /* RadarChartData.swift */, - 5B6A54C91AA74516000F57C2 /* RadarChartDataSet.swift */, - 5B6A54CA1AA74516000F57C2 /* ScatterChartData.swift */, - 5B6A54CB1AA74516000F57C2 /* ScatterChartDataSet.swift */, - ); - path = Data; - sourceTree = ""; - }; - 5BA8EC741A9D151C00CE82E1 /* Filters */ = { - isa = PBXGroup; - children = ( - 5BA8EC751A9D151C00CE82E1 /* ChartDataApproximatorFilter.swift */, - 5BA8EC761A9D151C00CE82E1 /* ChartDataBaseFilter.swift */, - ); - path = Filters; - sourceTree = ""; - }; - 5BA8EC781A9D151C00CE82E1 /* Utils */ = { - isa = PBXGroup; - children = ( - 5BA8EC791A9D151C00CE82E1 /* ChartColorTemplates.swift */, - 5BA8EC7B1A9D151C00CE82E1 /* ChartSelectionDetail.swift */, - 5B4BCD3F1AA9C4930063F019 /* ChartTransformer.swift */, - 5BB6EC1C1ACC28AB006E9C25 /* ChartTransformerHorizontalBarChart.swift */, - 5BA8EC7C1A9D151C00CE82E1 /* ChartUtils.swift */, - 5BD8F06C1AB897D500566E05 /* ChartViewPortHandler.swift */, - 06A5D1851B78675500915098 /* UIGraphics+Extensions.swift */, - ); - path = Utils; - sourceTree = ""; - }; - A52C5C381BAC5CA400594CDD /* ChartsTV */ = { - isa = PBXGroup; - children = ( - A52C5C391BAC5CA400594CDD /* ChartsTV.h */, - A52C5C3B1BAC5CA400594CDD /* Info.plist */, - ); - path = ChartsTV; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 5BA8EC3D1A9D14DC00CE82E1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B680D3D1A9D1AD90026A057 /* Charts.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A52C5C341BAC5CA400594CDD /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - A52C5C3A1BAC5CA400594CDD /* ChartsTV.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 5BA8EC3F1A9D14DC00CE82E1 /* Charts */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5BA8EC561A9D14DC00CE82E1 /* Build configuration list for PBXNativeTarget "Charts" */; - buildPhases = ( - 5BA8EC3B1A9D14DC00CE82E1 /* Sources */, - 5BA8EC3C1A9D14DC00CE82E1 /* Frameworks */, - 5BA8EC3D1A9D14DC00CE82E1 /* Headers */, - 5BA8EC3E1A9D14DC00CE82E1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Charts; - productName = Charts; - productReference = 5BA8EC401A9D14DC00CE82E1 /* Charts.framework */; - productType = "com.apple.product-type.framework"; - }; - A52C5C361BAC5CA400594CDD /* ChartsTV */ = { - isa = PBXNativeTarget; - buildConfigurationList = A52C5C3E1BAC5CA400594CDD /* Build configuration list for PBXNativeTarget "ChartsTV" */; - buildPhases = ( - A52C5C321BAC5CA400594CDD /* Sources */, - A52C5C331BAC5CA400594CDD /* Frameworks */, - A52C5C341BAC5CA400594CDD /* Headers */, - A52C5C351BAC5CA400594CDD /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ChartsTV; - productName = ChartsTV; - productReference = A52C5C371BAC5CA400594CDD /* ChartsTV.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5BA8EC371A9D14DC00CE82E1 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftMigration = 0700; - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0700; - ORGANIZATIONNAME = dcg; - TargetAttributes = { - 5BA8EC3F1A9D14DC00CE82E1 = { - CreatedOnToolsVersion = 6.1.1; - }; - A52C5C361BAC5CA400594CDD = { - CreatedOnToolsVersion = 7.1; - }; - }; - }; - buildConfigurationList = 5BA8EC3A1A9D14DC00CE82E1 /* Build configuration list for PBXProject "Charts" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 5BA8EC361A9D14DC00CE82E1; - productRefGroup = 5BA8EC411A9D14DC00CE82E1 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5BA8EC3F1A9D14DC00CE82E1 /* Charts */, - A52C5C361BAC5CA400594CDD /* ChartsTV */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 5BA8EC3E1A9D14DC00CE82E1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A52C5C351BAC5CA400594CDD /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 5BA8EC3B1A9D14DC00CE82E1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B680D1F1A9D17C30026A057 /* ChartAxisBase.swift in Sources */, - 5B6A54DE1AA74516000F57C2 /* RadarChartDataSet.swift in Sources */, - 5B8FE2AF1B68F8F600910C9E /* LineScatterCandleChartDataSet.swift in Sources */, - 5BAAA8561BB08E1D00B20D4D /* CombinedHighlighter.swift in Sources */, - 5B680D211A9D17C30026A057 /* ChartLimitLine.swift in Sources */, - 5B6A54DB1AA74516000F57C2 /* PieChartData.swift in Sources */, - 5B6A54D91AA74516000F57C2 /* LineChartDataSet.swift in Sources */, - 5B6A54AC1AA66C1E000F57C2 /* ChartAxisRendererBase.swift in Sources */, - 5B6A54CF1AA74516000F57C2 /* BarLineScatterCandleBubbleChartData.swift in Sources */, - 5B6A54D11AA74516000F57C2 /* CandleChartData.swift in Sources */, - 5B6654DA1BB0A86F00890030 /* ChartFillFormatter.swift in Sources */, - 5B6A54AB1AA66BC8000F57C2 /* ScatterChartView.swift in Sources */, - 5B6A54E01AA74516000F57C2 /* ScatterChartDataSet.swift in Sources */, - 5B6A548B1AA66A3D000F57C2 /* LineChartRenderer.swift in Sources */, - 5B6A54D01AA74516000F57C2 /* BarLineScatterCandleBubbleChartDataSet.swift in Sources */, - 5B6A54821AA5DF34000F57C2 /* ChartYAxisRendererRadarChart.swift in Sources */, - 5B6A54931AA66AAB000F57C2 /* CombinedChartRenderer.swift in Sources */, - 5B680D221A9D17C30026A057 /* ChartXAxis.swift in Sources */, - 5BA8EC891A9D151C00CE82E1 /* ChartDataBaseFilter.swift in Sources */, - 5B6654DB1BB0A86F00890030 /* ChartXAxisValueFormatter.swift in Sources */, - 5B6A54A31AA66B7C000F57C2 /* LineChartView.swift in Sources */, - 5B6A54891AA66A1A000F57C2 /* PieChartRenderer.swift in Sources */, - 5B6A54DD1AA74516000F57C2 /* RadarChartData.swift in Sources */, - 5B6A54991AA66B14000F57C2 /* BarChartView.swift in Sources */, - 5B680D231A9D17C30026A057 /* ChartYAxis.swift in Sources */, - 5B6A54A91AA66BBA000F57C2 /* RadarChartView.swift in Sources */, - 5B378F171AD500A4009414A4 /* ChartAnimationEasing.swift in Sources */, - 5B6A548F1AA66A7A000F57C2 /* HorizontalBarChartRenderer.swift in Sources */, - 5B6A54741AA5DEDC000F57C2 /* ChartXAxisRenderer.swift in Sources */, - 5B6A547C1AA5DF02000F57C2 /* ChartXAxisRendererHorizontalBarChart.swift in Sources */, - 5B4BCD401AA9C4930063F019 /* ChartTransformer.swift in Sources */, - 5B6A54801AA5DF28000F57C2 /* ChartYAxisRendererHorizontalBarChart.swift in Sources */, - 5B6A54D21AA74516000F57C2 /* CandleChartDataEntry.swift in Sources */, - 5B6A54CC1AA74516000F57C2 /* BarChartData.swift in Sources */, - 5B00324D1B65351C00B6A2FE /* HorizontalBarChartHighlighter.swift in Sources */, - 5B6A54CE1AA74516000F57C2 /* BarChartDataSet.swift in Sources */, - 5B6A54871AA669F4000F57C2 /* RadarChartRenderer.swift in Sources */, - 5B6A548D1AA66A60000F57C2 /* ChartLegendRenderer.swift in Sources */, - 55E356591ADC63CD00A57971 /* BubbleChartDataSet.swift in Sources */, - 5BB6EC1D1ACC28AB006E9C25 /* ChartTransformerHorizontalBarChart.swift in Sources */, - 5B680D271A9D17C30026A057 /* ChartColorTemplates.swift in Sources */, - 5B6A54951AA66AC0000F57C2 /* CandleStickChartRenderer.swift in Sources */, - 5B680D291A9D17C30026A057 /* ChartSelectionDetail.swift in Sources */, - 5BA8EC7D1A9D151C00CE82E1 /* ChartViewBase.swift in Sources */, - 5B6A54DC1AA74516000F57C2 /* PieChartDataSet.swift in Sources */, - 5B6A54DA1AA74516000F57C2 /* LineRadarChartDataSet.swift in Sources */, - 06A5D1861B78675500915098 /* UIGraphics+Extensions.swift in Sources */, - 5B6A54701AA5DB34000F57C2 /* ChartRendererBase.swift in Sources */, - 5B6A54761AA5DEE3000F57C2 /* ChartXAxisRendererBarChart.swift in Sources */, - 5B6A54851AA669C9000F57C2 /* ScatterChartRenderer.swift in Sources */, - 5B6A549D1AA66B3C000F57C2 /* CandleStickChartView.swift in Sources */, - 5BA8EC881A9D151C00CE82E1 /* ChartDataApproximatorFilter.swift in Sources */, - 5B6A549B1AA66B2C000F57C2 /* BarLineChartViewBase.swift in Sources */, - 5B6A54A51AA66B92000F57C2 /* PieChartView.swift in Sources */, - 5B6A54D81AA74516000F57C2 /* LineChartData.swift in Sources */, - 55E356581ADC63CD00A57971 /* BubbleChartDataEntry.swift in Sources */, - 5B6A54911AA66A8D000F57C2 /* ChartDataRendererBase.swift in Sources */, - 5BD8F06D1AB897D500566E05 /* ChartViewPortHandler.swift in Sources */, - 5B8FE2B11B68FFF900910C9E /* LineScatterCandleRadarChartRenderer.swift in Sources */, - 5B6A54D51AA74516000F57C2 /* ChartData.swift in Sources */, - 5B6A54971AA66AD2000F57C2 /* BarChartRenderer.swift in Sources */, - 5B6A546B1AA5C23F000F57C2 /* ChartMarker.swift in Sources */, - 5B6A54D61AA74516000F57C2 /* ChartDataEntry.swift in Sources */, - 55E356571ADC63CD00A57971 /* BubbleChartData.swift in Sources */, - 5B6A54DF1AA74516000F57C2 /* ScatterChartData.swift in Sources */, - 5B6A54D31AA74516000F57C2 /* CandleChartDataSet.swift in Sources */, - 5B0032491B6525FC00B6A2FE /* ChartHighlighter.swift in Sources */, - 5B6A54D71AA74516000F57C2 /* ChartDataSet.swift in Sources */, - 5B00324B1B652BF900B6A2FE /* BarChartHighlighter.swift in Sources */, - 5B6A54781AA5DEF0000F57C2 /* ChartXAxisRendererRadarChart.swift in Sources */, - 5B6A54A71AA66BA7000F57C2 /* PieRadarChartViewBase.swift in Sources */, - 5B6A546E1AA5D2DC000F57C2 /* ChartAnimator.swift in Sources */, - 55E3565B1ADC63EB00A57971 /* BubbleChartRenderer.swift in Sources */, - 55E356531ADC63BF00A57971 /* BubbleChartView.swift in Sources */, - 5B6654D91BB0A86F00890030 /* ChartDefaultXAxisValueFormatter.swift in Sources */, - 5B6A547E1AA5DF1A000F57C2 /* ChartYAxisRenderer.swift in Sources */, - 5B6A549F1AA66B59000F57C2 /* CombinedChartView.swift in Sources */, - 5B6556F71AB72BA000FFBFD3 /* ChartComponentBase.swift in Sources */, - 5B6A54CD1AA74516000F57C2 /* BarChartDataEntry.swift in Sources */, - 5B6A54D41AA74516000F57C2 /* CombinedChartData.swift in Sources */, - 5B680D2A1A9D17C30026A057 /* ChartUtils.swift in Sources */, - 5B0032451B6524AD00B6A2FE /* ChartHighlight.swift in Sources */, - 5B680D201A9D17C30026A057 /* ChartLegend.swift in Sources */, - 5B0032471B6524D300B6A2FE /* ChartRange.swift in Sources */, - 5BD8F06E1AB89AD800566E05 /* HorizontalBarChartView.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A52C5C321BAC5CA400594CDD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A52C5C3F1BAC5D1100594CDD /* ChartAnimator.swift in Sources */, - A52C5C401BAC5D1100594CDD /* ChartAnimationEasing.swift in Sources */, - A52C5C411BAC5D1100594CDD /* BarChartView.swift in Sources */, - A52C5C421BAC5D1100594CDD /* BarLineChartViewBase.swift in Sources */, - A52C5C431BAC5D1100594CDD /* BubbleChartView.swift in Sources */, - A52C5C441BAC5D1100594CDD /* CandleStickChartView.swift in Sources */, - A52C5C451BAC5D1100594CDD /* ChartViewBase.swift in Sources */, - A52C5C461BAC5D1100594CDD /* CombinedChartView.swift in Sources */, - A52C5C471BAC5D1100594CDD /* HorizontalBarChartView.swift in Sources */, - A52C5C481BAC5D1100594CDD /* LineChartView.swift in Sources */, - A52C5C491BAC5D1100594CDD /* PieChartView.swift in Sources */, - A52C5C4A1BAC5D1100594CDD /* PieRadarChartViewBase.swift in Sources */, - A52C5C4B1BAC5D1100594CDD /* RadarChartView.swift in Sources */, - A52C5C4C1BAC5D1100594CDD /* ScatterChartView.swift in Sources */, - A52C5C4D1BAC5D1100594CDD /* ChartAxisBase.swift in Sources */, - A52C5C4E1BAC5D1100594CDD /* ChartComponentBase.swift in Sources */, - A52C5C4F1BAC5D1100594CDD /* ChartLegend.swift in Sources */, - A52C5C501BAC5D1100594CDD /* ChartLimitLine.swift in Sources */, - A52C5C511BAC5D1100594CDD /* ChartMarker.swift in Sources */, - A52C5C521BAC5D1100594CDD /* ChartXAxis.swift in Sources */, - A52C5C531BAC5D1100594CDD /* ChartYAxis.swift in Sources */, - A52C5C541BAC5D1100594CDD /* BarChartData.swift in Sources */, - A52C5C551BAC5D1100594CDD /* BarChartDataEntry.swift in Sources */, - A52C5C561BAC5D1100594CDD /* BarChartDataSet.swift in Sources */, - A52C5C571BAC5D1100594CDD /* BarLineScatterCandleChartData.swift in Sources */, - A52C5C581BAC5D1100594CDD /* BarLineScatterCandleChartDataSet.swift in Sources */, - A52C5C591BAC5D1100594CDD /* BubbleChartData.swift in Sources */, - A52C5C5A1BAC5D1100594CDD /* BubbleChartDataEntry.swift in Sources */, - A52C5C5B1BAC5D1100594CDD /* BubbleChartDataSet.swift in Sources */, - A52C5C5C1BAC5D1100594CDD /* CandleChartData.swift in Sources */, - A52C5C5D1BAC5D1100594CDD /* CandleChartDataEntry.swift in Sources */, - A52C5C5E1BAC5D1100594CDD /* CandleChartDataSet.swift in Sources */, - A52C5C5F1BAC5D1100594CDD /* CombinedChartData.swift in Sources */, - A52C5C601BAC5D1100594CDD /* ChartData.swift in Sources */, - A52C5C611BAC5D1100594CDD /* ChartDataEntry.swift in Sources */, - A52C5C621BAC5D1100594CDD /* ChartDataSet.swift in Sources */, - A52C5C631BAC5D1100594CDD /* LineChartData.swift in Sources */, - A52C5C641BAC5D1100594CDD /* LineChartDataSet.swift in Sources */, - A52C5C651BAC5D1100594CDD /* LineRadarChartDataSet.swift in Sources */, - A52C5C661BAC5D1100594CDD /* LineScatterCandleChartDataSet.swift in Sources */, - A52C5C671BAC5D1100594CDD /* PieChartData.swift in Sources */, - A52C5C681BAC5D1100594CDD /* PieChartDataSet.swift in Sources */, - A52C5C691BAC5D1100594CDD /* RadarChartData.swift in Sources */, - A52C5C6A1BAC5D1100594CDD /* RadarChartDataSet.swift in Sources */, - A52C5C6B1BAC5D1100594CDD /* ScatterChartData.swift in Sources */, - A52C5C6C1BAC5D1100594CDD /* ScatterChartDataSet.swift in Sources */, - A52C5C6D1BAC5D1100594CDD /* ChartDataApproximatorFilter.swift in Sources */, - A52C5C6E1BAC5D1100594CDD /* ChartDataBaseFilter.swift in Sources */, - A52C5C6F1BAC5D1100594CDD /* ChartHighlight.swift in Sources */, - A52C5C701BAC5D1100594CDD /* ChartRange.swift in Sources */, - A52C5C711BAC5D1100594CDD /* ChartHighlighter.swift in Sources */, - A52C5C721BAC5D1100594CDD /* BarChartHighlighter.swift in Sources */, - A52C5C731BAC5D1100594CDD /* HorizontalBarChartHighlighter.swift in Sources */, - A52C5C741BAC5D1100594CDD /* ChartAxisRendererBase.swift in Sources */, - A52C5C751BAC5D1100594CDD /* BarChartRenderer.swift in Sources */, - A52C5C761BAC5D1100594CDD /* BubbleChartRenderer.swift in Sources */, - A52C5C771BAC5D1100594CDD /* CandleStickChartRenderer.swift in Sources */, - A52C5C781BAC5D1100594CDD /* CombinedChartRenderer.swift in Sources */, - A52C5C791BAC5D1100594CDD /* ChartDataRendererBase.swift in Sources */, - A52C5C7A1BAC5D1200594CDD /* HorizontalBarChartRenderer.swift in Sources */, - A52C5C7B1BAC5D1200594CDD /* ChartLegendRenderer.swift in Sources */, - A52C5C7C1BAC5D1200594CDD /* LineChartRenderer.swift in Sources */, - A52C5C7D1BAC5D1200594CDD /* LineScatterCandleRadarChartRenderer.swift in Sources */, - A52C5C7E1BAC5D1200594CDD /* PieChartRenderer.swift in Sources */, - A52C5C7F1BAC5D1200594CDD /* RadarChartRenderer.swift in Sources */, - A52C5C801BAC5D1200594CDD /* ChartRendererBase.swift in Sources */, - A52C5C811BAC5D1200594CDD /* ScatterChartRenderer.swift in Sources */, - A52C5C821BAC5D1200594CDD /* ChartXAxisRenderer.swift in Sources */, - A52C5C831BAC5D1200594CDD /* ChartXAxisRendererBarChart.swift in Sources */, - A52C5C841BAC5D1200594CDD /* ChartXAxisRendererHorizontalBarChart.swift in Sources */, - A52C5C851BAC5D1200594CDD /* ChartXAxisRendererRadarChart.swift in Sources */, - A52C5C861BAC5D1200594CDD /* ChartYAxisRenderer.swift in Sources */, - A52C5C871BAC5D1200594CDD /* ChartYAxisRendererHorizontalBarChart.swift in Sources */, - A52C5C881BAC5D1200594CDD /* ChartYAxisRendererRadarChart.swift in Sources */, - A52C5C891BAC5D1200594CDD /* ChartColorTemplates.swift in Sources */, - A52C5C8A1BAC5D1200594CDD /* ChartFillFormatter.swift in Sources */, - A52C5C8B1BAC5D1200594CDD /* ChartSelectionDetail.swift in Sources */, - A52C5C8C1BAC5D1200594CDD /* ChartTransformer.swift in Sources */, - A52C5C8D1BAC5D1200594CDD /* ChartTransformerHorizontalBarChart.swift in Sources */, - A52C5C8E1BAC5D1200594CDD /* ChartUtils.swift in Sources */, - A52C5C8F1BAC5D1200594CDD /* ChartViewPortHandler.swift in Sources */, - A52C5C901BAC5D1200594CDD /* UIGraphics+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 5BA8EC541A9D14DC00CE82E1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 5BA8EC551A9D14DC00CE82E1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 5BA8EC571A9D14DC00CE82E1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Supporting Files/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.dcg.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - 5BA8EC581A9D14DC00CE82E1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Supporting Files/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.dcg.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; - A52C5C3C1BAC5CA400594CDD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = ChartsTV/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTV; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - A52C5C3D1BAC5CA400594CDD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = ChartsTV/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.dcg.ChartsTV; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 5BA8EC3A1A9D14DC00CE82E1 /* Build configuration list for PBXProject "Charts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BA8EC541A9D14DC00CE82E1 /* Debug */, - 5BA8EC551A9D14DC00CE82E1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5BA8EC561A9D14DC00CE82E1 /* Build configuration list for PBXNativeTarget "Charts" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5BA8EC571A9D14DC00CE82E1 /* Debug */, - 5BA8EC581A9D14DC00CE82E1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A52C5C3E1BAC5CA400594CDD /* Build configuration list for PBXNativeTarget "ChartsTV" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A52C5C3C1BAC5CA400594CDD /* Debug */, - A52C5C3D1BAC5CA400594CDD /* Release */, - ); - defaultConfigurationIsVisible = 0; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5BA8EC371A9D14DC00CE82E1 /* Project object */; -} diff --git a/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme b/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme deleted file mode 100644 index 9b874e60..00000000 --- a/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/Charts.xcscheme +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTV.xcscheme b/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTV.xcscheme deleted file mode 100644 index 6d935bed..00000000 --- a/Carthage/Checkouts/Charts/Charts/Charts.xcodeproj/xcshareddata/xcschemes/ChartsTV.xcscheme +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Charts/Charts/ChartsTV/ChartsTV.h b/Carthage/Checkouts/Charts/Charts/ChartsTV/ChartsTV.h deleted file mode 100644 index 3a4360a8..00000000 --- a/Carthage/Checkouts/Charts/Charts/ChartsTV/ChartsTV.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// ChartsTV.h -// ChartsTV -// -// Created by Tracy Keeling on 9/18/15. -// Copyright © 2015 dcg. All rights reserved. -// - -#import - -//! Project version number for ChartsTV. -FOUNDATION_EXPORT double ChartsTVVersionNumber; - -//! Project version string for ChartsTV. -FOUNDATION_EXPORT const unsigned char ChartsTVVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/Carthage/Checkouts/Charts/Charts/ChartsTV/Info.plist b/Carthage/Checkouts/Charts/Charts/ChartsTV/Info.plist deleted file mode 100644 index d3de8eef..00000000 --- a/Carthage/Checkouts/Charts/Charts/ChartsTV/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - NSPrincipalClass - - - diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimationEasing.swift b/Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimationEasing.swift deleted file mode 100644 index 9614a796..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimationEasing.swift +++ /dev/null @@ -1,394 +0,0 @@ -// -// ChartAnimationUtils.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -@objc -public enum ChartEasingOption: Int -{ - case Linear - case EaseInQuad - case EaseOutQuad - case EaseInOutQuad - case EaseInCubic - case EaseOutCubic - case EaseInOutCubic - case EaseInQuart - case EaseOutQuart - case EaseInOutQuart - case EaseInQuint - case EaseOutQuint - case EaseInOutQuint - case EaseInSine - case EaseOutSine - case EaseInOutSine - case EaseInExpo - case EaseOutExpo - case EaseInOutExpo - case EaseInCirc - case EaseOutCirc - case EaseInOutCirc - case EaseInElastic - case EaseOutElastic - case EaseInOutElastic - case EaseInBack - case EaseOutBack - case EaseInOutBack - case EaseInBounce - case EaseOutBounce - case EaseInOutBounce -} - -public typealias ChartEasingFunctionBlock = ((elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat) - -internal func easingFunctionFromOption(easing: ChartEasingOption) -> ChartEasingFunctionBlock -{ - switch easing - { - case .Linear: - return EasingFunctions.Linear - case .EaseInQuad: - return EasingFunctions.EaseInQuad - case .EaseOutQuad: - return EasingFunctions.EaseOutQuad - case .EaseInOutQuad: - return EasingFunctions.EaseInOutQuad - case .EaseInCubic: - return EasingFunctions.EaseInCubic - case .EaseOutCubic: - return EasingFunctions.EaseOutCubic - case .EaseInOutCubic: - return EasingFunctions.EaseInOutCubic - case .EaseInQuart: - return EasingFunctions.EaseInQuart - case .EaseOutQuart: - return EasingFunctions.EaseOutQuart - case .EaseInOutQuart: - return EasingFunctions.EaseInOutQuart - case .EaseInQuint: - return EasingFunctions.EaseInQuint - case .EaseOutQuint: - return EasingFunctions.EaseOutQuint - case .EaseInOutQuint: - return EasingFunctions.EaseInOutQuint - case .EaseInSine: - return EasingFunctions.EaseInSine - case .EaseOutSine: - return EasingFunctions.EaseOutSine - case .EaseInOutSine: - return EasingFunctions.EaseInOutSine - case .EaseInExpo: - return EasingFunctions.EaseInExpo - case .EaseOutExpo: - return EasingFunctions.EaseOutExpo - case .EaseInOutExpo: - return EasingFunctions.EaseInOutExpo - case .EaseInCirc: - return EasingFunctions.EaseInCirc - case .EaseOutCirc: - return EasingFunctions.EaseOutCirc - case .EaseInOutCirc: - return EasingFunctions.EaseInOutCirc - case .EaseInElastic: - return EasingFunctions.EaseInElastic - case .EaseOutElastic: - return EasingFunctions.EaseOutElastic - case .EaseInOutElastic: - return EasingFunctions.EaseInOutElastic - case .EaseInBack: - return EasingFunctions.EaseInBack - case .EaseOutBack: - return EasingFunctions.EaseOutBack - case .EaseInOutBack: - return EasingFunctions.EaseInOutBack - case .EaseInBounce: - return EasingFunctions.EaseInBounce - case .EaseOutBounce: - return EasingFunctions.EaseOutBounce - case .EaseInOutBounce: - return EasingFunctions.EaseInOutBounce - } -} - -internal struct EasingFunctions -{ - internal static let Linear = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in return CGFloat(elapsed / duration); } - - internal static let EaseInQuad = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - return position * position - } - - internal static let EaseOutQuad = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - return -position * (position - 2.0) - } - - internal static let EaseInOutQuad = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / (duration / 2.0)) - if (position < 1.0) - { - return 0.5 * position * position - } - return -0.5 * ((--position) * (position - 2.0) - 1.0) - } - - internal static let EaseInCubic = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - return position * position * position - } - - internal static let EaseOutCubic = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - position-- - return (position * position * position + 1.0) - } - - internal static let EaseInOutCubic = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / (duration / 2.0)) - if (position < 1.0) - { - return 0.5 * position * position * position - } - position -= 2.0 - return 0.5 * (position * position * position + 2.0) - } - - internal static let EaseInQuart = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - return position * position * position * position - } - - internal static let EaseOutQuart = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - position-- - return -(position * position * position * position - 1.0) - } - - internal static let EaseInOutQuart = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / (duration / 2.0)) - if (position < 1.0) - { - return 0.5 * position * position * position * position - } - position -= 2.0 - return -0.5 * (position * position * position * position - 2.0) - } - - internal static let EaseInQuint = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - return position * position * position * position * position - } - - internal static let EaseOutQuint = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - position-- - return (position * position * position * position * position + 1.0) - } - - internal static let EaseInOutQuint = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / (duration / 2.0)) - if (position < 1.0) - { - return 0.5 * position * position * position * position * position - } - else - { - position -= 2.0 - return 0.5 * (position * position * position * position * position + 2.0) - } - } - - internal static let EaseInSine = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position: NSTimeInterval = elapsed / duration - return CGFloat( -cos(position * M_PI_2) + 1.0 ) - } - - internal static let EaseOutSine = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position: NSTimeInterval = elapsed / duration - return CGFloat( sin(position * M_PI_2) ) - } - - internal static let EaseInOutSine = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position: NSTimeInterval = elapsed / duration - return CGFloat( -0.5 * (cos(M_PI * position) - 1.0) ) - } - - internal static let EaseInExpo = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - return (elapsed == 0) ? 0.0 : CGFloat(pow(2.0, 10.0 * (elapsed / duration - 1.0))) - } - - internal static let EaseOutExpo = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - return (elapsed == duration) ? 1.0 : (-CGFloat(pow(2.0, -10.0 * elapsed / duration)) + 1.0) - } - - internal static let EaseInOutExpo = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - if (elapsed == 0) - { - return 0.0 - } - if (elapsed == duration) - { - return 1.0 - } - - var position: NSTimeInterval = elapsed / (duration / 2.0) - if (position < 1.0) - { - return CGFloat( 0.5 * pow(2.0, 10.0 * (position - 1.0)) ) - } - return CGFloat( 0.5 * (-pow(2.0, -10.0 * --position) + 2.0) ) - } - - internal static let EaseInCirc = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - return -(CGFloat(sqrt(1.0 - position * position)) - 1.0) - } - - internal static let EaseOutCirc = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position = CGFloat(elapsed / duration) - position-- - return CGFloat( sqrt(1 - position * position) ) - } - - internal static let EaseInOutCirc = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position: NSTimeInterval = elapsed / (duration / 2.0) - if (position < 1.0) - { - return CGFloat( -0.5 * (sqrt(1.0 - position * position) - 1.0) ) - } - position -= 2.0 - return CGFloat( 0.5 * (sqrt(1.0 - position * position) + 1.0) ) - } - - internal static let EaseInElastic = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - if (elapsed == 0.0) - { - return 0.0 - } - - var position: NSTimeInterval = elapsed / duration - if (position == 1.0) - { - return 1.0 - } - - var p = duration * 0.3 - var s = p / (2.0 * M_PI) * asin(1.0) - position -= 1.0 - return CGFloat( -(pow(2.0, 10.0 * position) * sin((position * duration - s) * (2.0 * M_PI) / p)) ) - } - - internal static let EaseOutElastic = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - if (elapsed == 0.0) - { - return 0.0 - } - - var position: NSTimeInterval = elapsed / duration - if (position == 1.0) - { - return 1.0 - } - - var p = duration * 0.3 - var s = p / (2.0 * M_PI) * asin(1.0) - return CGFloat( pow(2.0, -10.0 * position) * sin((position * duration - s) * (2.0 * M_PI) / p) + 1.0 ) - } - - internal static let EaseInOutElastic = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - if (elapsed == 0.0) - { - return 0.0 - } - - var position: NSTimeInterval = elapsed / (duration / 2.0) - if (position == 2.0) - { - return 1.0 - } - - var p = duration * (0.3 * 1.5) - var s = p / (2.0 * M_PI) * asin(1.0) - if (position < 1.0) - { - position -= 1.0 - return CGFloat( -0.5 * (pow(2.0, 10.0 * position) * sin((position * duration - s) * (2.0 * M_PI) / p)) ) - } - position -= 1.0 - return CGFloat( pow(2.0, -10.0 * position) * sin((position * duration - s) * (2.0 * M_PI) / p) * 0.5 + 1.0 ) - } - - internal static let EaseInBack = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - let s: NSTimeInterval = 1.70158 - var position: NSTimeInterval = elapsed / duration - return CGFloat( position * position * ((s + 1.0) * position - s) ) - } - - internal static let EaseOutBack = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - let s: NSTimeInterval = 1.70158 - var position: NSTimeInterval = elapsed / duration - position-- - return CGFloat( (position * position * ((s + 1.0) * position + s) + 1.0) ) - } - - internal static let EaseInOutBack = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var s: NSTimeInterval = 1.70158 - var position: NSTimeInterval = elapsed / (duration / 2.0) - if (position < 1.0) - { - s *= 1.525 - return CGFloat( 0.5 * (position * position * ((s + 1.0) * position - s)) ) - } - s *= 1.525 - position -= 2.0 - return CGFloat( 0.5 * (position * position * ((s + 1.0) * position + s) + 2.0) ) - } - - internal static let EaseInBounce = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - return 1.0 - EaseOutBounce(duration - elapsed, duration) - } - - internal static let EaseOutBounce = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - var position: NSTimeInterval = elapsed / duration - if (position < (1.0 / 2.75)) - { - return CGFloat( 7.5625 * position * position ) - } - else if (position < (2.0 / 2.75)) - { - position -= (1.5 / 2.75) - return CGFloat( 7.5625 * position * position + 0.75 ) - } - else if (position < (2.5 / 2.75)) - { - position -= (2.25 / 2.75) - return CGFloat( 7.5625 * position * position + 0.9375 ) - } - else - { - position -= (2.625 / 2.75) - return CGFloat( 7.5625 * position * position + 0.984375 ) - } - } - - internal static let EaseInOutBounce = { (elapsed: NSTimeInterval, duration: NSTimeInterval) -> CGFloat in - if (elapsed < (duration / 2.0)) - { - return EaseInBounce(elapsed * 2.0, duration) * 0.5 - } - return EaseOutBounce(elapsed * 2.0 - duration, duration) * 0.5 + 0.5 - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimator.swift b/Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimator.swift deleted file mode 100644 index 09f5dcf7..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Animation/ChartAnimator.swift +++ /dev/null @@ -1,272 +0,0 @@ -// -// ChartAnimator.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -@objc -public protocol ChartAnimatorDelegate -{ - /// Called when the Animator has stepped. - func chartAnimatorUpdated(chartAnimator: ChartAnimator) - - /// Called when the Animator has stopped. - func chartAnimatorStopped(chartAnimator: ChartAnimator) -} - -public class ChartAnimator: NSObject -{ - public weak var delegate: ChartAnimatorDelegate? - public var updateBlock: (() -> Void)? - public var stopBlock: (() -> Void)? - - /// the phase that is animated and influences the drawn values on the y-axis - public var phaseX: CGFloat = 1.0 - - /// the phase that is animated and influences the drawn values on the y-axis - public var phaseY: CGFloat = 1.0 - - private var _startTime: NSTimeInterval = 0.0 - private var _displayLink: CADisplayLink! - - private var _xDuration: NSTimeInterval = 0.0 - private var _yDuration: NSTimeInterval = 0.0 - - private var _endTimeX: NSTimeInterval = 0.0 - private var _endTimeY: NSTimeInterval = 0.0 - private var _endTime: NSTimeInterval = 0.0 - - private var _enabledX: Bool = false - private var _enabledY: Bool = false - - private var _easingX: ChartEasingFunctionBlock? - private var _easingY: ChartEasingFunctionBlock? - - public override init() - { - super.init() - } - - deinit - { - stop() - } - - public func stop() - { - if (_displayLink != nil) - { - _displayLink.removeFromRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - _displayLink = nil - - _enabledX = false - _enabledY = false - - if (delegate != nil) - { - delegate!.chartAnimatorStopped(self) - } - if (stopBlock != nil) - { - stopBlock?() - } - } - } - - private func updateAnimationPhases(currentTime: NSTimeInterval) - { - let elapsedTime: NSTimeInterval = currentTime - _startTime - if (_enabledX) - { - let duration: NSTimeInterval = _xDuration - var elapsed: NSTimeInterval = elapsedTime - if (elapsed > duration) - { - elapsed = duration - } - - if (_easingX != nil) - { - phaseX = _easingX!(elapsed: elapsed, duration: duration) - } - else - { - phaseX = CGFloat(elapsed / duration) - } - } - if (_enabledY) - { - let duration: NSTimeInterval = _yDuration - var elapsed: NSTimeInterval = elapsedTime - if (elapsed > duration) - { - elapsed = duration - } - - if (_easingY != nil) - { - phaseY = _easingY!(elapsed: elapsed, duration: duration) - } - else - { - phaseY = CGFloat(elapsed / duration) - } - } - } - - @objc private func animationLoop() - { - let currentTime: NSTimeInterval = CACurrentMediaTime() - - updateAnimationPhases(currentTime) - - if (delegate != nil) - { - delegate!.chartAnimatorUpdated(self) - } - if (updateBlock != nil) - { - updateBlock!() - } - - if (currentTime >= _endTime) - { - stop() - } - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingX: an easing function for the animation on the x axis - /// - parameter easingY: an easing function for the animation on the y axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easingX: ChartEasingFunctionBlock?, easingY: ChartEasingFunctionBlock?) - { - stop() - - _displayLink = CADisplayLink(target: self, selector: Selector("animationLoop")) - - _startTime = CACurrentMediaTime() - _xDuration = xAxisDuration - _yDuration = yAxisDuration - _endTimeX = _startTime + xAxisDuration - _endTimeY = _startTime + yAxisDuration - _endTime = _endTimeX > _endTimeY ? _endTimeX : _endTimeY - _enabledX = xAxisDuration > 0.0 - _enabledY = yAxisDuration > 0.0 - - _easingX = easingX - _easingY = easingY - - // Take care of the first frame if rendering is already scheduled... - updateAnimationPhases(_startTime) - - if (_enabledX || _enabledY) - { - _displayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - } - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingOptionX: the easing function for the animation on the x axis - /// - parameter easingOptionY: the easing function for the animation on the y axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easingOptionX: ChartEasingOption, easingOptionY: ChartEasingOption) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingX: easingFunctionFromOption(easingOptionX), easingY: easingFunctionFromOption(easingOptionY)) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easing: an easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easing: ChartEasingFunctionBlock?) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingX: easing, easingY: easing) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingOption: the easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easingOption: ChartEasingOption) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easing: easingFunctionFromOption(easingOption)) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingOption: .EaseInOutSine) - } - - /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter easing: an easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, easing: ChartEasingFunctionBlock?) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: 0.0, easing: easing) - } - - /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter easingOption: the easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, easingOption: ChartEasingOption) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: 0.0, easing: easingFunctionFromOption(easingOption)) - } - - /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval) - { - animate(xAxisDuration: xAxisDuration, yAxisDuration: 0.0, easingOption: .EaseInOutSine) - } - - /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easing: an easing function for the animation - public func animate(yAxisDuration yAxisDuration: NSTimeInterval, easing: ChartEasingFunctionBlock?) - { - animate(xAxisDuration: 0.0, yAxisDuration: yAxisDuration, easing: easing) - } - - /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingOption: the easing function for the animation - public func animate(yAxisDuration yAxisDuration: NSTimeInterval, easingOption: ChartEasingOption) - { - animate(xAxisDuration: 0.0, yAxisDuration: yAxisDuration, easing: easingFunctionFromOption(easingOption)) - } - - /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter yAxisDuration: duration for animating the y axis - public func animate(yAxisDuration yAxisDuration: NSTimeInterval) - { - animate(xAxisDuration: 0.0, yAxisDuration: yAxisDuration, easingOption: .EaseInOutSine) - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/BarChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/BarChartView.swift deleted file mode 100644 index 7c8a6169..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/BarChartView.swift +++ /dev/null @@ -1,231 +0,0 @@ -// -// BarChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// Chart that draws bars. -public class BarChartView: BarLineChartViewBase, BarChartRendererDelegate -{ - /// flag that enables or disables the highlighting arrow - private var _drawHighlightArrowEnabled = false - - /// if set to true, all values are drawn above their bars, instead of below their top - private var _drawValueAboveBarEnabled = true - - /// if set to true, a grey area is darawn behind each bar that indicates the maximum value - private var _drawBarShadowEnabled = false - - internal override func initialize() - { - super.initialize() - - renderer = BarChartRenderer(delegate: self, animator: _animator, viewPortHandler: _viewPortHandler) - _xAxisRenderer = ChartXAxisRendererBarChart(viewPortHandler: _viewPortHandler, xAxis: _xAxis, transformer: _leftAxisTransformer, chart: self) - - _highlighter = BarChartHighlighter(chart: self) - - _chartXMin = -0.5 - } - - internal override func calcMinMax() - { - super.calcMinMax() - - if (_data === nil) - { - return - } - - let barData = _data as! BarChartData - - // increase deltax by 1 because the bars have a width of 1 - _deltaX += 0.5 - - // extend xDelta to make space for multiple datasets (if ther are one) - _deltaX *= CGFloat(_data.dataSetCount) - - let groupSpace = barData.groupSpace - _deltaX += CGFloat(barData.xValCount) * groupSpace - _chartXMax = Double(_deltaX) - _chartXMin - } - - /// - returns: the Highlight object (contains x-index and DataSet index) of the selected value at the given touch point inside the BarChart. - public override func getHighlightByTouchPoint(pt: CGPoint) -> ChartHighlight? - { - if (_dataNotSet || _data === nil) - { - print("Can't select by touch. No data set.", terminator: "\n") - return nil - } - - return _highlighter?.getHighlight(x: Double(pt.x), y: Double(pt.y)) - } - - /// - returns: the bounding box of the specified Entry in the specified DataSet. Returns null if the Entry could not be found in the charts data. - public func getBarBounds(e: BarChartDataEntry) -> CGRect! - { - let set = _data.getDataSetForEntry(e) as! BarChartDataSet! - - if (set === nil) - { - return nil - } - - let barspace = set.barSpace - let y = CGFloat(e.value) - let x = CGFloat(e.xIndex) - - let barWidth: CGFloat = 0.5 - - let spaceHalf = barspace / 2.0 - let left = x - barWidth + spaceHalf - let right = x + barWidth - spaceHalf - let top = y >= 0.0 ? y : 0.0 - let bottom = y <= 0.0 ? y : 0.0 - - var bounds = CGRect(x: left, y: top, width: right - left, height: bottom - top) - - getTransformer(set.axisDependency).rectValueToPixel(&bounds) - - return bounds - } - - public override var lowestVisibleXIndex: Int - { - let step = CGFloat(_data.dataSetCount) - let div = (step <= 1.0) ? 1.0 : step + (_data as! BarChartData).groupSpace - - var pt = CGPoint(x: _viewPortHandler.contentLeft, y: _viewPortHandler.contentBottom) - getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - - return Int((pt.x <= CGFloat(chartXMin)) ? 0.0 : (pt.x / div) + 1.0) - } - - public override var highestVisibleXIndex: Int - { - let step = CGFloat(_data.dataSetCount) - let div = (step <= 1.0) ? 1.0 : step + (_data as! BarChartData).groupSpace - - var pt = CGPoint(x: _viewPortHandler.contentRight, y: _viewPortHandler.contentBottom) - getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - - return Int((pt.x >= CGFloat(chartXMax)) ? CGFloat(chartXMax) / div : (pt.x / div)) - } - - // MARK: Accessors - - /// flag that enables or disables the highlighting arrow - public var drawHighlightArrowEnabled: Bool - { - get { return _drawHighlightArrowEnabled; } - set - { - _drawHighlightArrowEnabled = newValue - setNeedsDisplay() - } - } - - /// if set to true, all values are drawn above their bars, instead of below their top - public var drawValueAboveBarEnabled: Bool - { - get { return _drawValueAboveBarEnabled; } - set - { - _drawValueAboveBarEnabled = newValue - setNeedsDisplay() - } - } - - /// if set to true, a grey area is drawn behind each bar that indicates the maximum value - public var drawBarShadowEnabled: Bool - { - get { return _drawBarShadowEnabled; } - set - { - _drawBarShadowEnabled = newValue - setNeedsDisplay() - } - } - - /// - returns: true if drawing the highlighting arrow is enabled, false if not - public var isDrawHighlightArrowEnabled: Bool { return drawHighlightArrowEnabled; } - - /// - returns: true if drawing values above bars is enabled, false if not - public var isDrawValueAboveBarEnabled: Bool { return drawValueAboveBarEnabled; } - - /// - returns: true if drawing shadows (maxvalue) for each bar is enabled, false if not - public var isDrawBarShadowEnabled: Bool { return drawBarShadowEnabled; } - - // MARK: - BarChartRendererDelegate - - public func barChartRendererData(renderer: BarChartRenderer) -> BarChartData! - { - return _data as! BarChartData! - } - - public func barChartRenderer(renderer: BarChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return getTransformer(which) - } - - public func barChartRendererMaxVisibleValueCount(renderer: BarChartRenderer) -> Int - { - return maxVisibleValueCount - } - - public func barChartDefaultRendererValueFormatter(renderer: BarChartRenderer) -> NSNumberFormatter! - { - return valueFormatter - } - - public func barChartRendererChartYMax(renderer: BarChartRenderer) -> Double - { - return chartYMax - } - - public func barChartRendererChartYMin(renderer: BarChartRenderer) -> Double - { - return chartYMin - } - - public func barChartRendererChartXMax(renderer: BarChartRenderer) -> Double - { - return chartXMax - } - - public func barChartRendererChartXMin(renderer: BarChartRenderer) -> Double - { - return chartXMin - } - - public func barChartIsDrawHighlightArrowEnabled(renderer: BarChartRenderer) -> Bool - { - return drawHighlightArrowEnabled - } - - public func barChartIsDrawValueAboveBarEnabled(renderer: BarChartRenderer) -> Bool - { - return drawValueAboveBarEnabled - } - - public func barChartIsDrawBarShadowEnabled(renderer: BarChartRenderer) -> Bool - { - return drawBarShadowEnabled - } - - public func barChartIsInverted(renderer: BarChartRenderer, axis: ChartYAxis.AxisDependency) -> Bool - { - return getAxis(axis).isInverted - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/BarLineChartViewBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/BarLineChartViewBase.swift deleted file mode 100644 index bbebce91..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/BarLineChartViewBase.swift +++ /dev/null @@ -1,1739 +0,0 @@ -// -// BarLineChartViewBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -/// Base-class of LineChart, BarChart, ScatterChart and CandleStickChart. -public class BarLineChartViewBase: ChartViewBase, UIGestureRecognizerDelegate -{ - /// the maximum number of entried to which values will be drawn - internal var _maxVisibleValueCount = 100 - - /// flag that indicates if auto scaling on the y axis is enabled - private var _autoScaleMinMaxEnabled = false - private var _autoScaleLastLowestVisibleXIndex: Int! - private var _autoScaleLastHighestVisibleXIndex: Int! - - private var _pinchZoomEnabled = false - private var _doubleTapToZoomEnabled = true - private var _dragEnabled = true - - private var _scaleXEnabled = true - private var _scaleYEnabled = true - - /// the color for the background of the chart-drawing area (everything behind the grid lines). - public var gridBackgroundColor = UIColor(red: 240/255.0, green: 240/255.0, blue: 240/255.0, alpha: 1.0) - - public var borderColor = UIColor.blackColor() - public var borderLineWidth: CGFloat = 1.0 - - /// flag indicating if the grid background should be drawn or not - public var drawGridBackgroundEnabled = true - - /// Sets drawing the borders rectangle to true. If this is enabled, there is no point drawing the axis-lines of x- and y-axis. - public var drawBordersEnabled = false - - /// Sets the minimum offset (padding) around the chart, defaults to 10 - public var minOffset = CGFloat(10.0) - - /// the object representing the labels on the y-axis, this object is prepared - /// in the pepareYLabels() method - internal var _leftAxis: ChartYAxis! - internal var _rightAxis: ChartYAxis! - - /// the object representing the labels on the x-axis - internal var _xAxis: ChartXAxis! - - internal var _leftYAxisRenderer: ChartYAxisRenderer! - internal var _rightYAxisRenderer: ChartYAxisRenderer! - - internal var _leftAxisTransformer: ChartTransformer! - internal var _rightAxisTransformer: ChartTransformer! - - internal var _xAxisRenderer: ChartXAxisRenderer! - - internal var _tapGestureRecognizer: UITapGestureRecognizer! - internal var _doubleTapGestureRecognizer: UITapGestureRecognizer! - #if !os(tvOS) - internal var _pinchGestureRecognizer: UIPinchGestureRecognizer! - #endif - internal var _panGestureRecognizer: UIPanGestureRecognizer! - - /// flag that indicates if a custom viewport offset has been set - private var _customViewPortEnabled = false - - public override init(frame: CGRect) - { - super.init(frame: frame) - } - - public required init?(coder aDecoder: NSCoder) - { - super.init(coder: aDecoder) - } - - deinit - { - stopDeceleration() - } - - internal override func initialize() - { - super.initialize() - - _leftAxis = ChartYAxis(position: .Left) - _rightAxis = ChartYAxis(position: .Right) - - _xAxis = ChartXAxis() - - _leftAxisTransformer = ChartTransformer(viewPortHandler: _viewPortHandler) - _rightAxisTransformer = ChartTransformer(viewPortHandler: _viewPortHandler) - - _leftYAxisRenderer = ChartYAxisRenderer(viewPortHandler: _viewPortHandler, yAxis: _leftAxis, transformer: _leftAxisTransformer) - _rightYAxisRenderer = ChartYAxisRenderer(viewPortHandler: _viewPortHandler, yAxis: _rightAxis, transformer: _rightAxisTransformer) - - _xAxisRenderer = ChartXAxisRenderer(viewPortHandler: _viewPortHandler, xAxis: _xAxis, transformer: _leftAxisTransformer) - - _highlighter = ChartHighlighter(chart: self) - - _tapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("tapGestureRecognized:")) - _doubleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("doubleTapGestureRecognized:")) - _doubleTapGestureRecognizer.numberOfTapsRequired = 2 - _panGestureRecognizer = UIPanGestureRecognizer(target: self, action: Selector("panGestureRecognized:")) - - _panGestureRecognizer.delegate = self - - self.addGestureRecognizer(_tapGestureRecognizer) - self.addGestureRecognizer(_doubleTapGestureRecognizer) - self.addGestureRecognizer(_panGestureRecognizer) - - _doubleTapGestureRecognizer.enabled = _doubleTapToZoomEnabled - _panGestureRecognizer.enabled = _dragEnabled - - #if !os(tvOS) - _pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: Selector("pinchGestureRecognized:")) - _pinchGestureRecognizer.delegate = self - self.addGestureRecognizer(_pinchGestureRecognizer) - _pinchGestureRecognizer.enabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled - #endif - } - - public override func drawRect(rect: CGRect) - { - super.drawRect(rect) - - if (_dataNotSet) - { - return - } - - let context = UIGraphicsGetCurrentContext() - - calcModulus() - - if (_xAxisRenderer !== nil) - { - _xAxisRenderer!.calcXBounds(chart: self, xAxisModulus: _xAxis.axisLabelModulus) - } - if (renderer !== nil) - { - renderer!.calcXBounds(chart: self, xAxisModulus: _xAxis.axisLabelModulus) - } - - // execute all drawing commands - drawGridBackground(context: context) - - if (_leftAxis.isEnabled) - { - _leftYAxisRenderer?.computeAxis(yMin: _leftAxis.axisMinimum, yMax: _leftAxis.axisMaximum) - } - if (_rightAxis.isEnabled) - { - _rightYAxisRenderer?.computeAxis(yMin: _rightAxis.axisMinimum, yMax: _rightAxis.axisMaximum) - } - - _xAxisRenderer?.renderAxisLine(context: context) - _leftYAxisRenderer?.renderAxisLine(context: context) - _rightYAxisRenderer?.renderAxisLine(context: context) - - if (_autoScaleMinMaxEnabled) - { - let lowestVisibleXIndex = self.lowestVisibleXIndex, - highestVisibleXIndex = self.highestVisibleXIndex - - if (_autoScaleLastLowestVisibleXIndex == nil || _autoScaleLastLowestVisibleXIndex != lowestVisibleXIndex || - _autoScaleLastHighestVisibleXIndex == nil || _autoScaleLastHighestVisibleXIndex != highestVisibleXIndex) - { - calcMinMax() - calculateOffsets() - - _autoScaleLastLowestVisibleXIndex = lowestVisibleXIndex - _autoScaleLastHighestVisibleXIndex = highestVisibleXIndex - } - } - - // make sure the graph values and grid cannot be drawn outside the content-rect - CGContextSaveGState(context) - - CGContextClipToRect(context, _viewPortHandler.contentRect) - - if (_xAxis.isDrawLimitLinesBehindDataEnabled) - { - _xAxisRenderer?.renderLimitLines(context: context) - } - if (_leftAxis.isDrawLimitLinesBehindDataEnabled) - { - _leftYAxisRenderer?.renderLimitLines(context: context) - } - if (_rightAxis.isDrawLimitLinesBehindDataEnabled) - { - _rightYAxisRenderer?.renderLimitLines(context: context) - } - - _xAxisRenderer?.renderGridLines(context: context) - _leftYAxisRenderer?.renderGridLines(context: context) - _rightYAxisRenderer?.renderGridLines(context: context) - - renderer?.drawData(context: context) - - if (!_xAxis.isDrawLimitLinesBehindDataEnabled) - { - _xAxisRenderer?.renderLimitLines(context: context) - } - if (!_leftAxis.isDrawLimitLinesBehindDataEnabled) - { - _leftYAxisRenderer?.renderLimitLines(context: context) - } - if (!_rightAxis.isDrawLimitLinesBehindDataEnabled) - { - _rightYAxisRenderer?.renderLimitLines(context: context) - } - - // if highlighting is enabled - if (valuesToHighlight()) - { - renderer?.drawHighlighted(context: context, indices: _indicesToHightlight) - } - - // Removes clipping rectangle - CGContextRestoreGState(context) - - renderer!.drawExtras(context: context) - - _xAxisRenderer.renderAxisLabels(context: context) - _leftYAxisRenderer.renderAxisLabels(context: context) - _rightYAxisRenderer.renderAxisLabels(context: context) - - renderer!.drawValues(context: context) - - _legendRenderer.renderLegend(context: context) - // drawLegend() - - drawMarkers(context: context) - - drawDescription(context: context) - } - - internal func prepareValuePxMatrix() - { - _rightAxisTransformer.prepareMatrixValuePx(chartXMin: _chartXMin, deltaX: _deltaX, deltaY: CGFloat(_rightAxis.axisRange), chartYMin: _rightAxis.axisMinimum) - _leftAxisTransformer.prepareMatrixValuePx(chartXMin: _chartXMin, deltaX: _deltaX, deltaY: CGFloat(_leftAxis.axisRange), chartYMin: _leftAxis.axisMinimum) - } - - internal func prepareOffsetMatrix() - { - _rightAxisTransformer.prepareMatrixOffset(_rightAxis.isInverted) - _leftAxisTransformer.prepareMatrixOffset(_leftAxis.isInverted) - } - - public override func notifyDataSetChanged() - { - if (_dataNotSet) - { - return - } - - calcMinMax() - - _leftAxis?._defaultValueFormatter = _defaultValueFormatter - _rightAxis?._defaultValueFormatter = _defaultValueFormatter - - _leftYAxisRenderer?.computeAxis(yMin: _leftAxis.axisMinimum, yMax: _leftAxis.axisMaximum) - _rightYAxisRenderer?.computeAxis(yMin: _rightAxis.axisMinimum, yMax: _rightAxis.axisMaximum) - - _xAxisRenderer?.computeAxis(xValAverageLength: _data.xValAverageLength, xValues: _data.xVals) - - if (_legend !== nil) - { - _legendRenderer?.computeLegend(_data) - } - - calculateOffsets() - - setNeedsDisplay() - } - - internal override func calcMinMax() - { - if (_autoScaleMinMaxEnabled) - { - _data.calcMinMax(start: lowestVisibleXIndex, end: highestVisibleXIndex) - } - - var minLeft = _data.getYMin(.Left) - var maxLeft = _data.getYMax(.Left) - var minRight = _data.getYMin(.Right) - var maxRight = _data.getYMax(.Right) - - let leftRange = abs(maxLeft - (_leftAxis.isStartAtZeroEnabled ? 0.0 : minLeft)) - let rightRange = abs(maxRight - (_rightAxis.isStartAtZeroEnabled ? 0.0 : minRight)) - - // in case all values are equal - if (leftRange == 0.0) - { - maxLeft = maxLeft + 1.0 - if (!_leftAxis.isStartAtZeroEnabled) - { - minLeft = minLeft - 1.0 - } - } - - if (rightRange == 0.0) - { - maxRight = maxRight + 1.0 - if (!_rightAxis.isStartAtZeroEnabled) - { - minRight = minRight - 1.0 - } - } - - let topSpaceLeft = leftRange * Double(_leftAxis.spaceTop) - let topSpaceRight = rightRange * Double(_rightAxis.spaceTop) - let bottomSpaceLeft = leftRange * Double(_leftAxis.spaceBottom) - let bottomSpaceRight = rightRange * Double(_rightAxis.spaceBottom) - - _chartXMax = Double(_data.xVals.count - 1) - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - - // Consider sticking one of the edges of the axis to zero (0.0) - - if _leftAxis.isStartAtZeroEnabled - { - if minLeft < 0.0 && maxLeft < 0.0 - { - // If the values are all negative, let's stay in the negative zone - _leftAxis.axisMinimum = min(0.0, !isnan(_leftAxis.customAxisMin) ? _leftAxis.customAxisMin : (minLeft - bottomSpaceLeft)) - _leftAxis.axisMaximum = 0.0 - } - else if minLeft >= 0.0 - { - // We have positive values only, stay in the positive zone - _leftAxis.axisMinimum = 0.0 - _leftAxis.axisMaximum = max(0.0, !isnan(_leftAxis.customAxisMax) ? _leftAxis.customAxisMax : (maxLeft + topSpaceLeft)) - } - else - { - // Stick the minimum to 0.0 or less, and maximum to 0.0 or more (startAtZero for negative/positive at the same time) - _leftAxis.axisMinimum = min(0.0, !isnan(_leftAxis.customAxisMin) ? _leftAxis.customAxisMin : (minLeft - bottomSpaceLeft)) - _leftAxis.axisMaximum = max(0.0, !isnan(_leftAxis.customAxisMax) ? _leftAxis.customAxisMax : (maxLeft + topSpaceLeft)) - } - } - else - { - // Use the values as they are - _leftAxis.axisMinimum = !isnan(_leftAxis.customAxisMin) ? _leftAxis.customAxisMin : (minLeft - bottomSpaceLeft) - _leftAxis.axisMaximum = !isnan(_leftAxis.customAxisMax) ? _leftAxis.customAxisMax : (maxLeft + topSpaceLeft) - } - - if _rightAxis.isStartAtZeroEnabled - { - if minRight < 0.0 && maxRight < 0.0 - { - // If the values are all negative, let's stay in the negative zone - _rightAxis.axisMinimum = min(0.0, !isnan(_rightAxis.customAxisMin) ? _rightAxis.customAxisMin : (minRight - bottomSpaceRight)) - _rightAxis.axisMaximum = 0.0 - } - else if minRight >= 0.0 - { - // We have positive values only, stay in the positive zone - _rightAxis.axisMinimum = 0.0 - _rightAxis.axisMaximum = max(0.0, !isnan(_rightAxis.customAxisMax) ? _rightAxis.customAxisMax : (maxRight + topSpaceRight)) - } - else - { - // Stick the minimum to 0.0 or less, and maximum to 0.0 or more (startAtZero for negative/positive at the same time) - _rightAxis.axisMinimum = min(0.0, !isnan(_rightAxis.customAxisMin) ? _rightAxis.customAxisMin : (minRight - bottomSpaceRight)) - _rightAxis.axisMaximum = max(0.0, !isnan(_rightAxis.customAxisMax) ? _rightAxis.customAxisMax : (maxRight + topSpaceRight)) - } - } - else - { - _rightAxis.axisMinimum = !isnan(_rightAxis.customAxisMin) ? _rightAxis.customAxisMin : (minRight - bottomSpaceRight) - _rightAxis.axisMaximum = !isnan(_rightAxis.customAxisMax) ? _rightAxis.customAxisMax : (maxRight + topSpaceRight) - } - - _leftAxis.axisRange = abs(_leftAxis.axisMaximum - _leftAxis.axisMinimum) - _rightAxis.axisRange = abs(_rightAxis.axisMaximum - _rightAxis.axisMinimum) - } - - internal override func calculateOffsets() - { - if (!_customViewPortEnabled) - { - var offsetLeft = CGFloat(0.0) - var offsetRight = CGFloat(0.0) - var offsetTop = CGFloat(0.0) - var offsetBottom = CGFloat(0.0) - - // setup offsets for legend - if (_legend !== nil && _legend.isEnabled) - { - if (_legend.position == .RightOfChart - || _legend.position == .RightOfChartCenter) - { - offsetRight += min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + _legend.xOffset * 2.0 - } - if (_legend.position == .LeftOfChart - || _legend.position == .LeftOfChartCenter) - { - offsetLeft += min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + _legend.xOffset * 2.0 - } - else if (_legend.position == .BelowChartLeft - || _legend.position == .BelowChartRight - || _legend.position == .BelowChartCenter) - { - // It's possible that we do not need this offset anymore as it - // is available through the extraOffsets, but changing it can mean - // changing default visibility for existing apps. - let yOffset = _legend.textHeightMax - - offsetBottom += min(_legend.neededHeight + yOffset, _viewPortHandler.chartHeight * _legend.maxSizePercent) - } - else if (_legend.position == .AboveChartLeft - || _legend.position == .AboveChartRight - || _legend.position == .AboveChartCenter) - { - // It's possible that we do not need this offset anymore as it - // is available through the extraOffsets, but changing it can mean - // changing default visibility for existing apps. - let yOffset = _legend.textHeightMax - - offsetTop += min(_legend.neededHeight + yOffset, _viewPortHandler.chartHeight * _legend.maxSizePercent) - } - } - - // offsets for y-labels - if (leftAxis.needsOffset) - { - offsetLeft += leftAxis.requiredSize().width - } - - if (rightAxis.needsOffset) - { - offsetRight += rightAxis.requiredSize().width - } - - if (xAxis.isEnabled && xAxis.isDrawLabelsEnabled) - { - let xlabelheight = xAxis.labelHeight * 2.0 - - // offsets for x-labels - if (xAxis.labelPosition == .Bottom) - { - offsetBottom += xlabelheight - } - else if (xAxis.labelPosition == .Top) - { - offsetTop += xlabelheight - } - else if (xAxis.labelPosition == .BothSided) - { - offsetBottom += xlabelheight - offsetTop += xlabelheight - } - } - - offsetTop += self.extraTopOffset - offsetRight += self.extraRightOffset - offsetBottom += self.extraBottomOffset - offsetLeft += self.extraLeftOffset - - _viewPortHandler.restrainViewPort( - offsetLeft: max(self.minOffset, offsetLeft), - offsetTop: max(self.minOffset, offsetTop), - offsetRight: max(self.minOffset, offsetRight), - offsetBottom: max(self.minOffset, offsetBottom)) - } - - prepareOffsetMatrix() - prepareValuePxMatrix() - } - - - /// calculates the modulus for x-labels and grid - internal func calcModulus() - { - if (_xAxis === nil || !_xAxis.isEnabled) - { - return - } - - if (!_xAxis.isAxisModulusCustom) - { - _xAxis.axisLabelModulus = Int(ceil((CGFloat(_data.xValCount) * _xAxis.labelWidth) / (_viewPortHandler.contentWidth * _viewPortHandler.touchMatrix.a))) - } - - if (_xAxis.axisLabelModulus < 1) - { - _xAxis.axisLabelModulus = 1 - } - } - - public override func getMarkerPosition(entry e: ChartDataEntry, highlight: ChartHighlight) -> CGPoint - { - let dataSetIndex = highlight.dataSetIndex - var xPos = CGFloat(e.xIndex) - var yPos = CGFloat(e.value) - - if (self.isKindOfClass(BarChartView)) - { - let bd = _data as! BarChartData - let space = bd.groupSpace - let setCount = _data.dataSetCount - let i = e.xIndex - - if self is HorizontalBarChartView - { - // calculate the x-position, depending on datasetcount - let y = CGFloat(i + i * (setCount - 1) + dataSetIndex) + space * CGFloat(i) + space / 2.0 - - yPos = y - - if let entry = e as? BarChartDataEntry - { - if entry.values != nil && highlight.range !== nil - { - xPos = CGFloat(highlight.range!.to) - } - else - { - xPos = CGFloat(e.value) - } - } - } - else - { - let x = CGFloat(i + i * (setCount - 1) + dataSetIndex) + space * CGFloat(i) + space / 2.0 - - xPos = x - - if let entry = e as? BarChartDataEntry - { - if entry.values != nil && highlight.range !== nil - { - yPos = CGFloat(highlight.range!.to) - } - else - { - yPos = CGFloat(e.value) - } - } - } - } - - // position of the marker depends on selected value index and value - var pt = CGPoint(x: xPos, y: yPos * _animator.phaseY) - - getTransformer(_data.getDataSetByIndex(dataSetIndex)!.axisDependency).pointValueToPixel(&pt) - - return pt - } - - /// draws the grid background - internal func drawGridBackground(context context: CGContext?) - { - if (drawGridBackgroundEnabled || drawBordersEnabled) - { - CGContextSaveGState(context) - } - - if (drawGridBackgroundEnabled) - { - // draw the grid background - CGContextSetFillColorWithColor(context, gridBackgroundColor.CGColor) - CGContextFillRect(context, _viewPortHandler.contentRect) - } - - if (drawBordersEnabled) - { - CGContextSetLineWidth(context, borderLineWidth) - CGContextSetStrokeColorWithColor(context, borderColor.CGColor) - CGContextStrokeRect(context, _viewPortHandler.contentRect) - } - - if (drawGridBackgroundEnabled || drawBordersEnabled) - { - CGContextRestoreGState(context) - } - } - - /// - returns: the Transformer class that contains all matrices and is - /// responsible for transforming values into pixels on the screen and - /// backwards. - public func getTransformer(which: ChartYAxis.AxisDependency) -> ChartTransformer - { - if (which == .Left) - { - return _leftAxisTransformer - } - else - { - return _rightAxisTransformer - } - } - - // MARK: - Gestures - - private enum GestureScaleAxis - { - case Both - case X - case Y - } - - private var _isDragging = false - private var _isScaling = false - private var _gestureScaleAxis = GestureScaleAxis.Both - private var _closestDataSetToTouch: ChartDataSet! - private var _panGestureReachedEdge: Bool = false - private weak var _outerScrollView: UIScrollView? - - private var _lastPanPoint = CGPoint() /// This is to prevent using setTranslation which resets velocity - - private var _decelerationLastTime: NSTimeInterval = 0.0 - private var _decelerationDisplayLink: CADisplayLink! - private var _decelerationVelocity = CGPoint() - - @objc private func tapGestureRecognized(recognizer: UITapGestureRecognizer) - { - if (_dataNotSet) - { - return - } - - if (recognizer.state == UIGestureRecognizerState.Ended) - { - let h = getHighlightByTouchPoint(recognizer.locationInView(self)) - - if (h === nil || h!.isEqual(self.lastHighlighted)) - { - self.highlightValue(highlight: nil, callDelegate: true) - self.lastHighlighted = nil - } - else - { - self.lastHighlighted = h - self.highlightValue(highlight: h, callDelegate: true) - } - } - } - - @objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer) - { - if (_dataNotSet) - { - return - } - - if (recognizer.state == UIGestureRecognizerState.Ended) - { - if (!_dataNotSet && _doubleTapToZoomEnabled) - { - var location = recognizer.locationInView(self) - location.x = location.x - _viewPortHandler.offsetLeft - - if (isAnyAxisInverted && _closestDataSetToTouch !== nil && getAxis(_closestDataSetToTouch.axisDependency).isInverted) - { - location.y = -(location.y - _viewPortHandler.offsetTop) - } - else - { - location.y = -(self.bounds.size.height - location.y - _viewPortHandler.offsetBottom) - } - - self.zoom(isScaleXEnabled ? 1.4 : 1.0, scaleY: isScaleYEnabled ? 1.4 : 1.0, x: location.x, y: location.y) - } - } - } - - #if !os(tvOS) - @objc private func pinchGestureRecognized(recognizer: UIPinchGestureRecognizer) - { - if (recognizer.state == UIGestureRecognizerState.Began) - { - stopDeceleration() - - if (!_dataNotSet && (_pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled)) - { - _isScaling = true - - if (_pinchZoomEnabled) - { - _gestureScaleAxis = .Both - } - else - { - let x = abs(recognizer.locationInView(self).x - recognizer.locationOfTouch(1, inView: self).x) - let y = abs(recognizer.locationInView(self).y - recognizer.locationOfTouch(1, inView: self).y) - - if (x > y) - { - _gestureScaleAxis = .X - } - else - { - _gestureScaleAxis = .Y - } - } - } - } - else if (recognizer.state == UIGestureRecognizerState.Ended || - recognizer.state == UIGestureRecognizerState.Cancelled) - { - if (_isScaling) - { - _isScaling = false - - // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. - calculateOffsets() - setNeedsDisplay() - } - } - else if (recognizer.state == UIGestureRecognizerState.Changed) - { - let isZoomingOut = (recognizer.scale < 1) - let canZoomMoreX = isZoomingOut ? _viewPortHandler.canZoomOutMoreX : _viewPortHandler.canZoomInMoreX - - if (_isScaling) - { - if (canZoomMoreX || (_gestureScaleAxis == .Both || _gestureScaleAxis == .Y && _scaleYEnabled)) - { - var location = recognizer.locationInView(self) - location.x = location.x - _viewPortHandler.offsetLeft - - if (isAnyAxisInverted && _closestDataSetToTouch !== nil && getAxis(_closestDataSetToTouch.axisDependency).isInverted) - { - location.y = -(location.y - _viewPortHandler.offsetTop) - } - else - { - location.y = -(_viewPortHandler.chartHeight - location.y - _viewPortHandler.offsetBottom) - } - - let scaleX = (_gestureScaleAxis == .Both || _gestureScaleAxis == .X) && _scaleXEnabled ? recognizer.scale : 1.0 - let scaleY = (_gestureScaleAxis == .Both || _gestureScaleAxis == .Y) && _scaleYEnabled ? recognizer.scale : 1.0 - - var matrix = CGAffineTransformMakeTranslation(location.x, location.y) - matrix = CGAffineTransformScale(matrix, scaleX, scaleY) - matrix = CGAffineTransformTranslate(matrix, - -location.x, -location.y) - - matrix = CGAffineTransformConcat(_viewPortHandler.touchMatrix, matrix) - - _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: true) - - if (delegate !== nil) - { - delegate?.chartScaled?(self, scaleX: scaleX, scaleY: scaleY) - } - } - - recognizer.scale = 1.0 - } - } - } - #endif - - @objc private func panGestureRecognized(recognizer: UIPanGestureRecognizer) - { - if (recognizer.state == UIGestureRecognizerState.Began && recognizer.numberOfTouches() > 0) - { - stopDeceleration() - - if ((!_dataNotSet && _dragEnabled && !self.hasNoDragOffset) || !self.isFullyZoomedOut) - { - _isDragging = true - - _closestDataSetToTouch = getDataSetByTouchPoint(recognizer.locationOfTouch(0, inView: self)) - - let translation = recognizer.translationInView(self) - let didUserDrag = (self is HorizontalBarChartView) ? translation.y != 0.0 : translation.x != 0.0 - - // Check to see if user dragged at all and if so, can the chart be dragged by the given amount - if (didUserDrag && !performPanChange(translation: translation)) - { - if (_outerScrollView !== nil) - { - // We can stop dragging right now, and let the scroll view take control - _outerScrollView = nil - _isDragging = false - } - } - else - { - if (_outerScrollView !== nil) - { - // Prevent the parent scroll view from scrolling - _outerScrollView?.scrollEnabled = false - } - } - - _lastPanPoint = recognizer.translationInView(self) - } - } - else if (recognizer.state == UIGestureRecognizerState.Changed) - { - if (_isDragging) - { - let originalTranslation = recognizer.translationInView(self) - let translation = CGPoint(x: originalTranslation.x - _lastPanPoint.x, y: originalTranslation.y - _lastPanPoint.y) - - performPanChange(translation: translation) - - _lastPanPoint = originalTranslation - } - else if (isHighlightPerDragEnabled) - { - let h = getHighlightByTouchPoint(recognizer.locationInView(self)) - - let lastHighlighted = self.lastHighlighted - - if ((h === nil && lastHighlighted !== nil) || - (h !== nil && lastHighlighted === nil) || - (h !== nil && lastHighlighted !== nil && !h!.isEqual(lastHighlighted))) - { - self.lastHighlighted = h - self.highlightValue(highlight: h, callDelegate: true) - } - } - } - else if (recognizer.state == UIGestureRecognizerState.Ended || recognizer.state == UIGestureRecognizerState.Cancelled) - { - if (_isDragging) - { - if (recognizer.state == UIGestureRecognizerState.Ended && isDragDecelerationEnabled) - { - stopDeceleration() - - _decelerationLastTime = CACurrentMediaTime() - _decelerationVelocity = recognizer.velocityInView(self) - - _decelerationDisplayLink = CADisplayLink(target: self, selector: Selector("decelerationLoop")) - _decelerationDisplayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - } - - _isDragging = false - } - - if (_outerScrollView !== nil) - { - _outerScrollView?.scrollEnabled = true - _outerScrollView = nil - } - } - } - - private func performPanChange(var translation translation: CGPoint) -> Bool - { - if (isAnyAxisInverted && _closestDataSetToTouch !== nil - && getAxis(_closestDataSetToTouch.axisDependency).isInverted) - { - if (self is HorizontalBarChartView) - { - translation.x = -translation.x - } - else - { - translation.y = -translation.y - } - } - - let originalMatrix = _viewPortHandler.touchMatrix - - var matrix = CGAffineTransformMakeTranslation(translation.x, translation.y) - matrix = CGAffineTransformConcat(originalMatrix, matrix) - - matrix = _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: true) - - if (delegate !== nil) - { - delegate?.chartTranslated?(self, dX: translation.x, dY: translation.y) - } - - // Did we managed to actually drag or did we reach the edge? - return matrix.tx != originalMatrix.tx || matrix.ty != originalMatrix.ty - } - - public func stopDeceleration() - { - if (_decelerationDisplayLink !== nil) - { - _decelerationDisplayLink.removeFromRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - _decelerationDisplayLink = nil - } - } - - @objc private func decelerationLoop() - { - let currentTime = CACurrentMediaTime() - - _decelerationVelocity.x *= self.dragDecelerationFrictionCoef - _decelerationVelocity.y *= self.dragDecelerationFrictionCoef - - let timeInterval = CGFloat(currentTime - _decelerationLastTime) - - let distance = CGPoint( - x: _decelerationVelocity.x * timeInterval, - y: _decelerationVelocity.y * timeInterval - ) - - if (!performPanChange(translation: distance)) - { - // We reached the edge, stop - _decelerationVelocity.x = 0.0 - _decelerationVelocity.y = 0.0 - } - - _decelerationLastTime = currentTime - - if (abs(_decelerationVelocity.x) < 0.001 && abs(_decelerationVelocity.y) < 0.001) - { - stopDeceleration() - - // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. - calculateOffsets() - setNeedsDisplay() - } - } - - public override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool - { - if (!super.gestureRecognizerShouldBegin(gestureRecognizer)) - { - return false - } - - if (gestureRecognizer == _panGestureRecognizer) - { - if (_dataNotSet || !_dragEnabled || !self.hasNoDragOffset || - (self.isFullyZoomedOut && !self.isHighlightPerDragEnabled)) - { - return false - } - } - else - { - #if !os(tvOS) - if (gestureRecognizer == _pinchGestureRecognizer) - { - if (_dataNotSet || (!_pinchZoomEnabled && !_scaleXEnabled && !_scaleYEnabled)) - { - return false - } - } - #endif - } - - return true - } - - public func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool - { - #if !os(tvOS) - if ((gestureRecognizer.isKindOfClass(UIPinchGestureRecognizer) && - otherGestureRecognizer.isKindOfClass(UIPanGestureRecognizer)) || - (gestureRecognizer.isKindOfClass(UIPanGestureRecognizer) && - otherGestureRecognizer.isKindOfClass(UIPinchGestureRecognizer))) - { - return true - } - #endif - - if (gestureRecognizer.isKindOfClass(UIPanGestureRecognizer) && - otherGestureRecognizer.isKindOfClass(UIPanGestureRecognizer) && ( - gestureRecognizer == _panGestureRecognizer - )) - { - var scrollView = self.superview - while (scrollView !== nil && !scrollView!.isKindOfClass(UIScrollView)) - { - scrollView = scrollView?.superview - } - var foundScrollView = scrollView as? UIScrollView - - if (foundScrollView !== nil && !foundScrollView!.scrollEnabled) - { - foundScrollView = nil - } - - var scrollViewPanGestureRecognizer: UIGestureRecognizer! - - if (foundScrollView !== nil) - { - for scrollRecognizer in foundScrollView!.gestureRecognizers! - { - if (scrollRecognizer.isKindOfClass(UIPanGestureRecognizer)) - { - scrollViewPanGestureRecognizer = scrollRecognizer as! UIPanGestureRecognizer - break - } - } - } - - if (otherGestureRecognizer === scrollViewPanGestureRecognizer) - { - _outerScrollView = foundScrollView - - return true - } - } - - return false - } - - /// MARK: Viewport modifiers - - /// Zooms in by 1.4, into the charts center. center. - public func zoomIn() - { - let matrix = _viewPortHandler.zoomIn(x: self.bounds.size.width / 2.0, y: -(self.bounds.size.height / 2.0)) - _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: true) - - // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. - calculateOffsets() - setNeedsDisplay() - } - - /// Zooms out by 0.7, from the charts center. center. - public func zoomOut() - { - let matrix = _viewPortHandler.zoomOut(x: self.bounds.size.width / 2.0, y: -(self.bounds.size.height / 2.0)) - _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: true) - - // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. - calculateOffsets() - setNeedsDisplay() - } - - /// Zooms in or out by the given scale factor. x and y are the coordinates - /// (in pixels) of the zoom center. - /// - /// - parameter scaleX: if < 1 --> zoom out, if > 1 --> zoom in - /// - parameter scaleY: if < 1 --> zoom out, if > 1 --> zoom in - /// - parameter x: - /// - parameter y: - public func zoom(scaleX: CGFloat, scaleY: CGFloat, x: CGFloat, y: CGFloat) - { - let matrix = _viewPortHandler.zoom(scaleX: scaleX, scaleY: scaleY, x: x, y: -y) - _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) - - // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. - calculateOffsets() - setNeedsDisplay() - } - - /// Resets all zooming and dragging and makes the chart fit exactly it's bounds. - public func fitScreen() - { - let matrix = _viewPortHandler.fitScreen() - _viewPortHandler.refresh(newMatrix: matrix, chart: self, invalidate: false) - - // Range might have changed, which means that Y-axis labels could have changed in size, affecting Y-axis size. So we need to recalculate offsets. - calculateOffsets() - setNeedsDisplay() - } - - /// Sets the minimum scale value to which can be zoomed out. 1 = fitScreen - public func setScaleMinima(scaleX: CGFloat, scaleY: CGFloat) - { - _viewPortHandler.setMinimumScaleX(scaleX) - _viewPortHandler.setMinimumScaleY(scaleY) - } - - /// Sets the size of the area (range on the x-axis) that should be maximum visible at once (no further zomming out allowed). - /// If this is e.g. set to 10, no more than 10 values on the x-axis can be viewed at once without scrolling. - public func setVisibleXRangeMaximum(maxXRange: CGFloat) - { - let xScale = _deltaX / maxXRange - _viewPortHandler.setMinimumScaleX(xScale) - } - - /// Sets the size of the area (range on the x-axis) that should be minimum visible at once (no further zooming in allowed). - /// If this is e.g. set to 10, no more than 10 values on the x-axis can be viewed at once without scrolling. - public func setVisibleXRangeMinimum(minXRange: CGFloat) - { - let xScale = _deltaX / minXRange - _viewPortHandler.setMaximumScaleX(xScale) - } - - /// Limits the maximum and minimum value count that can be visible by pinching and zooming. - /// e.g. minRange=10, maxRange=100 no less than 10 values and no more that 100 values can be viewed - /// at once without scrolling - public func setVisibleXRange(minXRange minXRange: CGFloat, maxXRange: CGFloat) - { - let maxScale = _deltaX / minXRange - let minScale = _deltaX / maxXRange - _viewPortHandler.setMinMaxScaleX(minScaleX: minScale, maxScaleX: maxScale) - } - - /// Sets the size of the area (range on the y-axis) that should be maximum visible at once. - /// - /// - parameter yRange: - /// - parameter axis: - the axis for which this limit should apply - public func setVisibleYRangeMaximum(maxYRange: CGFloat, axis: ChartYAxis.AxisDependency) - { - let yScale = getDeltaY(axis) / maxYRange - _viewPortHandler.setMinimumScaleY(yScale) - } - - /// Moves the left side of the current viewport to the specified x-index. - /// This also refreshes the chart by calling setNeedsDisplay(). - public func moveViewToX(xIndex: Int) - { - if (_viewPortHandler.hasChartDimens) - { - var pt = CGPoint(x: CGFloat(xIndex), y: 0.0) - - getTransformer(.Left).pointValueToPixel(&pt) - _viewPortHandler.centerViewPort(pt: pt, chart: self) - } - else - { - _sizeChangeEventActions.append({[weak self] () in self?.moveViewToX(xIndex); }) - } - } - - /// Centers the viewport to the specified y-value on the y-axis. - /// This also refreshes the chart by calling setNeedsDisplay(). - /// - /// - parameter yValue: - /// - parameter axis: - which axis should be used as a reference for the y-axis - public func moveViewToY(yValue: CGFloat, axis: ChartYAxis.AxisDependency) - { - if (_viewPortHandler.hasChartDimens) - { - let valsInView = getDeltaY(axis) / _viewPortHandler.scaleY - - var pt = CGPoint(x: 0.0, y: yValue + valsInView / 2.0) - - getTransformer(axis).pointValueToPixel(&pt) - _viewPortHandler.centerViewPort(pt: pt, chart: self) - } - else - { - _sizeChangeEventActions.append({[weak self] () in self?.moveViewToY(yValue, axis: axis); }) - } - } - - /// This will move the left side of the current viewport to the specified x-index on the x-axis, and center the viewport to the specified y-value on the y-axis. - /// This also refreshes the chart by calling setNeedsDisplay(). - /// - /// - parameter xIndex: - /// - parameter yValue: - /// - parameter axis: - which axis should be used as a reference for the y-axis - public func moveViewTo(xIndex xIndex: Int, yValue: CGFloat, axis: ChartYAxis.AxisDependency) - { - if (_viewPortHandler.hasChartDimens) - { - let valsInView = getDeltaY(axis) / _viewPortHandler.scaleY - - var pt = CGPoint(x: CGFloat(xIndex), y: yValue + valsInView / 2.0) - - getTransformer(axis).pointValueToPixel(&pt) - _viewPortHandler.centerViewPort(pt: pt, chart: self) - } - else - { - _sizeChangeEventActions.append({[weak self] () in self?.moveViewTo(xIndex: xIndex, yValue: yValue, axis: axis); }) - } - } - - /// This will move the center of the current viewport to the specified x-index and y-value. - /// This also refreshes the chart by calling setNeedsDisplay(). - /// - /// - parameter xIndex: - /// - parameter yValue: - /// - parameter axis: - which axis should be used as a reference for the y-axis - public func centerViewTo(xIndex xIndex: Int, yValue: CGFloat, axis: ChartYAxis.AxisDependency) - { - if (_viewPortHandler.hasChartDimens) - { - let valsInView = getDeltaY(axis) / _viewPortHandler.scaleY - let xsInView = CGFloat(xAxis.values.count) / _viewPortHandler.scaleX - - var pt = CGPoint(x: CGFloat(xIndex) - xsInView / 2.0, y: yValue + valsInView / 2.0) - - getTransformer(axis).pointValueToPixel(&pt) - _viewPortHandler.centerViewPort(pt: pt, chart: self) - } - else - { - _sizeChangeEventActions.append({[weak self] () in self?.centerViewTo(xIndex: xIndex, yValue: yValue, axis: axis); }) - } - } - - /// Sets custom offsets for the current `ChartViewPort` (the offsets on the sides of the actual chart window). Setting this will prevent the chart from automatically calculating it's offsets. Use `resetViewPortOffsets()` to undo this. - /// ONLY USE THIS WHEN YOU KNOW WHAT YOU ARE DOING, else use `setExtraOffsets(...)`. - public func setViewPortOffsets(left left: CGFloat, top: CGFloat, right: CGFloat, bottom: CGFloat) - { - _customViewPortEnabled = true - - if (NSThread.isMainThread()) - { - self._viewPortHandler.restrainViewPort(offsetLeft: left, offsetTop: top, offsetRight: right, offsetBottom: bottom) - prepareOffsetMatrix() - prepareValuePxMatrix() - } - else - { - dispatch_async(dispatch_get_main_queue(), { - self.setViewPortOffsets(left: left, top: top, right: right, bottom: bottom) - }) - } - } - - /// Resets all custom offsets set via `setViewPortOffsets(...)` method. Allows the chart to again calculate all offsets automatically. - public func resetViewPortOffsets() - { - _customViewPortEnabled = false - calculateOffsets() - } - - // MARK: - Accessors - - /// - returns: the delta-y value (y-value range) of the specified axis. - public func getDeltaY(axis: ChartYAxis.AxisDependency) -> CGFloat - { - if (axis == .Left) - { - return CGFloat(leftAxis.axisRange) - } - else - { - return CGFloat(rightAxis.axisRange) - } - } - - /// - returns: the position (in pixels) the provided Entry has inside the chart view - public func getPosition(e: ChartDataEntry, axis: ChartYAxis.AxisDependency) -> CGPoint - { - var vals = CGPoint(x: CGFloat(e.xIndex), y: CGFloat(e.value)) - - getTransformer(axis).pointValueToPixel(&vals) - - return vals - } - - /// the number of maximum visible drawn values on the chart - /// only active when `setDrawValues()` is enabled - public var maxVisibleValueCount: Int - { - get - { - return _maxVisibleValueCount - } - set - { - _maxVisibleValueCount = newValue - } - } - - /// is dragging enabled? (moving the chart with the finger) for the chart (this does not affect scaling). - public var dragEnabled: Bool - { - get - { - return _dragEnabled - } - set - { - if (_dragEnabled != newValue) - { - _dragEnabled = newValue - } - } - } - - /// is dragging enabled? (moving the chart with the finger) for the chart (this does not affect scaling). - public var isDragEnabled: Bool - { - return dragEnabled - } - - /// is scaling enabled? (zooming in and out by gesture) for the chart (this does not affect dragging). - public func setScaleEnabled(enabled: Bool) - { - if (_scaleXEnabled != enabled || _scaleYEnabled != enabled) - { - _scaleXEnabled = enabled - _scaleYEnabled = enabled - #if !os(tvOS) - _pinchGestureRecognizer.enabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled - #endif - } - } - - public var scaleXEnabled: Bool - { - get - { - return _scaleXEnabled - } - set - { - if (_scaleXEnabled != newValue) - { - _scaleXEnabled = newValue - #if !os(tvOS) - _pinchGestureRecognizer.enabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled - #endif - } - } - } - - public var scaleYEnabled: Bool - { - get - { - return _scaleYEnabled - } - set - { - if (_scaleYEnabled != newValue) - { - _scaleYEnabled = newValue - #if !os(tvOS) - _pinchGestureRecognizer.enabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled - #endif - } - } - } - - public var isScaleXEnabled: Bool { return scaleXEnabled; } - public var isScaleYEnabled: Bool { return scaleYEnabled; } - - /// flag that indicates if double tap zoom is enabled or not - public var doubleTapToZoomEnabled: Bool - { - get - { - return _doubleTapToZoomEnabled - } - set - { - if (_doubleTapToZoomEnabled != newValue) - { - _doubleTapToZoomEnabled = newValue - _doubleTapGestureRecognizer.enabled = _doubleTapToZoomEnabled - } - } - } - - /// **default**: true - /// - returns: true if zooming via double-tap is enabled false if not. - public var isDoubleTapToZoomEnabled: Bool - { - return doubleTapToZoomEnabled - } - - /// flag that indicates if highlighting per dragging over a fully zoomed out chart is enabled - public var highlightPerDragEnabled = true - - /// If set to true, highlighting per dragging over a fully zoomed out chart is enabled - /// You might want to disable this when using inside a `UIScrollView` - /// - /// **default**: true - public var isHighlightPerDragEnabled: Bool - { - return highlightPerDragEnabled - } - - /// **default**: true - /// - returns: true if drawing the grid background is enabled, false if not. - public var isDrawGridBackgroundEnabled: Bool - { - return drawGridBackgroundEnabled - } - - /// **default**: false - /// - returns: true if drawing the borders rectangle is enabled, false if not. - public var isDrawBordersEnabled: Bool - { - return drawBordersEnabled - } - - /// - returns: the Highlight object (contains x-index and DataSet index) of the selected value at the given touch point inside the Line-, Scatter-, or CandleStick-Chart. - public func getHighlightByTouchPoint(pt: CGPoint) -> ChartHighlight? - { - if (_dataNotSet || _data === nil) - { - print("Can't select by touch. No data set.", terminator: "\n") - return nil - } - - return _highlighter?.getHighlight(x: Double(pt.x), y: Double(pt.y)) - } - - /// - returns: the x and y values in the chart at the given touch point - /// (encapsulated in a `CGPoint`). This method transforms pixel coordinates to - /// coordinates / values in the chart. This is the opposite method to - /// `getPixelsForValues(...)`. - public func getValueByTouchPoint(var pt pt: CGPoint, axis: ChartYAxis.AxisDependency) -> CGPoint - { - getTransformer(axis).pixelToValue(&pt) - - return pt - } - - /// Transforms the given chart values into pixels. This is the opposite - /// method to `getValueByTouchPoint(...)`. - public func getPixelForValue(x: Double, y: Double, axis: ChartYAxis.AxisDependency) -> CGPoint - { - var pt = CGPoint(x: CGFloat(x), y: CGFloat(y)) - - getTransformer(axis).pointValueToPixel(&pt) - - return pt - } - - /// - returns: the y-value at the given touch position (must not necessarily be - /// a value contained in one of the datasets) - public func getYValueByTouchPoint(pt pt: CGPoint, axis: ChartYAxis.AxisDependency) -> CGFloat - { - return getValueByTouchPoint(pt: pt, axis: axis).y - } - - /// - returns: the Entry object displayed at the touched position of the chart - public func getEntryByTouchPoint(pt: CGPoint) -> ChartDataEntry! - { - let h = getHighlightByTouchPoint(pt) - if (h !== nil) - { - return _data!.getEntryForHighlight(h!) - } - return nil - } - - /// - returns: the DataSet object displayed at the touched position of the chart - public func getDataSetByTouchPoint(pt: CGPoint) -> BarLineScatterCandleBubbleChartDataSet! - { - let h = getHighlightByTouchPoint(pt) - if (h !== nil) - { - return _data.getDataSetByIndex(h!.dataSetIndex) as! BarLineScatterCandleBubbleChartDataSet! - } - return nil - } - - /// - returns: the lowest x-index (value on the x-axis) that is still visible on he chart. - public var lowestVisibleXIndex: Int - { - var pt = CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom) - getTransformer(.Left).pixelToValue(&pt) - return (pt.x <= 0.0) ? 0 : Int(pt.x + 1.0) - } - - /// - returns: the highest x-index (value on the x-axis) that is still visible on the chart. - public var highestVisibleXIndex: Int - { - var pt = CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentBottom) - getTransformer(.Left).pixelToValue(&pt) - return (_data != nil && Int(pt.x) >= _data.xValCount) ? _data.xValCount - 1 : Int(pt.x) - } - - /// - returns: the current x-scale factor - public var scaleX: CGFloat - { - if (_viewPortHandler === nil) - { - return 1.0 - } - return _viewPortHandler.scaleX - } - - /// - returns: the current y-scale factor - public var scaleY: CGFloat - { - if (_viewPortHandler === nil) - { - return 1.0 - } - return _viewPortHandler.scaleY - } - - /// if the chart is fully zoomed out, return true - public var isFullyZoomedOut: Bool { return _viewPortHandler.isFullyZoomedOut; } - - /// - returns: the left y-axis object. In the horizontal bar-chart, this is the - /// top axis. - public var leftAxis: ChartYAxis - { - return _leftAxis - } - - /// - returns: the right y-axis object. In the horizontal bar-chart, this is the - /// bottom axis. - public var rightAxis: ChartYAxis { return _rightAxis; } - - /// - returns: the y-axis object to the corresponding AxisDependency. In the - /// horizontal bar-chart, LEFT == top, RIGHT == BOTTOM - public func getAxis(axis: ChartYAxis.AxisDependency) -> ChartYAxis - { - if (axis == .Left) - { - return _leftAxis - } - else - { - return _rightAxis - } - } - - /// - returns: the object representing all x-labels, this method can be used to - /// acquire the XAxis object and modify it (e.g. change the position of the - /// labels) - public var xAxis: ChartXAxis - { - return _xAxis - } - - /// flag that indicates if pinch-zoom is enabled. if true, both x and y axis can be scaled with 2 fingers, if false, x and y axis can be scaled separately - public var pinchZoomEnabled: Bool - { - get - { - return _pinchZoomEnabled - } - set - { - if (_pinchZoomEnabled != newValue) - { - _pinchZoomEnabled = newValue - #if !os(tvOS) - _pinchGestureRecognizer.enabled = _pinchZoomEnabled || _scaleXEnabled || _scaleYEnabled - #endif - } - } - } - - /// **default**: false - /// - returns: true if pinch-zoom is enabled, false if not - public var isPinchZoomEnabled: Bool { return pinchZoomEnabled; } - - /// Set an offset in dp that allows the user to drag the chart over it's - /// bounds on the x-axis. - public func setDragOffsetX(offset: CGFloat) - { - _viewPortHandler.setDragOffsetX(offset) - } - - /// Set an offset in dp that allows the user to drag the chart over it's - /// bounds on the y-axis. - public func setDragOffsetY(offset: CGFloat) - { - _viewPortHandler.setDragOffsetY(offset) - } - - /// - returns: true if both drag offsets (x and y) are zero or smaller. - public var hasNoDragOffset: Bool { return _viewPortHandler.hasNoDragOffset; } - - /// The X axis renderer. This is a read-write property so you can set your own custom renderer here. - /// **default**: An instance of ChartXAxisRenderer - /// - returns: The current set X axis renderer - public var xAxisRenderer: ChartXAxisRenderer - { - get { return _xAxisRenderer } - set { _xAxisRenderer = newValue } - } - - /// The left Y axis renderer. This is a read-write property so you can set your own custom renderer here. - /// **default**: An instance of ChartYAxisRenderer - /// - returns: The current set left Y axis renderer - public var leftYAxisRenderer: ChartYAxisRenderer - { - get { return _leftYAxisRenderer } - set { _leftYAxisRenderer = newValue } - } - - /// The right Y axis renderer. This is a read-write property so you can set your own custom renderer here. - /// **default**: An instance of ChartYAxisRenderer - /// - returns: The current set right Y axis renderer - public var rightYAxisRenderer: ChartYAxisRenderer - { - get { return _rightYAxisRenderer } - set { _rightYAxisRenderer = newValue } - } - - public override var chartYMax: Double - { - return max(leftAxis.axisMaximum, rightAxis.axisMaximum) - } - - public override var chartYMin: Double - { - return min(leftAxis.axisMinimum, rightAxis.axisMinimum) - } - - /// - returns: true if either the left or the right or both axes are inverted. - public var isAnyAxisInverted: Bool - { - return _leftAxis.isInverted || _rightAxis.isInverted - } - - /// flag that indicates if auto scaling on the y axis is enabled. - /// if yes, the y axis automatically adjusts to the min and max y values of the current x axis range whenever the viewport changes - public var autoScaleMinMaxEnabled: Bool - { - get { return _autoScaleMinMaxEnabled; } - set { _autoScaleMinMaxEnabled = newValue; } - } - - /// **default**: false - /// - returns: true if auto scaling on the y axis is enabled. - public var isAutoScaleMinMaxEnabled : Bool { return autoScaleMinMaxEnabled; } - - /// Sets a minimum width to the specified y axis. - public func setYAxisMinWidth(which: ChartYAxis.AxisDependency, width: CGFloat) - { - if (which == .Left) - { - _leftAxis.minWidth = width - } - else - { - _rightAxis.minWidth = width - } - } - - /// **default**: 0.0 - /// - returns: the (custom) minimum width of the specified Y axis. - public func getYAxisMinWidth(which: ChartYAxis.AxisDependency) -> CGFloat - { - if (which == .Left) - { - return _leftAxis.minWidth - } - else - { - return _rightAxis.minWidth - } - } - /// Sets a maximum width to the specified y axis. - /// Zero (0.0) means there's no maximum width - public func setYAxisMaxWidth(which: ChartYAxis.AxisDependency, width: CGFloat) - { - if (which == .Left) - { - _leftAxis.maxWidth = width - } - else - { - _rightAxis.maxWidth = width - } - } - - /// Zero (0.0) means there's no maximum width - /// - /// **default**: 0.0 (no maximum specified) - /// - returns: the (custom) maximum width of the specified Y axis. - public func getYAxisMaxWidth(which: ChartYAxis.AxisDependency) -> CGFloat - { - if (which == .Left) - { - return _leftAxis.maxWidth - } - else - { - return _rightAxis.maxWidth - } - } - - /// - returns the width of the specified y axis. - public func getYAxisWidth(which: ChartYAxis.AxisDependency) -> CGFloat - { - if (which == .Left) - { - return _leftAxis.requiredSize().width - } - else - { - return _rightAxis.requiredSize().width - } - } -} - -/// Default formatter that calculates the position of the filled line. -internal class BarLineChartFillFormatter: NSObject, ChartFillFormatter -{ - private weak var _chart: BarLineChartViewBase! - - internal init(chart: BarLineChartViewBase) - { - _chart = chart - } - - internal func getFillLinePosition(dataSet dataSet: LineChartDataSet, data: LineChartData, chartMaxY: Double, chartMinY: Double) -> CGFloat - { - var fillMin = CGFloat(0.0) - - if (dataSet.yMax > 0.0 && dataSet.yMin < 0.0) - { - fillMin = 0.0 - } - else - { - if (!_chart.getAxis(dataSet.axisDependency).isStartAtZeroEnabled) - { - var max: Double, min: Double - - if (data.yMax > 0.0) - { - max = 0.0 - } - else - { - max = chartMaxY - } - - if (data.yMin < 0.0) - { - min = 0.0 - } - else - { - min = chartMinY - } - - fillMin = CGFloat(dataSet.yMin >= 0.0 ? min : max) - } - else - { - fillMin = 0.0 - } - } - - return fillMin - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/BubbleChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/BubbleChartView.swift deleted file mode 100644 index f337889c..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/BubbleChartView.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// BubbleChartView.swift -// Charts -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class BubbleChartView: BarLineChartViewBase, BubbleChartRendererDelegate -{ - public override func initialize() - { - super.initialize() - - renderer = BubbleChartRenderer(delegate: self, animator: _animator, viewPortHandler: _viewPortHandler) - } - - public override func calcMinMax() - { - super.calcMinMax() - - if (_deltaX == 0.0 && _data.yValCount > 0) - { - _deltaX = 1.0 - } - - _chartXMin = -0.5 - _chartXMax = Double(_data.xVals.count) - 0.5 - - if renderer as? BubbleChartRenderer !== nil, - let sets = _data.dataSets as? [BubbleChartDataSet] - { - for set in sets { - - let xmin = set.xMin - let xmax = set.xMax - - if (xmin < _chartXMin) - { - _chartXMin = xmin - } - - if (xmax > _chartXMax) - { - _chartXMax = xmax - } - } - } - - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - } - - // MARK: - BubbleChartRendererDelegate - - public func bubbleChartRendererData(renderer: BubbleChartRenderer) -> BubbleChartData! - { - return _data as! BubbleChartData! - } - - public func bubbleChartRenderer(renderer: BubbleChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return getTransformer(which) - } - - public func bubbleChartDefaultRendererValueFormatter(renderer: BubbleChartRenderer) -> NSNumberFormatter! - { - return self._defaultValueFormatter - } - - public func bubbleChartRendererChartYMax(renderer: BubbleChartRenderer) -> Double - { - return self.chartYMax - } - - public func bubbleChartRendererChartYMin(renderer: BubbleChartRenderer) -> Double - { - return self.chartYMin - } - - public func bubbleChartRendererChartXMax(renderer: BubbleChartRenderer) -> Double - { - return self.chartXMax - } - - public func bubbleChartRendererChartXMin(renderer: BubbleChartRenderer) -> Double - { - return self.chartXMin - } - - public func bubbleChartRendererMaxVisibleValueCount(renderer: BubbleChartRenderer) -> Int - { - return self.maxVisibleValueCount - } - - public func bubbleChartRendererXValCount(renderer: BubbleChartRenderer) -> Int - { - return _data.xValCount - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/CandleStickChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/CandleStickChartView.swift deleted file mode 100644 index e43f7720..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/CandleStickChartView.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// CandleStickChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// Financial chart type that draws candle-sticks. -public class CandleStickChartView: BarLineChartViewBase, CandleStickChartRendererDelegate -{ - internal override func initialize() - { - super.initialize() - - renderer = CandleStickChartRenderer(delegate: self, animator: _animator, viewPortHandler: _viewPortHandler) - _chartXMin = -0.5 - } - - internal override func calcMinMax() - { - super.calcMinMax() - - _chartXMax += 0.5 - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - } - - // MARK: - CandleStickChartRendererDelegate - - public func candleStickChartRendererCandleData(renderer: CandleStickChartRenderer) -> CandleChartData! - { - return _data as! CandleChartData! - } - - public func candleStickChartRenderer(renderer: CandleStickChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return self.getTransformer(which) - } - - public func candleStickChartDefaultRendererValueFormatter(renderer: CandleStickChartRenderer) -> NSNumberFormatter! - { - return self.valueFormatter - } - - public func candleStickChartRendererChartYMax(renderer: CandleStickChartRenderer) -> Double - { - return self.chartYMax - } - - public func candleStickChartRendererChartYMin(renderer: CandleStickChartRenderer) -> Double - { - return self.chartYMin - } - - public func candleStickChartRendererChartXMax(renderer: CandleStickChartRenderer) -> Double - { - return self.chartXMax - } - - public func candleStickChartRendererChartXMin(renderer: CandleStickChartRenderer) -> Double - { - return self.chartXMin - } - - public func candleStickChartRendererMaxVisibleValueCount(renderer: CandleStickChartRenderer) -> Int - { - return self.maxVisibleValueCount - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/ChartViewBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/ChartViewBase.swift deleted file mode 100755 index 924f447b..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/ChartViewBase.swift +++ /dev/null @@ -1,945 +0,0 @@ -// -// ChartViewBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// -// Based on https://github.com/PhilJay/MPAndroidChart/commit/c42b880 - -import Foundation -import UIKit - -@objc -public protocol ChartViewDelegate -{ - /// Called when a value has been selected inside the chart. - /// - parameter entry: The selected Entry. - /// - parameter dataSetIndex: The index in the datasets array of the data object the Entrys DataSet is in. - optional func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, dataSetIndex: Int, highlight: ChartHighlight) - - // Called when nothing has been selected or an "un-select" has been made. - optional func chartValueNothingSelected(chartView: ChartViewBase) - - // Callbacks when the chart is scaled / zoomed via pinch zoom gesture. - optional func chartScaled(chartView: ChartViewBase, scaleX: CGFloat, scaleY: CGFloat) - - // Callbacks when the chart is moved / translated via drag gesture. - optional func chartTranslated(chartView: ChartViewBase, dX: CGFloat, dY: CGFloat) -} - -public class ChartViewBase: UIView, ChartAnimatorDelegate -{ - // MARK: - Properties - - /// custom formatter that is used instead of the auto-formatter if set - internal var _valueFormatter = NSNumberFormatter() - - /// the default value formatter - internal var _defaultValueFormatter = NSNumberFormatter() - - /// object that holds all data that was originally set for the chart, before it was modified or any filtering algorithms had been applied - internal var _data: ChartData! - - /// If set to true, chart continues to scroll after touch up - public var dragDecelerationEnabled = true - - /// Deceleration friction coefficient in [0 ; 1] interval, higher values indicate that speed will decrease slowly, for example if it set to 0, it will stop immediately. - /// 1 is an invalid value, and will be converted to 0.999 automatically. - private var _dragDecelerationFrictionCoef: CGFloat = 0.9 - - /// font object used for drawing the description text in the bottom right corner of the chart - public var descriptionFont: UIFont? = UIFont(name: "HelveticaNeue", size: 9.0) - public var descriptionTextColor: UIColor! = UIColor.blackColor() - - /// font object for drawing the information text when there are no values in the chart - public var infoFont: UIFont! = UIFont(name: "HelveticaNeue", size: 12.0) - public var infoTextColor: UIColor! = UIColor(red: 247.0/255.0, green: 189.0/255.0, blue: 51.0/255.0, alpha: 1.0) // orange - - /// description text that appears in the bottom right corner of the chart - public var descriptionText = "Description" - - /// flag that indicates if the chart has been fed with data yet - internal var _dataNotSet = true - - /// if true, units are drawn next to the values in the chart - internal var _drawUnitInChart = false - - /// the number of x-values the chart displays - internal var _deltaX = CGFloat(1.0) - - internal var _chartXMin = Double(0.0) - internal var _chartXMax = Double(0.0) - - /// the legend object containing all data associated with the legend - internal var _legend: ChartLegend! - - /// delegate to receive chart events - public weak var delegate: ChartViewDelegate? - - /// text that is displayed when the chart is empty - public var noDataText = "No chart data available." - - /// text that is displayed when the chart is empty that describes why the chart is empty - public var noDataTextDescription: String? - - internal var _legendRenderer: ChartLegendRenderer! - - /// object responsible for rendering the data - public var renderer: ChartDataRendererBase? - - internal var _highlighter: ChartHighlighter? - - /// object that manages the bounds and drawing constraints of the chart - internal var _viewPortHandler: ChartViewPortHandler! - - /// object responsible for animations - internal var _animator: ChartAnimator! - - /// flag that indicates if offsets calculation has already been done or not - private var _offsetsCalculated = false - - /// array of Highlight objects that reference the highlighted slices in the chart - internal var _indicesToHightlight = [ChartHighlight]() - - /// if set to true, the marker is drawn when a value is clicked - public var drawMarkers = true - - /// the view that represents the marker - public var marker: ChartMarker? - - private var _interceptTouchEvents = false - - /// An extra offset to be appended to the viewport's top - public var extraTopOffset: CGFloat = 0.0 - - /// An extra offset to be appended to the viewport's right - public var extraRightOffset: CGFloat = 0.0 - - /// An extra offset to be appended to the viewport's bottom - public var extraBottomOffset: CGFloat = 0.0 - - /// An extra offset to be appended to the viewport's left - public var extraLeftOffset: CGFloat = 0.0 - - public func setExtraOffsets(left left: CGFloat, top: CGFloat, right: CGFloat, bottom: CGFloat) - { - extraLeftOffset = left - extraTopOffset = top - extraRightOffset = right - extraBottomOffset = bottom - } - - // MARK: - Initializers - - public override init(frame: CGRect) - { - super.init(frame: frame) - self.backgroundColor = UIColor.clearColor() - initialize() - } - - public required init?(coder aDecoder: NSCoder) - { - super.init(coder: aDecoder) - initialize() - } - - deinit - { - self.removeObserver(self, forKeyPath: "bounds") - self.removeObserver(self, forKeyPath: "frame") - } - - internal func initialize() - { - _animator = ChartAnimator() - _animator.delegate = self - - _viewPortHandler = ChartViewPortHandler() - _viewPortHandler.setChartDimens(width: bounds.size.width, height: bounds.size.height) - - _legend = ChartLegend() - _legendRenderer = ChartLegendRenderer(viewPortHandler: _viewPortHandler, legend: _legend) - - _defaultValueFormatter.minimumIntegerDigits = 1 - _defaultValueFormatter.maximumFractionDigits = 1 - _defaultValueFormatter.minimumFractionDigits = 1 - _defaultValueFormatter.usesGroupingSeparator = true - - _valueFormatter = _defaultValueFormatter.copy() as! NSNumberFormatter - - self.addObserver(self, forKeyPath: "bounds", options: .New, context: nil) - self.addObserver(self, forKeyPath: "frame", options: .New, context: nil) - } - - // MARK: - ChartViewBase - - /// The data for the chart - public var data: ChartData? - { - get - { - return _data - } - set - { - if newValue == nil - { - print("Charts: data argument is nil on setData()", terminator: "\n") - return - } - - _dataNotSet = false - _offsetsCalculated = false - _data = newValue - - // calculate how many digits are needed - calculateFormatter(min: _data.getYMin(), max: _data.getYMax()) - - notifyDataSetChanged() - } - } - - /// Clears the chart from all data (sets it to null) and refreshes it (by calling setNeedsDisplay()). - public func clear() - { - _data = nil - _dataNotSet = true - _indicesToHightlight.removeAll() - setNeedsDisplay() - } - - /// Removes all DataSets (and thereby Entries) from the chart. Does not remove the x-values. Also refreshes the chart by calling setNeedsDisplay(). - public func clearValues() - { - if (_data !== nil) - { - _data.clearValues() - } - setNeedsDisplay() - } - - /// - returns: true if the chart is empty (meaning it's data object is either null or contains no entries). - public func isEmpty() -> Bool - { - if (_data == nil) - { - return true - } - else - { - - if (_data.yValCount <= 0) - { - return true - } - else - { - return false - } - } - } - - /// Lets the chart know its underlying data has changed and should perform all necessary recalculations. - /// It is crucial that this method is called everytime data is changed dynamically. Not calling this method can lead to crashes or unexpected behaviour. - public func notifyDataSetChanged() - { - fatalError("notifyDataSetChanged() cannot be called on ChartViewBase") - } - - /// calculates the offsets of the chart to the border depending on the position of an eventual legend or depending on the length of the y-axis and x-axis labels and their position - internal func calculateOffsets() - { - fatalError("calculateOffsets() cannot be called on ChartViewBase") - } - - /// calcualtes the y-min and y-max value and the y-delta and x-delta value - internal func calcMinMax() - { - fatalError("calcMinMax() cannot be called on ChartViewBase") - } - - /// calculates the required number of digits for the values that might be drawn in the chart (if enabled), and creates the default value formatter - internal func calculateFormatter(min min: Double, max: Double) - { - // check if a custom formatter is set or not - var reference = Double(0.0) - - if (_data == nil || _data.xValCount < 2) - { - let absMin = fabs(min) - let absMax = fabs(max) - reference = absMin > absMax ? absMin : absMax - } - else - { - reference = fabs(max - min) - } - - let digits = ChartUtils.decimals(reference) - - _defaultValueFormatter.maximumFractionDigits = digits - _defaultValueFormatter.minimumFractionDigits = digits - } - - public override func drawRect(rect: CGRect) - { - let context = UIGraphicsGetCurrentContext() - let frame = self.bounds - - if (_dataNotSet || _data === nil || _data.yValCount == 0) - { // check if there is data - - CGContextSaveGState(context) - - // if no data, inform the user - - ChartUtils.drawText(context: context, text: noDataText, point: CGPoint(x: frame.width / 2.0, y: frame.height / 2.0), align: .Center, attributes: [NSFontAttributeName: infoFont, NSForegroundColorAttributeName: infoTextColor]) - - if (noDataTextDescription != nil && (noDataTextDescription!).characters.count > 0) - { - let textOffset = -infoFont.lineHeight / 2.0 - - ChartUtils.drawText(context: context, text: noDataTextDescription!, point: CGPoint(x: frame.width / 2.0, y: frame.height / 2.0 + textOffset), align: .Center, attributes: [NSFontAttributeName: infoFont, NSForegroundColorAttributeName: infoTextColor]) - } - - return - } - - if (!_offsetsCalculated) - { - calculateOffsets() - _offsetsCalculated = true - } - } - - /// draws the description text in the bottom right corner of the chart - internal func drawDescription(context context: CGContext?) - { - if (descriptionText.lengthOfBytesUsingEncoding(NSUTF16StringEncoding) == 0) - { - return - } - - let frame = self.bounds - - var attrs = [String : AnyObject]() - - var font = descriptionFont - - if (font == nil) - { - #if os(tvOS) - // 23 is the smallest recommened font size on the TV - font = UIFont.systemFontOfSize(23, weight: UIFontWeightMedium) - #else - font = UIFont.systemFontOfSize(UIFont.systemFontSize()) - #endif - } - - attrs[NSFontAttributeName] = font - attrs[NSForegroundColorAttributeName] = descriptionTextColor - - ChartUtils.drawText(context: context, text: descriptionText, point: CGPoint(x: frame.width - _viewPortHandler.offsetRight - 10.0, y: frame.height - _viewPortHandler.offsetBottom - 10.0 - font!.lineHeight), align: .Right, attributes: attrs) - } - - // MARK: - Highlighting - - /// - returns: the array of currently highlighted values. This might an empty if nothing is highlighted. - public var highlighted: [ChartHighlight] - { - return _indicesToHightlight - } - - /// Checks if the highlight array is null, has a length of zero or if the first object is null. - /// - returns: true if there are values to highlight, false if there are no values to highlight. - public func valuesToHighlight() -> Bool - { - return _indicesToHightlight.count > 0 - } - - /// Highlights the values at the given indices in the given DataSets. Provide - /// null or an empty array to undo all highlighting. - /// This should be used to programmatically highlight values. - /// This DOES NOT generate a callback to the delegate. - public func highlightValues(highs: [ChartHighlight]?) - { - // set the indices to highlight - _indicesToHightlight = highs ?? [ChartHighlight]() - - if (_indicesToHightlight.isEmpty) - { - self.lastHighlighted = nil - } - - // redraw the chart - setNeedsDisplay() - } - - /// Highlights the value at the given x-index in the given DataSet. - /// Provide -1 as the x-index to undo all highlighting. - public func highlightValue(xIndex xIndex: Int, dataSetIndex: Int, callDelegate: Bool) - { - if (xIndex < 0 || dataSetIndex < 0 || xIndex >= _data.xValCount || dataSetIndex >= _data.dataSetCount) - { - highlightValue(highlight: nil, callDelegate: callDelegate) - } - else - { - highlightValue(highlight: ChartHighlight(xIndex: xIndex, dataSetIndex: dataSetIndex), callDelegate: callDelegate) - } - } - - /// Highlights the value selected by touch gesture. - public func highlightValue(highlight highlight: ChartHighlight?, callDelegate: Bool) - { - var entry: ChartDataEntry? - var h = highlight - - if (h == nil) - { - _indicesToHightlight.removeAll(keepCapacity: false) - } - else - { - // set the indices to highlight - entry = _data.getEntryForHighlight(h!) - if (entry === nil || entry!.xIndex != h?.xIndex) - { - h = nil - entry = nil - _indicesToHightlight.removeAll(keepCapacity: false) - } - else - { - _indicesToHightlight = [h!] - } - } - - // redraw the chart - setNeedsDisplay() - - if (callDelegate && delegate != nil) - { - if (h == nil) - { - delegate!.chartValueNothingSelected?(self) - } - else - { - // notify the listener - delegate!.chartValueSelected?(self, entry: entry!, dataSetIndex: h!.dataSetIndex, highlight: h!) - } - } - } - - /// The last value that was highlighted via touch. - public var lastHighlighted: ChartHighlight? - - // MARK: - Markers - - /// draws all MarkerViews on the highlighted positions - internal func drawMarkers(context context: CGContext?) - { - // if there is no marker view or drawing marker is disabled - if (marker === nil || !drawMarkers || !valuesToHighlight()) - { - return - } - - for (var i = 0, count = _indicesToHightlight.count; i < count; i++) - { - let highlight = _indicesToHightlight[i] - let xIndex = highlight.xIndex - - if (xIndex <= Int(_deltaX) && xIndex <= Int(_deltaX * _animator.phaseX)) - { - let e = _data.getEntryForHighlight(highlight) - if (e === nil || e!.xIndex != highlight.xIndex) - { - continue - } - - let pos = getMarkerPosition(entry: e!, highlight: highlight) - - // check bounds - if (!_viewPortHandler.isInBounds(x: pos.x, y: pos.y)) - { - continue - } - - // callbacks to update the content - marker!.refreshContent(entry: e!, highlight: highlight) - - let markerSize = marker!.size - if (pos.y - markerSize.height <= 0.0) - { - let y = markerSize.height - pos.y - marker!.draw(context: context, point: CGPoint(x: pos.x, y: pos.y + y)) - } - else - { - marker!.draw(context: context, point: pos) - } - } - } - } - - /// - returns: the actual position in pixels of the MarkerView for the given Entry in the given DataSet. - public func getMarkerPosition(entry entry: ChartDataEntry, highlight: ChartHighlight) -> CGPoint - { - fatalError("getMarkerPosition() cannot be called on ChartViewBase") - } - - // MARK: - Animation - - /// - returns: the animator responsible for animating chart values. - public var animator: ChartAnimator! - { - return _animator - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingX: an easing function for the animation on the x axis - /// - parameter easingY: an easing function for the animation on the y axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easingX: ChartEasingFunctionBlock?, easingY: ChartEasingFunctionBlock?) - { - _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingX: easingX, easingY: easingY) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingOptionX: the easing function for the animation on the x axis - /// - parameter easingOptionY: the easing function for the animation on the y axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easingOptionX: ChartEasingOption, easingOptionY: ChartEasingOption) - { - _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingOptionX: easingOptionX, easingOptionY: easingOptionY) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easing: an easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easing: ChartEasingFunctionBlock?) - { - _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easing: easing) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingOption: the easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval, easingOption: ChartEasingOption) - { - _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration, easingOption: easingOption) - } - - /// Animates the drawing / rendering of the chart on both x- and y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter yAxisDuration: duration for animating the y axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, yAxisDuration: NSTimeInterval) - { - _animator.animate(xAxisDuration: xAxisDuration, yAxisDuration: yAxisDuration) - } - - /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter easing: an easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, easing: ChartEasingFunctionBlock?) - { - _animator.animate(xAxisDuration: xAxisDuration, easing: easing) - } - - /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - /// - parameter easingOption: the easing function for the animation - public func animate(xAxisDuration xAxisDuration: NSTimeInterval, easingOption: ChartEasingOption) - { - _animator.animate(xAxisDuration: xAxisDuration, easingOption: easingOption) - } - - /// Animates the drawing / rendering of the chart the x-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter xAxisDuration: duration for animating the x axis - public func animate(xAxisDuration xAxisDuration: NSTimeInterval) - { - _animator.animate(xAxisDuration: xAxisDuration) - } - - /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easing: an easing function for the animation - public func animate(yAxisDuration yAxisDuration: NSTimeInterval, easing: ChartEasingFunctionBlock?) - { - _animator.animate(yAxisDuration: yAxisDuration, easing: easing) - } - - /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter yAxisDuration: duration for animating the y axis - /// - parameter easingOption: the easing function for the animation - public func animate(yAxisDuration yAxisDuration: NSTimeInterval, easingOption: ChartEasingOption) - { - _animator.animate(yAxisDuration: yAxisDuration, easingOption: easingOption) - } - - /// Animates the drawing / rendering of the chart the y-axis with the specified animation time. - /// If `animate(...)` is called, no further calling of `invalidate()` is necessary to refresh the chart. - /// - parameter yAxisDuration: duration for animating the y axis - public func animate(yAxisDuration yAxisDuration: NSTimeInterval) - { - _animator.animate(yAxisDuration: yAxisDuration) - } - - // MARK: - Accessors - - /// - returns: the current y-max value across all DataSets - public var chartYMax: Double - { - return _data.yMax - } - - /// - returns: the current y-min value across all DataSets - public var chartYMin: Double - { - return _data.yMin - } - - public var chartXMax: Double - { - return _chartXMax - } - - public var chartXMin: Double - { - return _chartXMin - } - - /// - returns: the total number of (y) values the chart holds (across all DataSets) - public var getValueCount: Int - { - return _data.yValCount - } - - /// *Note: (Equivalent of getCenter() in MPAndroidChart, as center is already a standard in iOS that returns the center point relative to superview, and MPAndroidChart returns relative to self)* - /// - returns: the center point of the chart (the whole View) in pixels. - public var midPoint: CGPoint - { - let bounds = self.bounds - return CGPoint(x: bounds.origin.x + bounds.size.width / 2.0, y: bounds.origin.y + bounds.size.height / 2.0) - } - - /// - returns: the center of the chart taking offsets under consideration. (returns the center of the content rectangle) - public var centerOffsets: CGPoint - { - return _viewPortHandler.contentCenter - } - - /// - returns: the Legend object of the chart. This method can be used to get an instance of the legend in order to customize the automatically generated Legend. - public var legend: ChartLegend - { - return _legend - } - - /// - returns: the renderer object responsible for rendering / drawing the Legend. - public var legendRenderer: ChartLegendRenderer! - { - return _legendRenderer - } - - /// - returns: the rectangle that defines the borders of the chart-value surface (into which the actual values are drawn). - public var contentRect: CGRect - { - return _viewPortHandler.contentRect - } - - /// Sets the formatter to be used for drawing the values inside the chart. - /// If no formatter is set, the chart will automatically determine a reasonable - /// formatting (concerning decimals) for all the values that are drawn inside - /// the chart. Set this to nil to re-enable auto formatting. - public var valueFormatter: NSNumberFormatter! - { - get - { - return _valueFormatter - } - set - { - if (newValue === nil) - { - _valueFormatter = _defaultValueFormatter.copy() as! NSNumberFormatter - } - else - { - _valueFormatter = newValue - } - } - } - - /// - returns: the x-value at the given index - public func getXValue(index: Int) -> String! - { - if (_data == nil || _data.xValCount <= index) - { - return nil - } - else - { - return _data.xVals[index] - } - } - - /// Get all Entry objects at the given index across all DataSets. - public func getEntriesAtIndex(xIndex: Int) -> [ChartDataEntry] - { - var vals = [ChartDataEntry]() - - for (var i = 0, count = _data.dataSetCount; i < count; i++) - { - let set = _data.getDataSetByIndex(i) - let e = set.entryForXIndex(xIndex) - if (e !== nil) - { - vals.append(e!) - } - } - - return vals - } - - /// - returns: the percentage the given value has of the total y-value sum - public func percentOfTotal(val: Double) -> Double - { - return val / _data.yValueSum * 100.0 - } - - /// - returns: the ViewPortHandler of the chart that is responsible for the - /// content area of the chart and its offsets and dimensions. - public var viewPortHandler: ChartViewPortHandler! - { - return _viewPortHandler - } - - /// - returns: the bitmap that represents the chart. - public func getChartImage(transparent transparent: Bool) -> UIImage - { - UIGraphicsBeginImageContextWithOptions(bounds.size, opaque || !transparent, UIScreen.mainScreen().scale) - - let context = UIGraphicsGetCurrentContext() - let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: bounds.size) - - if (opaque || !transparent) - { - // Background color may be partially transparent, we must fill with white if we want to output an opaque image - CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor) - CGContextFillRect(context, rect) - - if (self.backgroundColor !== nil) - { - CGContextSetFillColorWithColor(context, self.backgroundColor?.CGColor) - CGContextFillRect(context, rect) - } - } - - if let context = context - { - layer.renderInContext(context) - } - - let image = UIGraphicsGetImageFromCurrentImageContext() - - UIGraphicsEndImageContext() - - return image - } - - public enum ImageFormat - { - case JPEG - case PNG - } - - /// Saves the current chart state with the given name to the given path on - /// the sdcard leaving the path empty "" will put the saved file directly on - /// the SD card chart is saved as a PNG image, example: - /// saveToPath("myfilename", "foldername1/foldername2") - /// - /// - parameter filePath: path to the image to save - /// - parameter format: the format to save - /// - parameter compressionQuality: compression quality for lossless formats (JPEG) - /// - /// - returns: true if the image was saved successfully - public func saveToPath(path: String, format: ImageFormat, compressionQuality: Double) -> Bool - { - let image = getChartImage(transparent: format != .JPEG) - - var imageData: NSData! - switch (format) - { - case .PNG: - imageData = UIImagePNGRepresentation(image) - break - - case .JPEG: - imageData = UIImageJPEGRepresentation(image, CGFloat(compressionQuality)) - break - } - - return imageData.writeToFile(path, atomically: true) - } - - #if !os(tvOS) - /// Saves the current state of the chart to the camera roll - public func saveToCameraRoll() - { - UIImageWriteToSavedPhotosAlbum(getChartImage(transparent: false), nil, nil, nil) - } - #endif - - internal typealias VoidClosureType = () -> () - internal var _sizeChangeEventActions = [VoidClosureType]() - - public override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) - { - if (keyPath == "bounds" || keyPath == "frame") - { - let bounds = self.bounds - - if (_viewPortHandler !== nil && - (bounds.size.width != _viewPortHandler.chartWidth || - bounds.size.height != _viewPortHandler.chartHeight)) - { - _viewPortHandler.setChartDimens(width: bounds.size.width, height: bounds.size.height) - - // Finish any pending viewport changes - while (!_sizeChangeEventActions.isEmpty) - { - _sizeChangeEventActions.removeAtIndex(0)() - } - - notifyDataSetChanged() - } - } - } - - public func clearPendingViewPortChanges() - { - _sizeChangeEventActions.removeAll(keepCapacity: false) - } - - /// if true, value highlighting is enabled - public var highlightEnabled: Bool - { - get - { - return _data === nil ? true : _data.highlightEnabled - } - set - { - if (_data !== nil) - { - _data.highlightEnabled = newValue - } - } - } - - /// if true, value highlightning is enabled - public var isHighlightEnabled: Bool { return highlightEnabled } - - /// **default**: true - /// - returns: true if chart continues to scroll after touch up, false if not. - public var isDragDecelerationEnabled: Bool - { - return dragDecelerationEnabled - } - - /// Deceleration friction coefficient in [0 ; 1] interval, higher values indicate that speed will decrease slowly, for example if it set to 0, it will stop immediately. - /// 1 is an invalid value, and will be converted to 0.999 automatically. - /// - /// **default**: true - public var dragDecelerationFrictionCoef: CGFloat - { - get - { - return _dragDecelerationFrictionCoef - } - set - { - var val = newValue - if (val < 0.0) - { - val = 0.0 - } - if (val >= 1.0) - { - val = 0.999 - } - - _dragDecelerationFrictionCoef = val - } - } - - // MARK: - ChartAnimatorDelegate - - public func chartAnimatorUpdated(chartAnimator: ChartAnimator) - { - setNeedsDisplay() - } - - public func chartAnimatorStopped(chartAnimator: ChartAnimator) - { - - } - - // MARK: - Touches - - public override func touchesBegan(touches: Set, withEvent event: UIEvent?) - { - if (!_interceptTouchEvents) - { - super.touchesBegan(touches, withEvent: event) - } - } - - public override func touchesMoved(touches: Set, withEvent event: UIEvent?) - { - if (!_interceptTouchEvents) - { - super.touchesMoved(touches, withEvent: event) - } - } - - public override func touchesEnded(touches: Set, withEvent event: UIEvent?) - { - if (!_interceptTouchEvents) - { - super.touchesEnded(touches, withEvent: event) - } - } - - public override func touchesCancelled(touches: Set?, withEvent event: UIEvent?) - { - if (!_interceptTouchEvents) - { - super.touchesCancelled(touches, withEvent: event) - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/CombinedChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/CombinedChartView.swift deleted file mode 100644 index adb8819e..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/CombinedChartView.swift +++ /dev/null @@ -1,214 +0,0 @@ -// -// CombinedChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// This chart class allows the combination of lines, bars, scatter and candle data all displayed in one chart area. -public class CombinedChartView: BarLineChartViewBase -{ - /// the fill-formatter used for determining the position of the fill-line - internal var _fillFormatter: ChartFillFormatter! - - /// enum that allows to specify the order in which the different data objects for the combined-chart are drawn - @objc - public enum CombinedChartDrawOrder: Int - { - case Bar - case Bubble - case Line - case Candle - case Scatter - } - - public override func initialize() - { - super.initialize() - - _highlighter = CombinedHighlighter(chart: self) - - /// WORKAROUND: Swift 2.0 compiler malfunctions when optimizations are enabled, and assigning directly to _fillFormatter causes a crash with a EXC_BAD_ACCESS. See https://github.com/danielgindi/ios-charts/issues/406 - let workaroundFormatter = BarLineChartFillFormatter(chart: self) - _fillFormatter = workaroundFormatter - - renderer = CombinedChartRenderer(chart: self, animator: _animator, viewPortHandler: _viewPortHandler) - } - - override func calcMinMax() - { - super.calcMinMax() - - if (self.barData !== nil || self.candleData !== nil || self.bubbleData !== nil) - { - _chartXMin = -0.5 - _chartXMax = Double(_data.xVals.count) - 0.5 - - if (self.bubbleData !== nil) - { - for set in self.bubbleData.dataSets as! [BubbleChartDataSet] - { - let xmin = set.xMin - let xmax = set.xMax - - if (xmin < chartXMin) - { - _chartXMin = xmin - } - - if (xmax > chartXMax) - { - _chartXMax = xmax - } - } - } - - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - } - } - - public override var data: ChartData? - { - get - { - return super.data - } - set - { - super.data = newValue - (renderer as! CombinedChartRenderer?)!.createRenderers() - } - } - - public var fillFormatter: ChartFillFormatter - { - get - { - return _fillFormatter - } - set - { - _fillFormatter = newValue - if (_fillFormatter === nil) - { - _fillFormatter = BarLineChartFillFormatter(chart: self) - } - } - } - - public var lineData: LineChartData! - { - get - { - if (_data === nil) - { - return nil - } - return (_data as! CombinedChartData!).lineData - } - } - - public var barData: BarChartData! - { - get - { - if (_data === nil) - { - return nil - } - return (_data as! CombinedChartData!).barData - } - } - - public var scatterData: ScatterChartData! - { - get - { - if (_data === nil) - { - return nil - } - return (_data as! CombinedChartData!).scatterData - } - } - - public var candleData: CandleChartData! - { - get - { - if (_data === nil) - { - return nil - } - return (_data as! CombinedChartData!).candleData - } - } - - public var bubbleData: BubbleChartData! - { - get - { - if (_data === nil) - { - return nil - } - return (_data as! CombinedChartData!).bubbleData - } - } - - // MARK: Accessors - - /// flag that enables or disables the highlighting arrow - public var drawHighlightArrowEnabled: Bool - { - get { return (renderer as! CombinedChartRenderer!).drawHighlightArrowEnabled; } - set { (renderer as! CombinedChartRenderer!).drawHighlightArrowEnabled = newValue; } - } - - /// if set to true, all values are drawn above their bars, instead of below their top - public var drawValueAboveBarEnabled: Bool - { - get { return (renderer as! CombinedChartRenderer!).drawValueAboveBarEnabled; } - set { (renderer as! CombinedChartRenderer!).drawValueAboveBarEnabled = newValue; } - } - - /// if set to true, a grey area is darawn behind each bar that indicates the maximum value - public var drawBarShadowEnabled: Bool - { - get { return (renderer as! CombinedChartRenderer!).drawBarShadowEnabled; } - set { (renderer as! CombinedChartRenderer!).drawBarShadowEnabled = newValue; } - } - - /// - returns: true if drawing the highlighting arrow is enabled, false if not - public var isDrawHighlightArrowEnabled: Bool { return (renderer as! CombinedChartRenderer!).drawHighlightArrowEnabled; } - - /// - returns: true if drawing values above bars is enabled, false if not - public var isDrawValueAboveBarEnabled: Bool { return (renderer as! CombinedChartRenderer!).drawValueAboveBarEnabled; } - - /// - returns: true if drawing shadows (maxvalue) for each bar is enabled, false if not - public var isDrawBarShadowEnabled: Bool { return (renderer as! CombinedChartRenderer!).drawBarShadowEnabled; } - - /// the order in which the provided data objects should be drawn. - /// The earlier you place them in the provided array, the further they will be in the background. - /// e.g. if you provide [DrawOrder.Bar, DrawOrder.Line], the bars will be drawn behind the lines. - public var drawOrder: [Int] - { - get - { - return (renderer as! CombinedChartRenderer!).drawOrder.map { $0.rawValue } - } - set - { - (renderer as! CombinedChartRenderer!).drawOrder = newValue.map { CombinedChartDrawOrder(rawValue: $0)! } - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/HorizontalBarChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/HorizontalBarChartView.swift deleted file mode 100644 index 1146ca2b..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/HorizontalBarChartView.swift +++ /dev/null @@ -1,208 +0,0 @@ -// -// HorizontalBarChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -/// BarChart with horizontal bar orientation. In this implementation, x- and y-axis are switched. -public class HorizontalBarChartView: BarChartView -{ - internal override func initialize() - { - super.initialize() - - _leftAxisTransformer = ChartTransformerHorizontalBarChart(viewPortHandler: _viewPortHandler) - _rightAxisTransformer = ChartTransformerHorizontalBarChart(viewPortHandler: _viewPortHandler) - - renderer = HorizontalBarChartRenderer(delegate: self, animator: _animator, viewPortHandler: _viewPortHandler) - _leftYAxisRenderer = ChartYAxisRendererHorizontalBarChart(viewPortHandler: _viewPortHandler, yAxis: _leftAxis, transformer: _leftAxisTransformer) - _rightYAxisRenderer = ChartYAxisRendererHorizontalBarChart(viewPortHandler: _viewPortHandler, yAxis: _rightAxis, transformer: _rightAxisTransformer) - _xAxisRenderer = ChartXAxisRendererHorizontalBarChart(viewPortHandler: _viewPortHandler, xAxis: _xAxis, transformer: _leftAxisTransformer, chart: self) - - _highlighter = HorizontalBarChartHighlighter(chart: self) - } - - internal override func calculateOffsets() - { - var offsetLeft: CGFloat = 0.0, - offsetRight: CGFloat = 0.0, - offsetTop: CGFloat = 0.0, - offsetBottom: CGFloat = 0.0 - - // setup offsets for legend - if (_legend !== nil && _legend.isEnabled) - { - if (_legend.position == .RightOfChart - || _legend.position == .RightOfChartCenter) - { - offsetRight += min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + _legend.xOffset * 2.0 - } - else if (_legend.position == .LeftOfChart - || _legend.position == .LeftOfChartCenter) - { - offsetLeft += min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) + _legend.xOffset * 2.0 - } - else if (_legend.position == .BelowChartLeft - || _legend.position == .BelowChartRight - || _legend.position == .BelowChartCenter) - { - // It's possible that we do not need this offset anymore as it - // is available through the extraOffsets, but changing it can mean - // changing default visibility for existing apps. - let yOffset = _legend.textHeightMax - - offsetBottom += min(_legend.neededHeight + yOffset, _viewPortHandler.chartHeight * _legend.maxSizePercent) - } - else if (_legend.position == .AboveChartLeft - || _legend.position == .AboveChartRight - || _legend.position == .AboveChartCenter) - { - // It's possible that we do not need this offset anymore as it - // is available through the extraOffsets, but changing it can mean - // changing default visibility for existing apps. - let yOffset = _legend.textHeightMax - - offsetTop += min(_legend.neededHeight + yOffset, _viewPortHandler.chartHeight * _legend.maxSizePercent) - } - } - - // offsets for y-labels - if (_leftAxis.needsOffset) - { - offsetTop += _leftAxis.getRequiredHeightSpace() - } - - if (_rightAxis.needsOffset) - { - offsetBottom += _rightAxis.getRequiredHeightSpace() - } - - let xlabelwidth = _xAxis.labelWidth - - if (_xAxis.isEnabled) - { - // offsets for x-labels - if (_xAxis.labelPosition == .Bottom) - { - offsetLeft += xlabelwidth - } - else if (_xAxis.labelPosition == .Top) - { - offsetRight += xlabelwidth - } - else if (_xAxis.labelPosition == .BothSided) - { - offsetLeft += xlabelwidth - offsetRight += xlabelwidth - } - } - - offsetTop += self.extraTopOffset - offsetRight += self.extraRightOffset - offsetBottom += self.extraBottomOffset - offsetLeft += self.extraLeftOffset - - _viewPortHandler.restrainViewPort( - offsetLeft: max(self.minOffset, offsetLeft), - offsetTop: max(self.minOffset, offsetTop), - offsetRight: max(self.minOffset, offsetRight), - offsetBottom: max(self.minOffset, offsetBottom)) - - prepareOffsetMatrix() - prepareValuePxMatrix() - } - - internal override func prepareValuePxMatrix() - { - _rightAxisTransformer.prepareMatrixValuePx(chartXMin: _rightAxis.axisMinimum, deltaX: CGFloat(_rightAxis.axisRange), deltaY: _deltaX, chartYMin: _chartXMin) - _leftAxisTransformer.prepareMatrixValuePx(chartXMin: _leftAxis.axisMinimum, deltaX: CGFloat(_leftAxis.axisRange), deltaY: _deltaX, chartYMin: _chartXMin) - } - - internal override func calcModulus() - { - _xAxis.axisLabelModulus = Int(ceil((CGFloat(_data.xValCount) * _xAxis.labelHeight) / (_viewPortHandler.contentHeight * viewPortHandler.touchMatrix.d))) - - if (_xAxis.axisLabelModulus < 1) - { - _xAxis.axisLabelModulus = 1 - } - } - - public override func getBarBounds(e: BarChartDataEntry) -> CGRect! - { - let set = _data.getDataSetForEntry(e) as! BarChartDataSet! - - if (set === nil) - { - return nil - } - - let barspace = set.barSpace - let y = CGFloat(e.value) - let x = CGFloat(e.xIndex) - - let spaceHalf = barspace / 2.0 - let top = x - 0.5 + spaceHalf - let bottom = x + 0.5 - spaceHalf - let left = y >= 0.0 ? y : 0.0 - let right = y <= 0.0 ? y : 0.0 - - var bounds = CGRect(x: left, y: top, width: right - left, height: bottom - top) - - getTransformer(set.axisDependency).rectValueToPixel(&bounds) - - return bounds - } - - public override func getPosition(e: ChartDataEntry, axis: ChartYAxis.AxisDependency) -> CGPoint - { - var vals = CGPoint(x: CGFloat(e.value), y: CGFloat(e.xIndex)) - - getTransformer(axis).pointValueToPixel(&vals) - - return vals - } - - public override func getHighlightByTouchPoint(pt: CGPoint) -> ChartHighlight? - { - if (_dataNotSet || _data === nil) - { - print("Can't select by touch. No data set.", terminator: "\n") - return nil - } - - return _highlighter?.getHighlight(x: Double(pt.y), y: Double(pt.x)) - } - - public override var lowestVisibleXIndex: Int - { - let step = CGFloat(_data.dataSetCount) - let div = (step <= 1.0) ? 1.0 : step + (_data as! BarChartData).groupSpace - - var pt = CGPoint(x: _viewPortHandler.contentLeft, y: _viewPortHandler.contentBottom) - getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - - return Int(((pt.y <= 0.0) ? 0.0 : pt.y / div) + 1.0) - } - - public override var highestVisibleXIndex: Int - { - let step = CGFloat(_data.dataSetCount) - let div = (step <= 1.0) ? 1.0 : step + (_data as! BarChartData).groupSpace - - var pt = CGPoint(x: _viewPortHandler.contentLeft, y: _viewPortHandler.contentTop) - getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - - return Int((pt.y >= CGFloat(chartXMax)) ? CGFloat(chartXMax) / div : (pt.y / div)) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/LineChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/LineChartView.swift deleted file mode 100644 index 133b9e92..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/LineChartView.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// LineChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// Chart that draws lines, surfaces, circles, ... -public class LineChartView: BarLineChartViewBase, LineChartRendererDelegate -{ - private var _fillFormatter: ChartFillFormatter! - - internal override func initialize() - { - super.initialize() - - renderer = LineChartRenderer(delegate: self, animator: _animator, viewPortHandler: _viewPortHandler) - - _fillFormatter = BarLineChartFillFormatter(chart: self) - } - - internal override func calcMinMax() - { - super.calcMinMax() - - if (_deltaX == 0.0 && _data.yValCount > 0) - { - _deltaX = 1.0 - } - } - - public var fillFormatter: ChartFillFormatter! - { - get - { - return _fillFormatter - } - set - { - if (newValue === nil) - { - _fillFormatter = BarLineChartFillFormatter(chart: self) - } - else - { - _fillFormatter = newValue - } - } - } - - // MARK: - LineChartRendererDelegate - - public func lineChartRendererData(renderer: LineChartRenderer) -> LineChartData! - { - return _data as! LineChartData! - } - - public func lineChartRenderer(renderer: LineChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return self.getTransformer(which) - } - - public func lineChartRendererFillFormatter(renderer: LineChartRenderer) -> ChartFillFormatter - { - return self.fillFormatter - } - - public func lineChartDefaultRendererValueFormatter(renderer: LineChartRenderer) -> NSNumberFormatter! - { - return self._defaultValueFormatter - } - - public func lineChartRendererChartYMax(renderer: LineChartRenderer) -> Double - { - return self.chartYMax - } - - public func lineChartRendererChartYMin(renderer: LineChartRenderer) -> Double - { - return self.chartYMin - } - - public func lineChartRendererChartXMax(renderer: LineChartRenderer) -> Double - { - return self.chartXMax - } - - public func lineChartRendererChartXMin(renderer: LineChartRenderer) -> Double - { - return self.chartXMin - } - - public func lineChartRendererMaxVisibleValueCount(renderer: LineChartRenderer) -> Int - { - return self.maxVisibleValueCount - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/PieChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/PieChartView.swift deleted file mode 100755 index 3d140508..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/PieChartView.swift +++ /dev/null @@ -1,505 +0,0 @@ -// -// PieChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -/// View that represents a pie chart. Draws cake like slices. -public class PieChartView: PieRadarChartViewBase -{ - /// rect object that represents the bounds of the piechart, needed for drawing the circle - private var _circleBox = CGRect() - - /// array that holds the width of each pie-slice in degrees - private var _drawAngles = [CGFloat]() - - /// array that holds the absolute angle in degrees of each slice - private var _absoluteAngles = [CGFloat]() - - public override init(frame: CGRect) - { - super.init(frame: frame) - } - - public required init?(coder aDecoder: NSCoder) - { - super.init(coder: aDecoder) - } - - internal override func initialize() - { - super.initialize() - - renderer = PieChartRenderer(chart: self, animator: _animator, viewPortHandler: _viewPortHandler) - } - - public override func drawRect(rect: CGRect) - { - super.drawRect(rect) - - if (_dataNotSet) - { - return - } - - let context = UIGraphicsGetCurrentContext() - - renderer!.drawData(context: context) - - if (valuesToHighlight()) - { - renderer!.drawHighlighted(context: context, indices: _indicesToHightlight) - } - - renderer!.drawExtras(context: context) - - renderer!.drawValues(context: context) - - _legendRenderer.renderLegend(context: context) - - drawDescription(context: context) - - drawMarkers(context: context) - } - - internal override func calculateOffsets() - { - super.calculateOffsets() - - // prevent nullpointer when no data set - if (_dataNotSet) - { - return - } - - let radius = diameter / 2.0 - - let c = centerOffsets - - let dataSets = data?.dataSets as? [PieChartDataSet] - - let maxShift = dataSets?.reduce(0.0, combine: { shift, dataSet in - return dataSet.selectionShift > shift ? dataSet.selectionShift : shift - }) ?? 0.0 - - // create the circle box that will contain the pie-chart (the bounds of the pie-chart) - _circleBox.origin.x = (c.x - radius) + (maxShift / 2.0) - _circleBox.origin.y = (c.y - radius) + (maxShift / 2.0) - _circleBox.size.width = diameter - maxShift - _circleBox.size.height = diameter - maxShift - } - - internal override func calcMinMax() - { - super.calcMinMax() - - calcAngles() - } - - public override func getMarkerPosition(entry e: ChartDataEntry, highlight: ChartHighlight) -> CGPoint - { - let center = self.centerCircleBox - var r = self.radius - - var off = r / 10.0 * 3.6 - - if self.isDrawHoleEnabled - { - off = (r - (r * self.holeRadiusPercent)) / 2.0 - } - - r -= off // offset to keep things inside the chart - - let rotationAngle = self.rotationAngle - - let i = e.xIndex - - // offset needed to center the drawn text in the slice - let offset = drawAngles[i] / 2.0 - - // calculate the text position - let x: CGFloat = (r * cos(((rotationAngle + absoluteAngles[i] - offset) * _animator.phaseY) * ChartUtils.Math.FDEG2RAD) + center.x) - let y: CGFloat = (r * sin(((rotationAngle + absoluteAngles[i] - offset) * _animator.phaseY) * ChartUtils.Math.FDEG2RAD) + center.y) - - return CGPoint(x: x, y: y) - } - - /// calculates the needed angles for the chart slices - private func calcAngles() - { - _drawAngles = [CGFloat]() - _absoluteAngles = [CGFloat]() - - _drawAngles.reserveCapacity(_data.yValCount) - _absoluteAngles.reserveCapacity(_data.yValCount) - - var dataSets = _data.dataSets - - var cnt = 0 - - for (var i = 0; i < _data.dataSetCount; i++) - { - let set = dataSets[i] - var entries = set.yVals - - for (var j = 0; j < entries.count; j++) - { - _drawAngles.append(calcAngle(abs(entries[j].value))) - - if (cnt == 0) - { - _absoluteAngles.append(_drawAngles[cnt]) - } - else - { - _absoluteAngles.append(_absoluteAngles[cnt - 1] + _drawAngles[cnt]) - } - - cnt++ - } - } - } - - /// checks if the given index in the given DataSet is set for highlighting or not - public func needsHighlight(xIndex xIndex: Int, dataSetIndex: Int) -> Bool - { - // no highlight - if (!valuesToHighlight() || dataSetIndex < 0) - { - return false - } - - for (var i = 0; i < _indicesToHightlight.count; i++) - { - // check if the xvalue for the given dataset needs highlight - if (_indicesToHightlight[i].xIndex == xIndex - && _indicesToHightlight[i].dataSetIndex == dataSetIndex) - { - return true - } - } - - return false - } - - /// calculates the needed angle for a given value - private func calcAngle(value: Double) -> CGFloat - { - return CGFloat(value) / CGFloat(_data.yValueSum) * 360.0 - } - - public override func indexForAngle(angle: CGFloat) -> Int - { - // take the current angle of the chart into consideration - let a = ChartUtils.normalizedAngleFromAngle(angle - self.rotationAngle) - for (var i = 0; i < _absoluteAngles.count; i++) - { - if (_absoluteAngles[i] > a) - { - return i - } - } - - return -1; // return -1 if no index found - } - - /// - returns: the index of the DataSet this x-index belongs to. - public func dataSetIndexForIndex(xIndex: Int) -> Int - { - var dataSets = _data.dataSets - - for (var i = 0; i < dataSets.count; i++) - { - if (dataSets[i].entryForXIndex(xIndex) !== nil) - { - return i - } - } - - return -1 - } - - /// - returns: an integer array of all the different angles the chart slices - /// have the angles in the returned array determine how much space (of 360°) - /// each slice takes - public var drawAngles: [CGFloat] - { - return _drawAngles - } - - /// - returns: the absolute angles of the different chart slices (where the - /// slices end) - public var absoluteAngles: [CGFloat] - { - return _absoluteAngles - } - - /// Sets the color for the hole that is drawn in the center of the PieChart (if enabled). - /// - /// *Note: Use holeTransparent with holeColor = nil to make the hole transparent.* - public var holeColor: UIColor? - { - get - { - return (renderer as! PieChartRenderer).holeColor! - } - set - { - (renderer as! PieChartRenderer).holeColor = newValue - setNeedsDisplay() - } - } - - /// Set the hole in the center of the PieChart transparent - public var holeTransparent: Bool - { - get - { - return (renderer as! PieChartRenderer).holeTransparent - } - set - { - (renderer as! PieChartRenderer).holeTransparent = newValue - setNeedsDisplay() - } - } - - /// - returns: true if the hole in the center of the PieChart is transparent, false if not. - public var isHoleTransparent: Bool - { - return (renderer as! PieChartRenderer).holeTransparent - } - - /// true if the hole in the center of the pie-chart is set to be visible, false if not - public var drawHoleEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).drawHoleEnabled - } - set - { - (renderer as! PieChartRenderer).drawHoleEnabled = newValue - setNeedsDisplay() - } - } - - /// - returns: true if the hole in the center of the pie-chart is set to be visible, false if not - public var isDrawHoleEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).drawHoleEnabled - } - } - - /// the text that is displayed in the center of the pie-chart. By default, the text is "Total value + sum of all values" - public var centerText: String! - { - get - { - return (renderer as! PieChartRenderer).centerText - } - set - { - (renderer as! PieChartRenderer).centerText = newValue - setNeedsDisplay() - } - } - - /// true if drawing the center text is enabled - public var drawCenterTextEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).drawCenterTextEnabled - } - set - { - (renderer as! PieChartRenderer).drawCenterTextEnabled = newValue - setNeedsDisplay() - } - } - - /// - returns: true if drawing the center text is enabled - public var isDrawCenterTextEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).drawCenterTextEnabled - } - } - - internal override var requiredLegendOffset: CGFloat - { - return _legend.font.pointSize * 2.0 - } - - internal override var requiredBaseOffset: CGFloat - { - return 0.0 - } - - public override var radius: CGFloat - { - return _circleBox.width / 2.0 - } - - /// - returns: the circlebox, the boundingbox of the pie-chart slices - public var circleBox: CGRect - { - return _circleBox - } - - /// - returns: the center of the circlebox - public var centerCircleBox: CGPoint - { - return CGPoint(x: _circleBox.midX, y: _circleBox.midY) - } - - /// Sets the font of the center text of the piechart. - public var centerTextFont: UIFont - { - get - { - return (renderer as! PieChartRenderer).centerTextFont - } - set - { - (renderer as! PieChartRenderer).centerTextFont = newValue - setNeedsDisplay() - } - } - - /// Sets the color of the center text of the piechart. - public var centerTextColor: UIColor - { - get - { - return (renderer as! PieChartRenderer).centerTextColor - } - set - { - (renderer as! PieChartRenderer).centerTextColor = newValue - setNeedsDisplay() - } - } - - /// the radius of the hole in the center of the piechart in percent of the maximum radius (max = the radius of the whole chart) - /// - /// **default**: 0.5 (50%) (half the pie) - public var holeRadiusPercent: CGFloat - { - get - { - return (renderer as! PieChartRenderer).holeRadiusPercent - } - set - { - (renderer as! PieChartRenderer).holeRadiusPercent = newValue - setNeedsDisplay() - } - } - - /// the radius of the transparent circle that is drawn next to the hole in the piechart in percent of the maximum radius (max = the radius of the whole chart) - /// - /// **default**: 0.55 (55%) -> means 5% larger than the center-hole by default - public var transparentCircleRadiusPercent: CGFloat - { - get - { - return (renderer as! PieChartRenderer).transparentCircleRadiusPercent - } - set - { - (renderer as! PieChartRenderer).transparentCircleRadiusPercent = newValue - setNeedsDisplay() - } - } - - /// set this to true to draw the x-value text into the pie slices - public var drawSliceTextEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).drawXLabelsEnabled - } - set - { - (renderer as! PieChartRenderer).drawXLabelsEnabled = newValue - setNeedsDisplay() - } - } - - /// - returns: true if drawing x-values is enabled, false if not - public var isDrawSliceTextEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).drawXLabelsEnabled - } - } - - /// If this is enabled, values inside the PieChart are drawn in percent and not with their original value. Values provided for the ValueFormatter to format are then provided in percent. - public var usePercentValuesEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).usePercentValuesEnabled - } - set - { - (renderer as! PieChartRenderer).usePercentValuesEnabled = newValue - setNeedsDisplay() - } - } - - /// - returns: true if drawing x-values is enabled, false if not - public var isUsePercentValuesEnabled: Bool - { - get - { - return (renderer as! PieChartRenderer).usePercentValuesEnabled - } - } - - - /// the line break mode for center text. - /// note that different line break modes give different performance results - Clipping being the fastest, WordWrapping being the slowst. - public var centerTextLineBreakMode: NSLineBreakMode - { - get - { - return (renderer as! PieChartRenderer).centerTextLineBreakMode - } - set - { - (renderer as! PieChartRenderer).centerTextLineBreakMode = newValue - setNeedsDisplay() - } - } - - /// the rectangular radius of the bounding box for the center text, as a percentage of the pie hole - public var centerTextRadiusPercent: CGFloat - { - get - { - return (renderer as! PieChartRenderer).centerTextRadiusPercent - } - set - { - (renderer as! PieChartRenderer).centerTextRadiusPercent = newValue - setNeedsDisplay() - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/PieRadarChartViewBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/PieRadarChartViewBase.swift deleted file mode 100755 index 9d3ccfe9..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/PieRadarChartViewBase.swift +++ /dev/null @@ -1,853 +0,0 @@ -// -// PieRadarChartViewBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -/// Base class of PieChartView and RadarChartView. -public class PieRadarChartViewBase: ChartViewBase -{ - /// holds the normalized version of the current rotation angle of the chart - private var _rotationAngle = CGFloat(270.0) - - /// holds the raw version of the current rotation angle of the chart - private var _rawRotationAngle = CGFloat(270.0) - - /// flag that indicates if rotation is enabled or not - public var rotationEnabled = true - - /// Sets the minimum offset (padding) around the chart, defaults to 10 - public var minOffset = CGFloat(10.0) - - private var _rotationWithTwoFingers = false - - private var _tapGestureRecognizer: UITapGestureRecognizer! - #if !os(tvOS) - private var _rotationGestureRecognizer: UIRotationGestureRecognizer! - #endif - - public override init(frame: CGRect) - { - super.init(frame: frame) - } - - public required init?(coder aDecoder: NSCoder) - { - super.init(coder: aDecoder) - } - - deinit - { - stopDeceleration() - } - - internal override func initialize() - { - super.initialize() - - _tapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("tapGestureRecognized:")) - - self.addGestureRecognizer(_tapGestureRecognizer) - - #if !os(tvOS) - _rotationGestureRecognizer = UIRotationGestureRecognizer(target: self, action: Selector("rotationGestureRecognized:")) - self.addGestureRecognizer(_rotationGestureRecognizer) - _rotationGestureRecognizer.enabled = rotationWithTwoFingers - #endif - } - - internal override func calcMinMax() - { - _deltaX = CGFloat(_data.xVals.count - 1) - } - - public override func notifyDataSetChanged() - { - if (_dataNotSet) - { - return - } - - calcMinMax() - - if (_legend !== nil) - { - _legendRenderer.computeLegend(_data) - } - - calculateOffsets() - - setNeedsDisplay() - } - - internal override func calculateOffsets() - { - var legendLeft = CGFloat(0.0) - var legendRight = CGFloat(0.0) - var legendBottom = CGFloat(0.0) - var legendTop = CGFloat(0.0) - - if (_legend != nil && _legend.enabled) - { - var fullLegendWidth = min(_legend.neededWidth, _viewPortHandler.chartWidth * _legend.maxSizePercent) - fullLegendWidth += _legend.formSize + _legend.formToTextSpace - - if (_legend.position == .RightOfChartCenter) - { - // this is the space between the legend and the chart - let spacing = CGFloat(13.0) - - legendRight = fullLegendWidth + spacing - } - else if (_legend.position == .RightOfChart) - { - // this is the space between the legend and the chart - let spacing = CGFloat(8.0) - - let legendWidth = fullLegendWidth + spacing - let legendHeight = _legend.neededHeight + _legend.textHeightMax - - let c = self.midPoint - - let bottomRight = CGPoint(x: self.bounds.width - legendWidth + 15.0, y: legendHeight + 15) - let distLegend = distanceToCenter(x: bottomRight.x, y: bottomRight.y) - - let reference = getPosition(center: c, dist: self.radius, - angle: angleForPoint(x: bottomRight.x, y: bottomRight.y)) - - let distReference = distanceToCenter(x: reference.x, y: reference.y) - let minOffset = CGFloat(5.0) - - if (distLegend < distReference) - { - let diff = distReference - distLegend - legendRight = minOffset + diff - } - - if (bottomRight.y >= c.y && self.bounds.height - legendWidth > self.bounds.width) - { - legendRight = legendWidth - } - } - else if (_legend.position == .LeftOfChartCenter) - { - // this is the space between the legend and the chart - let spacing = CGFloat(13.0) - - legendLeft = fullLegendWidth + spacing - } - else if (_legend.position == .LeftOfChart) - { - - // this is the space between the legend and the chart - let spacing = CGFloat(8.0) - - let legendWidth = fullLegendWidth + spacing - let legendHeight = _legend.neededHeight + _legend.textHeightMax - - let c = self.midPoint - - let bottomLeft = CGPoint(x: legendWidth - 15.0, y: legendHeight + 15) - let distLegend = distanceToCenter(x: bottomLeft.x, y: bottomLeft.y) - - let reference = getPosition(center: c, dist: self.radius, - angle: angleForPoint(x: bottomLeft.x, y: bottomLeft.y)) - - let distReference = distanceToCenter(x: reference.x, y: reference.y) - let min = CGFloat(5.0) - - if (distLegend < distReference) - { - let diff = distReference - distLegend - legendLeft = min + diff - } - - if (bottomLeft.y >= c.y && self.bounds.height - legendWidth > self.bounds.width) - { - legendLeft = legendWidth - } - } - else if (_legend.position == .BelowChartLeft - || _legend.position == .BelowChartRight - || _legend.position == .BelowChartCenter) - { - // It's possible that we do not need this offset anymore as it - // is available through the extraOffsets, but changing it can mean - // changing default visibility for existing apps. - let yOffset = self.requiredLegendOffset - - legendBottom = min(_legend.neededHeight + yOffset, _viewPortHandler.chartHeight * _legend.maxSizePercent) - } - else if (_legend.position == .AboveChartLeft - || _legend.position == .AboveChartRight - || _legend.position == .AboveChartCenter) - { - // It's possible that we do not need this offset anymore as it - // is available through the extraOffsets, but changing it can mean - // changing default visibility for existing apps. - let yOffset = self.requiredLegendOffset - - legendTop = min(_legend.neededHeight + yOffset, _viewPortHandler.chartHeight * _legend.maxSizePercent) - } - - legendLeft += self.requiredBaseOffset - legendRight += self.requiredBaseOffset - legendTop += self.requiredBaseOffset - } - - legendTop += self.extraTopOffset - legendRight += self.extraRightOffset - legendBottom += self.extraBottomOffset - legendLeft += self.extraLeftOffset - - var minOffset = self.minOffset - - if (self.isKindOfClass(RadarChartView)) - { - let x = (self as! RadarChartView).xAxis - - if x.isEnabled && x.drawLabelsEnabled - { - minOffset = max(minOffset, x.labelWidth) - } - } - - let offsetLeft = max(minOffset, legendLeft) - let offsetTop = max(minOffset, legendTop) - let offsetRight = max(minOffset, legendRight) - let offsetBottom = max(minOffset, max(self.requiredBaseOffset, legendBottom)) - - _viewPortHandler.restrainViewPort(offsetLeft: offsetLeft, offsetTop: offsetTop, offsetRight: offsetRight, offsetBottom: offsetBottom) - } - - /// - returns: the angle relative to the chart center for the given point on the chart in degrees. - /// The angle is always between 0 and 360°, 0° is NORTH, 90° is EAST, ... - public func angleForPoint(x x: CGFloat, y: CGFloat) -> CGFloat - { - let c = centerOffsets - - let tx = Double(x - c.x) - let ty = Double(y - c.y) - let length = sqrt(tx * tx + ty * ty) - let r = acos(ty / length) - - var angle = r * ChartUtils.Math.RAD2DEG - - if (x > c.x) - { - angle = 360.0 - angle - } - - // add 90° because chart starts EAST - angle = angle + 90.0 - - // neutralize overflow - if (angle > 360.0) - { - angle = angle - 360.0 - } - - return CGFloat(angle) - } - - /// Calculates the position around a center point, depending on the distance - /// from the center, and the angle of the position around the center. - internal func getPosition(center center: CGPoint, dist: CGFloat, angle: CGFloat) -> CGPoint - { - return CGPoint(x: center.x + dist * cos(angle * ChartUtils.Math.FDEG2RAD), - y: center.y + dist * sin(angle * ChartUtils.Math.FDEG2RAD)) - } - - /// - returns: the distance of a certain point on the chart to the center of the chart. - public func distanceToCenter(x x: CGFloat, y: CGFloat) -> CGFloat - { - let c = self.centerOffsets - - var dist = CGFloat(0.0) - - var xDist = CGFloat(0.0) - var yDist = CGFloat(0.0) - - if (x > c.x) - { - xDist = x - c.x - } - else - { - xDist = c.x - x - } - - if (y > c.y) - { - yDist = y - c.y - } - else - { - yDist = c.y - y - } - - // pythagoras - dist = sqrt(pow(xDist, 2.0) + pow(yDist, 2.0)) - - return dist - } - - /// - returns: the xIndex for the given angle around the center of the chart. - /// -1 if not found / outofbounds. - public func indexForAngle(angle: CGFloat) -> Int - { - fatalError("indexForAngle() cannot be called on PieRadarChartViewBase") - } - - /// current rotation angle of the pie chart - /// - /// **default**: 270 --> top (NORTH) - /// - returns: will always return a normalized value, which will be between 0.0 < 360.0 - public var rotationAngle: CGFloat - { - get - { - return _rotationAngle - } - set - { - _rawRotationAngle = newValue - _rotationAngle = ChartUtils.normalizedAngleFromAngle(newValue) - setNeedsDisplay() - } - } - - /// gets the raw version of the current rotation angle of the pie chart the returned value could be any value, negative or positive, outside of the 360 degrees. - /// this is used when working with rotation direction, mainly by gestures and animations. - public var rawRotationAngle: CGFloat - { - return _rawRotationAngle - } - - /// - returns: the diameter of the pie- or radar-chart - public var diameter: CGFloat - { - let content = _viewPortHandler.contentRect - return min(content.width, content.height) - } - - /// - returns: the radius of the chart in pixels. - public var radius: CGFloat - { - fatalError("radius cannot be called on PieRadarChartViewBase") - } - - /// - returns: the required offset for the chart legend. - internal var requiredLegendOffset: CGFloat - { - fatalError("requiredLegendOffset cannot be called on PieRadarChartViewBase") - } - - /// - returns: the base offset needed for the chart without calculating the - /// legend size. - internal var requiredBaseOffset: CGFloat - { - fatalError("requiredBaseOffset cannot be called on PieRadarChartViewBase") - } - - public override var chartXMax: Double - { - return 0.0 - } - - public override var chartXMin: Double - { - getSelectionDetailsAtIndex(1); - return 0.0 - } - - /// The SelectionDetail objects give information about the value at the selected index and the DataSet it belongs to. - /// - returns: an array of SelectionDetail objects for the given x-index. - public func getSelectionDetailsAtIndex(xIndex: Int) -> [ChartSelectionDetail] - { - var vals = [ChartSelectionDetail]() - - for (var i = 0; i < _data.dataSetCount; i++) - { - let dataSet = _data.getDataSetByIndex(i) - if (dataSet === nil || !dataSet.isHighlightEnabled) - { - continue - } - - // extract all y-values from all DataSets at the given x-index - let yVal = dataSet!.yValForXIndex(xIndex) - if (yVal.isNaN) - { - continue - } - - vals.append(ChartSelectionDetail(value: yVal, dataSetIndex: i, dataSet: dataSet!)) - } - - return vals - } - - public var isRotationEnabled: Bool { return rotationEnabled; } - - /// flag that indicates if rotation is done with two fingers or one. - /// when the chart is inside a scrollview, you need a two-finger rotation because a one-finger rotation eats up all touch events. - /// - /// **default**: false - public var rotationWithTwoFingers: Bool - { - get - { - return _rotationWithTwoFingers - } - set - { - _rotationWithTwoFingers = newValue - #if !os(tvOS) - _rotationGestureRecognizer.enabled = _rotationWithTwoFingers - #endif - } - } - - /// flag that indicates if rotation is done with two fingers or one. - /// when the chart is inside a scrollview, you need a two-finger rotation because a one-finger rotation eats up all touch events. - /// - /// **default**: false - public var isRotationWithTwoFingers: Bool - { - return _rotationWithTwoFingers - } - - // MARK: - Animation - - private var _spinAnimator: ChartAnimator! - - /// Applys a spin animation to the Chart. - public func spin(duration duration: NSTimeInterval, fromAngle: CGFloat, toAngle: CGFloat, easing: ChartEasingFunctionBlock?) - { - if (_spinAnimator != nil) - { - _spinAnimator.stop() - } - - _spinAnimator = ChartAnimator() - _spinAnimator.updateBlock = { - self.rotationAngle = (toAngle - fromAngle) * self._spinAnimator.phaseX + fromAngle - } - _spinAnimator.stopBlock = { self._spinAnimator = nil; } - - _spinAnimator.animate(xAxisDuration: duration, easing: easing) - } - - public func spin(duration duration: NSTimeInterval, fromAngle: CGFloat, toAngle: CGFloat, easingOption: ChartEasingOption) - { - spin(duration: duration, fromAngle: fromAngle, toAngle: toAngle, easing: easingFunctionFromOption(easingOption)) - } - - public func spin(duration duration: NSTimeInterval, fromAngle: CGFloat, toAngle: CGFloat) - { - spin(duration: duration, fromAngle: fromAngle, toAngle: toAngle, easing: nil) - } - - public func stopSpinAnimation() - { - if (_spinAnimator != nil) - { - _spinAnimator.stop() - } - } - - // MARK: - Gestures - - private var _touchStartPoint: CGPoint! - private var _isRotating = false - private var _defaultTouchEventsWereEnabled = false - private var _startAngle = CGFloat(0.0) - - private struct AngularVelocitySample - { - var time: NSTimeInterval - var angle: CGFloat - } - - private var _velocitySamples = [AngularVelocitySample]() - - private var _decelerationLastTime: NSTimeInterval = 0.0 - private var _decelerationDisplayLink: CADisplayLink! - private var _decelerationAngularVelocity: CGFloat = 0.0 - - public override func touchesBegan(touches: Set, withEvent event: UIEvent?) - { - // if rotation by touch is enabled - if (rotationEnabled) - { - stopDeceleration() - - if (!rotationWithTwoFingers) - { - let touch = touches.first as UITouch! - - let touchLocation = touch.locationInView(self) - - self.resetVelocity() - - if (rotationEnabled) - { - self.sampleVelocity(touchLocation: touchLocation) - } - - self.setGestureStartAngle(x: touchLocation.x, y: touchLocation.y) - - _touchStartPoint = touchLocation - } - } - - if (!_isRotating) - { - super.touchesBegan(touches, withEvent: event) - } - } - - public override func touchesMoved(touches: Set, withEvent event: UIEvent?) - { - if (rotationEnabled && !rotationWithTwoFingers) - { - let touch = touches.first as UITouch! - - let touchLocation = touch.locationInView(self) - - if (isDragDecelerationEnabled) - { - sampleVelocity(touchLocation: touchLocation) - } - - if (!_isRotating && distance(eventX: touchLocation.x, startX: _touchStartPoint.x, eventY: touchLocation.y, startY: _touchStartPoint.y) > CGFloat(8.0)) - { - _isRotating = true - } - else - { - self.updateGestureRotation(x: touchLocation.x, y: touchLocation.y) - setNeedsDisplay() - } - } - - if (!_isRotating) - { - super.touchesMoved(touches, withEvent: event) - } - } - - public override func touchesEnded(touches: Set, withEvent event: UIEvent?) - { - if (!_isRotating) - { - super.touchesEnded(touches, withEvent: event) - } - - if (rotationEnabled && !rotationWithTwoFingers) - { - let touch = touches.first as UITouch! - - let touchLocation = touch.locationInView(self) - - if (isDragDecelerationEnabled) - { - stopDeceleration() - - sampleVelocity(touchLocation: touchLocation) - - _decelerationAngularVelocity = calculateVelocity() - - if (_decelerationAngularVelocity != 0.0) - { - _decelerationLastTime = CACurrentMediaTime() - _decelerationDisplayLink = CADisplayLink(target: self, selector: Selector("decelerationLoop")) - _decelerationDisplayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - } - } - } - - if (_isRotating) - { - _isRotating = false - } - } - - public override func touchesCancelled(touches: Set?, withEvent event: UIEvent?) - { - super.touchesCancelled(touches, withEvent: event) - - if (_isRotating) - { - _isRotating = false - } - } - - private func resetVelocity() - { - _velocitySamples.removeAll(keepCapacity: false) - } - - private func sampleVelocity(touchLocation touchLocation: CGPoint) - { - let currentTime = CACurrentMediaTime() - - _velocitySamples.append(AngularVelocitySample(time: currentTime, angle: angleForPoint(x: touchLocation.x, y: touchLocation.y))) - - // Remove samples older than our sample time - 1 seconds - for (var i = 0, count = _velocitySamples.count; i < count - 2; i++) - { - if (currentTime - _velocitySamples[i].time > 1.0) - { - _velocitySamples.removeAtIndex(0) - i-- - count-- - } - else - { - break - } - } - } - - private func calculateVelocity() -> CGFloat - { - if (_velocitySamples.isEmpty) - { - return 0.0 - } - - var firstSample = _velocitySamples[0] - var lastSample = _velocitySamples[_velocitySamples.count - 1] - - // Look for a sample that's closest to the latest sample, but not the same, so we can deduce the direction - var beforeLastSample = firstSample - for (var i = _velocitySamples.count - 1; i >= 0; i--) - { - beforeLastSample = _velocitySamples[i] - if (beforeLastSample.angle != lastSample.angle) - { - break - } - } - - // Calculate the sampling time - var timeDelta = lastSample.time - firstSample.time - if (timeDelta == 0.0) - { - timeDelta = 0.1 - } - - // Calculate clockwise/ccw by choosing two values that should be closest to each other, - // so if the angles are two far from each other we know they are inverted "for sure" - var clockwise = lastSample.angle >= beforeLastSample.angle - if (abs(lastSample.angle - beforeLastSample.angle) > 270.0) - { - clockwise = !clockwise - } - - // Now if the "gesture" is over a too big of an angle - then we know the angles are inverted, and we need to move them closer to each other from both sides of the 360.0 wrapping point - if (lastSample.angle - firstSample.angle > 180.0) - { - firstSample.angle += 360.0 - } - else if (firstSample.angle - lastSample.angle > 180.0) - { - lastSample.angle += 360.0 - } - - // The velocity - var velocity = abs((lastSample.angle - firstSample.angle) / CGFloat(timeDelta)) - - // Direction? - if (!clockwise) - { - velocity = -velocity - } - - return velocity - } - - /// sets the starting angle of the rotation, this is only used by the touch listener, x and y is the touch position - private func setGestureStartAngle(x x: CGFloat, y: CGFloat) - { - _startAngle = angleForPoint(x: x, y: y) - - // take the current angle into consideration when starting a new drag - _startAngle -= _rotationAngle - } - - /// updates the view rotation depending on the given touch position, also takes the starting angle into consideration - private func updateGestureRotation(x x: CGFloat, y: CGFloat) - { - self.rotationAngle = angleForPoint(x: x, y: y) - _startAngle - } - - public func stopDeceleration() - { - if (_decelerationDisplayLink !== nil) - { - _decelerationDisplayLink.removeFromRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - _decelerationDisplayLink = nil - } - } - - @objc private func decelerationLoop() - { - let currentTime = CACurrentMediaTime() - - _decelerationAngularVelocity *= self.dragDecelerationFrictionCoef - - let timeInterval = CGFloat(currentTime - _decelerationLastTime) - - self.rotationAngle += _decelerationAngularVelocity * timeInterval - - _decelerationLastTime = currentTime - - if(abs(_decelerationAngularVelocity) < 0.001) - { - stopDeceleration() - } - } - - /// - returns: the distance between two points - private func distance(eventX eventX: CGFloat, startX: CGFloat, eventY: CGFloat, startY: CGFloat) -> CGFloat - { - let dx = eventX - startX - let dy = eventY - startY - return sqrt(dx * dx + dy * dy) - } - - /// - returns: the distance between two points - private func distance(from from: CGPoint, to: CGPoint) -> CGFloat - { - let dx = from.x - to.x - let dy = from.y - to.y - return sqrt(dx * dx + dy * dy) - } - - /// reference to the last highlighted object - private var _lastHighlight: ChartHighlight! - - @objc private func tapGestureRecognized(recognizer: UITapGestureRecognizer) - { - if (recognizer.state == UIGestureRecognizerState.Ended) - { - let location = recognizer.locationInView(self) - let distance = distanceToCenter(x: location.x, y: location.y) - - // check if a slice was touched - if (distance > self.radius) - { - // if no slice was touched, highlight nothing - self.highlightValues(nil) - _lastHighlight = nil - _lastHighlight = nil - } - else - { - var angle = angleForPoint(x: location.x, y: location.y) - - if (self.isKindOfClass(PieChartView)) - { - angle /= _animator.phaseY - } - - let index = indexForAngle(angle) - - // check if the index could be found - if (index < 0) - { - self.highlightValues(nil) - _lastHighlight = nil - } - else - { - let valsAtIndex = getSelectionDetailsAtIndex(index) - - var dataSetIndex = 0 - - // get the dataset that is closest to the selection (PieChart only has one DataSet) - if (self.isKindOfClass(RadarChartView)) - { - dataSetIndex = ChartUtils.closestDataSetIndex(valsAtIndex, value: Double(distance / (self as! RadarChartView).factor), axis: nil) - } - - if (dataSetIndex < 0) - { - self.highlightValues(nil) - _lastHighlight = nil - } - else - { - let h = ChartHighlight(xIndex: index, dataSetIndex: dataSetIndex) - - if (_lastHighlight !== nil && h == _lastHighlight) - { - self.highlightValue(highlight: nil, callDelegate: true) - _lastHighlight = nil - } - else - { - self.highlightValue(highlight: h, callDelegate: true) - _lastHighlight = h - } - } - } - } - } - } - - #if !os(tvOS) - @objc private func rotationGestureRecognized(recognizer: UIRotationGestureRecognizer) - { - if (recognizer.state == UIGestureRecognizerState.Began) - { - stopDeceleration() - - _startAngle = self.rawRotationAngle - } - - if (recognizer.state == UIGestureRecognizerState.Began || recognizer.state == UIGestureRecognizerState.Changed) - { - let angle = ChartUtils.Math.FRAD2DEG * recognizer.rotation - - self.rotationAngle = _startAngle + angle - setNeedsDisplay() - } - else if (recognizer.state == UIGestureRecognizerState.Ended) - { - let angle = ChartUtils.Math.FRAD2DEG * recognizer.rotation - - self.rotationAngle = _startAngle + angle - setNeedsDisplay() - - if (isDragDecelerationEnabled) - { - stopDeceleration() - - _decelerationAngularVelocity = ChartUtils.Math.FRAD2DEG * recognizer.velocity - - if (_decelerationAngularVelocity != 0.0) - { - _decelerationLastTime = CACurrentMediaTime() - _decelerationDisplayLink = CADisplayLink(target: self, selector: Selector("decelerationLoop")) - _decelerationDisplayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) - } - } - } - } - #endif -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/RadarChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/RadarChartView.swift deleted file mode 100644 index fbdfe9f9..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/RadarChartView.swift +++ /dev/null @@ -1,283 +0,0 @@ -// -// RadarChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -/// Implementation of the RadarChart, a "spidernet"-like chart. It works best -/// when displaying 5-10 entries per DataSet. -public class RadarChartView: PieRadarChartViewBase -{ - /// width of the web lines that come from the center. - public var webLineWidth = CGFloat(1.5) - - /// width of the web lines that are in between the lines coming from the center - public var innerWebLineWidth = CGFloat(0.75) - - /// color for the web lines that come from the center - public var webColor = UIColor(red: 122/255.0, green: 122/255.0, blue: 122.0/255.0, alpha: 1.0) - - /// color for the web lines in between the lines that come from the center. - public var innerWebColor = UIColor(red: 122/255.0, green: 122/255.0, blue: 122.0/255.0, alpha: 1.0) - - /// transparency the grid is drawn with (0.0 - 1.0) - public var webAlpha: CGFloat = 150.0 / 255.0 - - /// flag indicating if the web lines should be drawn or not - public var drawWeb = true - - /// modulus that determines how many labels and web-lines are skipped before the next is drawn - private var _skipWebLineCount = 1 - - /// the object reprsenting the y-axis labels - private var _yAxis: ChartYAxis! - - /// the object representing the x-axis labels - private var _xAxis: ChartXAxis! - - internal var _yAxisRenderer: ChartYAxisRendererRadarChart! - internal var _xAxisRenderer: ChartXAxisRendererRadarChart! - - public override init(frame: CGRect) - { - super.init(frame: frame) - } - - public required init?(coder aDecoder: NSCoder) - { - super.init(coder: aDecoder) - } - - internal override func initialize() - { - super.initialize() - - _yAxis = ChartYAxis(position: .Left) - _xAxis = ChartXAxis() - _xAxis.spaceBetweenLabels = 0 - - renderer = RadarChartRenderer(chart: self, animator: _animator, viewPortHandler: _viewPortHandler) - - _yAxisRenderer = ChartYAxisRendererRadarChart(viewPortHandler: _viewPortHandler, yAxis: _yAxis, chart: self) - _xAxisRenderer = ChartXAxisRendererRadarChart(viewPortHandler: _viewPortHandler, xAxis: _xAxis, chart: self) - } - - internal override func calcMinMax() - { - super.calcMinMax() - - let minLeft = _data.getYMin(.Left) - let maxLeft = _data.getYMax(.Left) - - _chartXMax = Double(_data.xVals.count) - 1.0 - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - - let leftRange = CGFloat(abs(maxLeft - (_yAxis.isStartAtZeroEnabled ? 0.0 : minLeft))) - - let topSpaceLeft = Double(leftRange * _yAxis.spaceTop) - let bottomSpaceLeft = Double(leftRange * _yAxis.spaceBottom) - - // Consider sticking one of the edges of the axis to zero (0.0) - - if _yAxis.isStartAtZeroEnabled - { - if minLeft < 0.0 && maxLeft < 0.0 - { - // If the values are all negative, let's stay in the negative zone - _yAxis.axisMinimum = min(0.0, !isnan(_yAxis.customAxisMin) ? _yAxis.customAxisMin : (minLeft - bottomSpaceLeft)) - _yAxis.axisMaximum = 0.0 - } - else if minLeft >= 0.0 - { - // We have positive values only, stay in the positive zone - _yAxis.axisMinimum = 0.0 - _yAxis.axisMaximum = max(0.0, !isnan(_yAxis.customAxisMax) ? _yAxis.customAxisMax : (maxLeft + topSpaceLeft)) - } - else - { - // Stick the minimum to 0.0 or less, and maximum to 0.0 or more (startAtZero for negative/positive at the same time) - _yAxis.axisMinimum = min(0.0, !isnan(_yAxis.customAxisMin) ? _yAxis.customAxisMin : (minLeft - bottomSpaceLeft)) - _yAxis.axisMaximum = max(0.0, !isnan(_yAxis.customAxisMax) ? _yAxis.customAxisMax : (maxLeft + topSpaceLeft)) - } - } - else - { - // Use the values as they are - _yAxis.axisMinimum = !isnan(_yAxis.customAxisMin) ? _yAxis.customAxisMin : (minLeft - bottomSpaceLeft) - _yAxis.axisMaximum = !isnan(_yAxis.customAxisMax) ? _yAxis.customAxisMax : (maxLeft + topSpaceLeft) - } - - _chartXMax = Double(_data.xVals.count) - 1.0 - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - - _yAxis.axisRange = abs(_yAxis.axisMaximum - _yAxis.axisMinimum) - } - - public override func getMarkerPosition(entry entry: ChartDataEntry, highlight: ChartHighlight) -> CGPoint - { - let angle = self.sliceAngle * CGFloat(entry.xIndex) + self.rotationAngle - let val = CGFloat(entry.value) * self.factor - let c = self.centerOffsets - - let p = CGPoint(x: c.x + val * cos(angle * ChartUtils.Math.FDEG2RAD), - y: c.y + val * sin(angle * ChartUtils.Math.FDEG2RAD)) - - return p - } - - public override func notifyDataSetChanged() - { - if (_dataNotSet) - { - return - } - - calcMinMax() - - _yAxis?._defaultValueFormatter = _defaultValueFormatter - - _yAxisRenderer?.computeAxis(yMin: _yAxis.axisMinimum, yMax: _yAxis.axisMaximum) - _xAxisRenderer?.computeAxis(xValAverageLength: _data.xValAverageLength, xValues: _data.xVals) - - if (_legend !== nil && !_legend.isLegendCustom) - { - _legendRenderer?.computeLegend(_data) - } - - calculateOffsets() - - setNeedsDisplay() - } - - public override func drawRect(rect: CGRect) - { - super.drawRect(rect) - - if (_dataNotSet) - { - return - } - - let context = UIGraphicsGetCurrentContext() - - _xAxisRenderer?.renderAxisLabels(context: context) - - if (drawWeb) - { - renderer!.drawExtras(context: context) - } - - _yAxisRenderer.renderLimitLines(context: context) - - renderer!.drawData(context: context) - - if (valuesToHighlight()) - { - renderer!.drawHighlighted(context: context, indices: _indicesToHightlight) - } - - _yAxisRenderer.renderAxisLabels(context: context) - - renderer!.drawValues(context: context) - - _legendRenderer.renderLegend(context: context) - - drawDescription(context: context) - - drawMarkers(context: context) - } - - /// - returns: the factor that is needed to transform values into pixels. - public var factor: CGFloat - { - let content = _viewPortHandler.contentRect - return min(content.width / 2.0, content.height / 2.0) - / CGFloat(_yAxis.axisRange) - } - - /// - returns: the angle that each slice in the radar chart occupies. - public var sliceAngle: CGFloat - { - return 360.0 / CGFloat(_data.xValCount) - } - - public override func indexForAngle(angle: CGFloat) -> Int - { - // take the current angle of the chart into consideration - let a = ChartUtils.normalizedAngleFromAngle(angle - self.rotationAngle) - - let sliceAngle = self.sliceAngle - - for (var i = 0; i < _data.xValCount; i++) - { - if (sliceAngle * CGFloat(i + 1) - sliceAngle / 2.0 > a) - { - return i - } - } - - return 0 - } - - /// - returns: the object that represents all y-labels of the RadarChart. - public var yAxis: ChartYAxis - { - return _yAxis - } - - /// - returns: the object that represents all x-labels that are placed around the RadarChart. - public var xAxis: ChartXAxis - { - return _xAxis - } - - /// Sets the number of web-lines that should be skipped on chart web before the next one is drawn. This targets the lines that come from the center of the RadarChart. - /// if count = 1 -> 1 line is skipped in between - public var skipWebLineCount: Int - { - get - { - return _skipWebLineCount - } - set - { - _skipWebLineCount = max(0, newValue) - } - } - - internal override var requiredLegendOffset: CGFloat - { - return _legend.font.pointSize * 4.0 - } - - internal override var requiredBaseOffset: CGFloat - { - return _xAxis.isEnabled && _xAxis.isDrawLabelsEnabled ? _xAxis.labelWidth : 10.0 - } - - public override var radius: CGFloat - { - let content = _viewPortHandler.contentRect - return min(content.width / 2.0, content.height / 2.0) - } - - /// - returns: the maximum value this chart can display on it's y-axis. - public override var chartYMax: Double { return _yAxis.axisMaximum; } - - /// - returns: the minimum value this chart can display on it's y-axis. - public override var chartYMin: Double { return _yAxis.axisMinimum; } - - /// - returns: the range of y-values this chart can display. - public var yRange: Double { return _yAxis.axisRange} -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Charts/ScatterChartView.swift b/Carthage/Checkouts/Charts/Charts/Classes/Charts/ScatterChartView.swift deleted file mode 100644 index 7d88a103..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Charts/ScatterChartView.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// ScatterChartView.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// The ScatterChart. Draws dots, triangles, squares and custom shapes into the chartview. -public class ScatterChartView: BarLineChartViewBase, ScatterChartRendererDelegate -{ - public override func initialize() - { - super.initialize() - - renderer = ScatterChartRenderer(delegate: self, animator: _animator, viewPortHandler: _viewPortHandler) - _chartXMin = -0.5 - } - - public override func calcMinMax() - { - super.calcMinMax() - - if (_deltaX == 0.0 && _data.yValCount > 0) - { - _deltaX = 1.0 - } - - _chartXMax += 0.5 - _deltaX = CGFloat(abs(_chartXMax - _chartXMin)) - } - - // MARK: - ScatterChartRendererDelegate - - public func scatterChartRendererData(renderer: ScatterChartRenderer) -> ScatterChartData! - { - return _data as! ScatterChartData! - } - - public func scatterChartRenderer(renderer: ScatterChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return getTransformer(which) - } - - public func scatterChartDefaultRendererValueFormatter(renderer: ScatterChartRenderer) -> NSNumberFormatter! - { - return self._defaultValueFormatter - } - - public func scatterChartRendererChartYMax(renderer: ScatterChartRenderer) -> Double - { - return self.chartYMax - } - - public func scatterChartRendererChartYMin(renderer: ScatterChartRenderer) -> Double - { - return self.chartYMin - } - - public func scatterChartRendererChartXMax(renderer: ScatterChartRenderer) -> Double - { - return self.chartXMax - } - - public func scatterChartRendererChartXMin(renderer: ScatterChartRenderer) -> Double - { - return self.chartXMin - } - - public func scatterChartRendererMaxVisibleValueCount(renderer: ScatterChartRenderer) -> Int - { - return self.maxVisibleValueCount - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartAxisBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartAxisBase.swift deleted file mode 100644 index 68de1426..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartAxisBase.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// ChartAxisBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartAxisBase: ChartComponentBase -{ - public var labelFont = UIFont.systemFontOfSize(10.0) - public var labelTextColor = UIColor.blackColor() - - public var axisLineColor = UIColor.grayColor() - public var axisLineWidth = CGFloat(0.5) - public var axisLineDashPhase = CGFloat(0.0) - public var axisLineDashLengths: [CGFloat]! - - public var gridColor = UIColor.grayColor().colorWithAlphaComponent(0.9) - public var gridLineWidth = CGFloat(0.5) - public var gridLineDashPhase = CGFloat(0.0) - public var gridLineDashLengths: [CGFloat]! - - public var drawGridLinesEnabled = true - public var drawAxisLineEnabled = true - - /// flag that indicates of the labels of this axis should be drawn or not - public var drawLabelsEnabled = true - - /// Sets the used x-axis offset for the labels on this axis. - /// **default**: 5.0 - public var xOffset = CGFloat(5.0) - - /// Sets the used y-axis offset for the labels on this axis. - /// **default**: 5.0 (or 0.0 on ChartYAxis) - public var yOffset = CGFloat(5.0) - - /// array of limitlines that can be set for the axis - private var _limitLines = [ChartLimitLine]() - - /// Are the LimitLines drawn behind the data or in front of the data? - /// - /// **default**: false - public var drawLimitLinesBehindDataEnabled = false - - public override init() - { - super.init() - } - - public func getLongestLabel() -> String - { - fatalError("getLongestLabel() cannot be called on ChartAxisBase") - } - - public var isDrawGridLinesEnabled: Bool { return drawGridLinesEnabled; } - - public var isDrawAxisLineEnabled: Bool { return drawAxisLineEnabled; } - - public var isDrawLabelsEnabled: Bool { return drawLabelsEnabled; } - - /// Are the LimitLines drawn behind the data or in front of the data? - /// - /// **default**: false - public var isDrawLimitLinesBehindDataEnabled: Bool { return drawLimitLinesBehindDataEnabled; } - - /// Adds a new ChartLimitLine to this axis. - public func addLimitLine(line: ChartLimitLine) - { - _limitLines.append(line) - } - - /// Removes the specified ChartLimitLine from the axis. - public func removeLimitLine(line: ChartLimitLine) - { - for (var i = 0; i < _limitLines.count; i++) - { - if (_limitLines[i] === line) - { - _limitLines.removeAtIndex(i) - return - } - } - } - - /// Removes all LimitLines from the axis. - public func removeAllLimitLines() - { - _limitLines.removeAll(keepCapacity: false) - } - - /// - returns: the LimitLines of this axis. - public var limitLines : [ChartLimitLine] - { - return _limitLines - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartComponentBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartComponentBase.swift deleted file mode 100644 index 450029aa..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartComponentBase.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// ChartComponentBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 16/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -/// This class encapsulates everything both Axis and Legend have in common. -public class ChartComponentBase: NSObject -{ - /// flag that indicates if this component is enabled or not - public var enabled = true - - public override init() - { - super.init() - } - - public var isEnabled: Bool { return enabled; } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLegend.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLegend.swift deleted file mode 100644 index 364255cf..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLegend.swift +++ /dev/null @@ -1,462 +0,0 @@ -// -// ChartLegend.swift -// Charts -// -// Created by Daniel Cohen Gindi on 24/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartLegend: ChartComponentBase -{ - @objc - public enum ChartLegendPosition: Int - { - case RightOfChart - case RightOfChartCenter - case RightOfChartInside - case LeftOfChart - case LeftOfChartCenter - case LeftOfChartInside - case BelowChartLeft - case BelowChartRight - case BelowChartCenter - case AboveChartLeft - case AboveChartRight - case AboveChartCenter - case PiechartCenter - } - - @objc - public enum ChartLegendForm: Int - { - case Square - case Circle - case Line - } - - @objc - public enum ChartLegendDirection: Int - { - case LeftToRight - case RightToLeft - } - - /// the legend colors array, each color is for the form drawn at the same index - public var colors = [UIColor?]() - - // the legend text array. a nil label will start a group. - public var labels = [String?]() - - internal var _extraColors = [UIColor?]() - internal var _extraLabels = [String?]() - - /// colors that will be appended to the end of the colors array after calculating the legend. - public var extraColors: [UIColor?] { return _extraColors; } - - /// labels that will be appended to the end of the labels array after calculating the legend. a nil label will start a group. - public var extraLabels: [String?] { return _extraLabels; } - - /// Are the legend labels/colors a custom value or auto calculated? If false, then it's auto, if true, then custom. - /// - /// **default**: false (automatic legend) - private var _isLegendCustom = false - - public var position = ChartLegendPosition.BelowChartLeft - public var direction = ChartLegendDirection.LeftToRight - - public var font: UIFont = UIFont.systemFontOfSize(10.0) - public var textColor = UIColor.blackColor() - - public var form = ChartLegendForm.Square - public var formSize = CGFloat(8.0) - public var formLineWidth = CGFloat(1.5) - - public var xEntrySpace = CGFloat(6.0) - public var yEntrySpace = CGFloat(0.0) - public var formToTextSpace = CGFloat(5.0) - public var stackSpace = CGFloat(3.0) - - /// Sets the x offset fo the legend. - /// Higher offset means the legend as a whole will be placed further away from the left/right. - /// Positive value will move the legend to the right when LTR, and to the left when RTL. - public var xOffset = CGFloat(5.0) - - /// Sets the y offset fo the legend. - /// Higher offset means the legend as a whole will be placed further away from the top. - public var yOffset = CGFloat(7.0) - - public var calculatedLabelSizes = [CGSize]() - public var calculatedLabelBreakPoints = [Bool]() - public var calculatedLineSizes = [CGSize]() - - public override init() - { - super.init() - } - - public init(colors: [UIColor?], labels: [String?]) - { - super.init() - - self.colors = colors - self.labels = labels - } - - public init(colors: [NSObject], labels: [NSObject]) - { - super.init() - - self.colorsObjc = colors - self.labelsObjc = labels - } - - public func getMaximumEntrySize(font: UIFont) -> CGSize - { - var maxW = CGFloat(0.0) - var maxH = CGFloat(0.0) - - var labels = self.labels - for (var i = 0; i < labels.count; i++) - { - if (labels[i] == nil) - { - continue - } - - let size = (labels[i] as NSString!).sizeWithAttributes([NSFontAttributeName: font]) - - if (size.width > maxW) - { - maxW = size.width - } - if (size.height > maxH) - { - maxH = size.height - } - } - - return CGSize( - width: maxW + formSize + formToTextSpace, - height: maxH - ) - } - - public func getLabel(index: Int) -> String? - { - return labels[index] - } - - public func getFullSize(labelFont: UIFont) -> CGSize - { - var width = CGFloat(0.0) - var height = CGFloat(0.0) - - var labels = self.labels - for (var i = 0, count = labels.count; i < count; i++) - { - if (labels[i] != nil) - { - // make a step to the left - if (colors[i] != nil) - { - width += formSize + formToTextSpace - } - - let size = (labels[i] as NSString!).sizeWithAttributes([NSFontAttributeName: labelFont]) - - width += size.width - height += size.height - - if (i < count - 1) - { - width += xEntrySpace - height += yEntrySpace - } - } - else - { - width += formSize + stackSpace - - if (i < count - 1) - { - width += stackSpace - } - } - } - - return CGSize(width: width, height: height) - } - - public var neededWidth = CGFloat(0.0) - public var neededHeight = CGFloat(0.0) - public var textWidthMax = CGFloat(0.0) - public var textHeightMax = CGFloat(0.0) - - /// flag that indicates if word wrapping is enabled - /// this is currently supported only for: `BelowChartLeft`, `BelowChartRight`, `BelowChartCenter`. - /// note that word wrapping a legend takes a toll on performance. - /// you may want to set maxSizePercent when word wrapping, to set the point where the text wraps. - /// - /// **default**: false - public var wordWrapEnabled = false - - /// if this is set, then word wrapping the legend is enabled. - public var isWordWrapEnabled: Bool { return wordWrapEnabled } - - /// The maximum relative size out of the whole chart view in percent. - /// If the legend is to the right/left of the chart, then this affects the width of the legend. - /// If the legend is to the top/bottom of the chart, then this affects the height of the legend. - /// If the legend is the center of the piechart, then this defines the size of the rectangular bounds out of the size of the "hole". - /// - /// **default**: 0.95 (95%) - public var maxSizePercent: CGFloat = 0.95 - - public func calculateDimensions(labelFont labelFont: UIFont, viewPortHandler: ChartViewPortHandler) - { - if (position == .RightOfChart - || position == .RightOfChartCenter - || position == .LeftOfChart - || position == .LeftOfChartCenter - || position == .PiechartCenter) - { - let maxEntrySize = getMaximumEntrySize(labelFont) - let fullSize = getFullSize(labelFont) - - neededWidth = maxEntrySize.width - neededHeight = fullSize.height - textWidthMax = maxEntrySize.width - textHeightMax = maxEntrySize.height - } - else if (position == .BelowChartLeft - || position == .BelowChartRight - || position == .BelowChartCenter - || position == .AboveChartLeft - || position == .AboveChartRight - || position == .AboveChartCenter) - { - var labels = self.labels - var colors = self.colors - let labelCount = labels.count - - let labelLineHeight = labelFont.lineHeight - let formSize = self.formSize - let formToTextSpace = self.formToTextSpace - let xEntrySpace = self.xEntrySpace - let stackSpace = self.stackSpace - let wordWrapEnabled = self.wordWrapEnabled - - let contentWidth: CGFloat = viewPortHandler.contentWidth - - // Prepare arrays for calculated layout - if (calculatedLabelSizes.count != labelCount) - { - calculatedLabelSizes = [CGSize](count: labelCount, repeatedValue: CGSize()) - } - - if (calculatedLabelBreakPoints.count != labelCount) - { - calculatedLabelBreakPoints = [Bool](count: labelCount, repeatedValue: false) - } - - calculatedLineSizes.removeAll(keepCapacity: true) - - // Start calculating layout - - let labelAttrs = [NSFontAttributeName: labelFont] - var maxLineWidth: CGFloat = 0.0 - var currentLineWidth: CGFloat = 0.0 - var requiredWidth: CGFloat = 0.0 - var stackedStartIndex: Int = -1 - - for (var i = 0; i < labelCount; i++) - { - let drawingForm = colors[i] != nil - - calculatedLabelBreakPoints[i] = false - - if (stackedStartIndex == -1) - { - // we are not stacking, so required width is for this label only - requiredWidth = 0.0 - } - else - { - // add the spacing appropriate for stacked labels/forms - requiredWidth += stackSpace - } - - // grouped forms have null labels - if (labels[i] != nil) - { - calculatedLabelSizes[i] = (labels[i] as NSString!).sizeWithAttributes(labelAttrs) - requiredWidth += drawingForm ? formToTextSpace + formSize : 0.0 - requiredWidth += calculatedLabelSizes[i].width - } - else - { - calculatedLabelSizes[i] = CGSize() - requiredWidth += drawingForm ? formSize : 0.0 - - if (stackedStartIndex == -1) - { - // mark this index as we might want to break here later - stackedStartIndex = i - } - } - - if (labels[i] != nil || i == labelCount - 1) - { - let requiredSpacing = currentLineWidth == 0.0 ? 0.0 : xEntrySpace - - if (!wordWrapEnabled || // No word wrapping, it must fit. - currentLineWidth == 0.0 || // The line is empty, it must fit. - (contentWidth - currentLineWidth >= requiredSpacing + requiredWidth)) // It simply fits - { - // Expand current line - currentLineWidth += requiredSpacing + requiredWidth - } - else - { // It doesn't fit, we need to wrap a line - - // Add current line size to array - calculatedLineSizes.append(CGSize(width: currentLineWidth, height: labelLineHeight)) - maxLineWidth = max(maxLineWidth, currentLineWidth) - - // Start a new line - calculatedLabelBreakPoints[stackedStartIndex > -1 ? stackedStartIndex : i] = true - currentLineWidth = requiredWidth - } - - if (i == labelCount - 1) - { // Add last line size to array - calculatedLineSizes.append(CGSize(width: currentLineWidth, height: labelLineHeight)) - maxLineWidth = max(maxLineWidth, currentLineWidth) - } - } - - stackedStartIndex = labels[i] != nil ? -1 : stackedStartIndex - } - - let maxEntrySize = getMaximumEntrySize(labelFont) - - textWidthMax = maxEntrySize.width - textHeightMax = maxEntrySize.height - neededWidth = maxLineWidth - neededHeight = labelLineHeight * CGFloat(calculatedLineSizes.count) + - yEntrySpace * CGFloat(calculatedLineSizes.count == 0 ? 0 : (calculatedLineSizes.count - 1)) - } - else - { - let maxEntrySize = getMaximumEntrySize(labelFont) - let fullSize = getFullSize(labelFont) - - /* RightOfChartInside, LeftOfChartInside */ - neededWidth = fullSize.width - neededHeight = maxEntrySize.height - textWidthMax = maxEntrySize.width - textHeightMax = maxEntrySize.height - } - } - - /// MARK: - Custom legend - - /// colors and labels that will be appended to the end of the auto calculated colors and labels after calculating the legend. - /// (if the legend has already been calculated, you will need to call notifyDataSetChanged() to let the changes take effect) - public func setExtra(colors colors: [UIColor?], labels: [String?]) - { - self._extraLabels = labels - self._extraColors = colors - } - - /// Sets a custom legend's labels and colors arrays. - /// The colors count should match the labels count. - /// * Each color is for the form drawn at the same index. - /// * A nil label will start a group. - /// * A nil color will avoid drawing a form, and a clearColor will leave a space for the form. - /// This will disable the feature that automatically calculates the legend labels and colors from the datasets. - /// Call `resetCustom(...)` to re-enable automatic calculation (and then `notifyDataSetChanged()` is needed). - public func setCustom(colors colors: [UIColor?], labels: [String?]) - { - self.labels = labels - self.colors = colors - _isLegendCustom = true - } - - /// Calling this will disable the custom legend labels (set by `setLegend(...)`). Instead, the labels will again be calculated automatically (after `notifyDataSetChanged()` is called). - public func resetCustom() - { - _isLegendCustom = false - } - - /// **default**: false (automatic legend) - /// - returns: true if a custom legend labels and colors has been set - public var isLegendCustom: Bool - { - return _isLegendCustom - } - - /// MARK: - ObjC compatibility - - /// colors that will be appended to the end of the colors array after calculating the legend. - public var extraColorsObjc: [NSObject] { return ChartUtils.bridgedObjCGetUIColorArray(swift: _extraColors); } - - /// labels that will be appended to the end of the labels array after calculating the legend. a nil label will start a group. - public var extraLabelsObjc: [NSObject] { return ChartUtils.bridgedObjCGetStringArray(swift: _extraLabels); } - - /// the legend colors array, each color is for the form drawn at the same index - /// (ObjC bridging functions, as Swift 1.2 does not bridge optionals in array to `NSNull`s) - public var colorsObjc: [NSObject] - { - get { return ChartUtils.bridgedObjCGetUIColorArray(swift: colors); } - set { self.colors = ChartUtils.bridgedObjCGetUIColorArray(objc: newValue); } - } - - // the legend text array. a nil label will start a group. - /// (ObjC bridging functions, as Swift 1.2 does not bridge optionals in array to `NSNull`s) - public var labelsObjc: [NSObject] - { - get { return ChartUtils.bridgedObjCGetStringArray(swift: labels); } - set { self.labels = ChartUtils.bridgedObjCGetStringArray(objc: newValue); } - } - - /// colors and labels that will be appended to the end of the auto calculated colors and labels after calculating the legend. - /// (if the legend has already been calculated, you will need to call `notifyDataSetChanged()` to let the changes take effect) - public func setExtra(colors colors: [NSObject], labels: [NSObject]) - { - if (colors.count != labels.count) - { - fatalError("ChartLegend:setExtra() - colors array and labels array need to be of same size") - } - - self._extraLabels = ChartUtils.bridgedObjCGetStringArray(objc: labels) - self._extraColors = ChartUtils.bridgedObjCGetUIColorArray(objc: colors) - } - - /// Sets a custom legend's labels and colors arrays. - /// The colors count should match the labels count. - /// * Each color is for the form drawn at the same index. - /// * A nil label will start a group. - /// * A nil color will avoid drawing a form, and a clearColor will leave a space for the form. - /// This will disable the feature that automatically calculates the legend labels and colors from the datasets. - /// Call `resetLegendToAuto(...)` to re-enable automatic calculation, and then if needed - call `notifyDataSetChanged()` on the chart to make it refresh the data. - public func setCustom(colors colors: [NSObject], labels: [NSObject]) - { - if (colors.count != labels.count) - { - fatalError("ChartLegend:setCustom() - colors array and labels array need to be of same size") - } - - self.labelsObjc = labels - self.colorsObjc = colors - _isLegendCustom = true - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLimitLine.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLimitLine.swift deleted file mode 100644 index 6a10caf8..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartLimitLine.swift +++ /dev/null @@ -1,84 +0,0 @@ -// -// ChartLimitLine.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -/// The limit line is an additional feature for all Line, Bar and ScatterCharts. -/// It allows the displaying of an additional line in the chart that marks a certain maximum / limit on the specified axis (x- or y-axis). -public class ChartLimitLine: ChartComponentBase -{ - @objc - public enum ChartLimitLabelPosition: Int - { - case LeftTop - case LeftBottom - case RightTop - case RightBottom - } - - /// limit / maximum (the y-value or xIndex) - public var limit = Double(0.0) - - private var _lineWidth = CGFloat(2.0) - public var lineColor = UIColor(red: 237.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0) - public var lineDashPhase = CGFloat(0.0) - public var lineDashLengths: [CGFloat]? - public var valueTextColor = UIColor.blackColor() - public var valueFont = UIFont.systemFontOfSize(13.0) - public var label = "" - public var labelPosition = ChartLimitLabelPosition.RightTop - - public override init() - { - super.init() - } - - public init(limit: Double) - { - super.init() - self.limit = limit - } - - public init(limit: Double, label: String) - { - super.init() - self.limit = limit - self.label = label - } - - /// set the line width of the chart (min = 0.2, max = 12); default 2 - public var lineWidth: CGFloat - { - get - { - return _lineWidth - } - set - { - if (newValue < 0.2) - { - _lineWidth = 0.2 - } - else if (newValue > 12.0) - { - _lineWidth = 12.0 - } - else - { - _lineWidth = newValue - } - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartMarker.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartMarker.swift deleted file mode 100644 index a91435ae..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartMarker.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// ChartMarker.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartMarker: ChartComponentBase -{ - /// The marker image to render - public var image: UIImage? - - /// Use this to return the desired offset you wish the MarkerView to have on the x-axis. - public var offset: CGPoint = CGPoint() - - /// The marker's size - public var size: CGSize - { - get - { - return image!.size - } - } - - public override init() - { - super.init() - } - - /// Draws the ChartMarker on the given position on the given context - public func draw(context context: CGContext?, point: CGPoint) - { - let offset = self.offset - let size = self.size - - let rect = CGRect(x: point.x + offset.x, y: point.y + offset.y, width: size.width, height: size.height) - - UIGraphicsPushContext(context) - image!.drawInRect(rect) - UIGraphicsPopContext() - } - - /// This method enables a custom ChartMarker to update it's content everytime the MarkerView is redrawn according to the data entry it points to. - /// - /// - parameter highlight: the highlight object contains information about the highlighted value such as it's dataset-index, the selected range or stack-index (only stacked bar entries). - public func refreshContent(entry entry: ChartDataEntry, highlight: ChartHighlight) - { - // Do nothing here... - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartXAxis.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartXAxis.swift deleted file mode 100644 index f55a9ee8..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartXAxis.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// ChartXAxis.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartXAxis: ChartAxisBase -{ - @objc - public enum XAxisLabelPosition: Int - { - case Top - case Bottom - case BothSided - case TopInside - case BottomInside - } - - public var values = [String?]() - public var labelWidth = CGFloat(1.0) - public var labelHeight = CGFloat(1.0) - - /// the space that should be left out (in characters) between the x-axis labels - /// This only applies if the number of labels that will be skipped in between drawn axis labels is not custom set. - /// - /// **default**: 4 - public var spaceBetweenLabels = Int(4) - - /// the modulus that indicates if a value at a specified index in an array(list) for the x-axis-labels is drawn or not. Draw when `(index % modulus) == 0`. - public var axisLabelModulus = Int(1) - - /// Is axisLabelModulus a custom value or auto calculated? If false, then it's auto, if true, then custom. - /// - /// **default**: false (automatic modulus) - private var _isAxisModulusCustom = false - - /// the modulus that indicates if a value at a specified index in an array(list) for the y-axis-labels is drawn or not. Draw when `(index % modulus) == 0`. - /// Used only for Horizontal BarChart - public var yAxisLabelModulus = Int(1) - - /// if set to true, the chart will avoid that the first and last label entry in the chart "clip" off the edge of the chart - public var avoidFirstLastClippingEnabled = false - - /// Custom formatter for adjusting x-value strings - private var _xAxisValueFormatter: ChartXAxisValueFormatter = ChartDefaultXAxisValueFormatter() - - /// Custom XValueFormatter for the data object that allows custom-formatting of all x-values before rendering them. - /// Provide null to reset back to the default formatting. - public var valueFormatter: ChartXAxisValueFormatter? - { - get - { - return _xAxisValueFormatter - } - set - { - _xAxisValueFormatter = newValue ?? ChartDefaultXAxisValueFormatter() - } - } - - /// the position of the x-labels relative to the chart - public var labelPosition = XAxisLabelPosition.Top - - /// if set to true, word wrapping the labels will be enabled. - /// word wrapping is done using `(value width * labelWidth)` - /// - /// *Note: currently supports all charts except pie/radar/horizontal-bar* - public var wordWrapEnabled = false - - /// - returns: true if word wrapping the labels is enabled - public var isWordWrapEnabled: Bool { return wordWrapEnabled } - - /// the width for wrapping the labels, as percentage out of one value width. - /// used only when isWordWrapEnabled = true. - /// - /// **default**: 1.0 - public var wordWrapWidthPercent: CGFloat = 1.0 - - public override init() - { - super.init() - } - - public override func getLongestLabel() -> String - { - var longest = "" - - for (var i = 0; i < values.count; i++) - { - let text = values[i] - - if (text != nil && longest.characters.count < (text!).characters.count) - { - longest = text! - } - } - - return longest - } - - public var isAvoidFirstLastClippingEnabled: Bool - { - return avoidFirstLastClippingEnabled - } - - /// Sets the number of labels that should be skipped on the axis before the next label is drawn. - /// This will disable the feature that automatically calculates an adequate space between the axis labels and set the number of labels to be skipped to the fixed number provided by this method. - /// Call `resetLabelsToSkip(...)` to re-enable automatic calculation. - public func setLabelsToSkip(count: Int) - { - _isAxisModulusCustom = true - - if (count < 0) - { - axisLabelModulus = 1 - } - else - { - axisLabelModulus = count + 1 - } - } - - /// Calling this will disable a custom number of labels to be skipped (set by `setLabelsToSkip(...)`) while drawing the x-axis. Instead, the number of values to skip will again be calculated automatically. - public func resetLabelsToSkip() - { - _isAxisModulusCustom = false - } - - /// - returns: true if a custom axis-modulus has been set that determines the number of labels to skip when drawing. - public var isAxisModulusCustom: Bool - { - return _isAxisModulusCustom - } - - public var valuesObjc: [NSObject] - { - get { return ChartUtils.bridgedObjCGetStringArray(swift: values); } - set { self.values = ChartUtils.bridgedObjCGetStringArray(objc: newValue); } - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartYAxis.swift b/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartYAxis.swift deleted file mode 100644 index 6c23b764..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Components/ChartYAxis.swift +++ /dev/null @@ -1,246 +0,0 @@ -// -// ChartYAxis.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -/// Class representing the y-axis labels settings and its entries. -/// Be aware that not all features the YLabels class provides are suitable for the RadarChart. -/// Customizations that affect the value range of the axis need to be applied before setting data for the chart. -public class ChartYAxis: ChartAxisBase -{ - @objc - public enum YAxisLabelPosition: Int - { - case OutsideChart - case InsideChart - } - - /// Enum that specifies the axis a DataSet should be plotted against, either Left or Right. - @objc - public enum AxisDependency: Int - { - case Left - case Right - } - - public var entries = [Double]() - public var entryCount: Int { return entries.count; } - - /// the number of y-label entries the y-labels should have, default 6 - private var _labelCount = Int(6) - - /// indicates if the top y-label entry is drawn or not - public var drawTopYLabelEntryEnabled = true - - /// if true, the y-labels show only the minimum and maximum value - public var showOnlyMinMaxEnabled = false - - /// flag that indicates if the axis is inverted or not - public var inverted = false - - /// if true, the y-label entries will always start at zero - public var startAtZeroEnabled = true - - /// if true, the set number of y-labels will be forced - public var forceLabelsEnabled = false - - /// the formatter used to customly format the y-labels - public var valueFormatter: NSNumberFormatter? - - /// the formatter used to customly format the y-labels - internal var _defaultValueFormatter = NSNumberFormatter() - - /// A custom minimum value for this axis. - /// If set, this value will not be calculated automatically depending on the provided data. - /// Use `resetCustomAxisMin()` to undo this. - /// Do not forget to set startAtZeroEnabled = false if you use this method. - /// Otherwise, the axis-minimum value will still be forced to 0. - public var customAxisMin = Double.NaN - - /// Set a custom maximum value for this axis. - /// If set, this value will not be calculated automatically depending on the provided data. - /// Use `resetCustomAxisMax()` to undo this. - public var customAxisMax = Double.NaN - - /// axis space from the largest value to the top in percent of the total axis range - public var spaceTop = CGFloat(0.1) - - /// axis space from the smallest value to the bottom in percent of the total axis range - public var spaceBottom = CGFloat(0.1) - - public var axisMaximum = Double(0) - public var axisMinimum = Double(0) - - /// the total range of values this axis covers - public var axisRange = Double(0) - - /// the position of the y-labels relative to the chart - public var labelPosition = YAxisLabelPosition.OutsideChart - - /// the side this axis object represents - private var _axisDependency = AxisDependency.Left - - /// the minimum width that the axis should take - /// - /// **default**: 0.0 - public var minWidth = CGFloat(0) - - /// the maximum width that the axis can take. - /// use zero for disabling the maximum - /// - /// **default**: 0.0 (no maximum specified) - public var maxWidth = CGFloat(0) - - public override init() - { - super.init() - - _defaultValueFormatter.minimumIntegerDigits = 1 - _defaultValueFormatter.maximumFractionDigits = 1 - _defaultValueFormatter.minimumFractionDigits = 1 - _defaultValueFormatter.usesGroupingSeparator = true - self.yOffset = 0.0 - } - - public init(position: AxisDependency) - { - super.init() - - _axisDependency = position - - _defaultValueFormatter.minimumIntegerDigits = 1 - _defaultValueFormatter.maximumFractionDigits = 1 - _defaultValueFormatter.minimumFractionDigits = 1 - _defaultValueFormatter.usesGroupingSeparator = true - self.yOffset = 0.0 - } - - public var axisDependency: AxisDependency - { - return _axisDependency - } - - public func setLabelCount(count: Int, force: Bool) - { - _labelCount = count - - if (_labelCount > 25) - { - _labelCount = 25 - } - if (_labelCount < 2) - { - _labelCount = 2 - } - - forceLabelsEnabled = force - } - - /// the number of label entries the y-axis should have - /// max = 25, - /// min = 2, - /// default = 6, - /// be aware that this number is not fixed and can only be approximated - public var labelCount: Int - { - get - { - return _labelCount - } - set - { - setLabelCount(newValue, force: false); - } - } - - /// By calling this method, any custom minimum value that has been previously set is reseted, and the calculation is done automatically. - public func resetCustomAxisMin() - { - customAxisMin = Double.NaN - } - - /// By calling this method, any custom maximum value that has been previously set is reseted, and the calculation is done automatically. - public func resetCustomAxisMax() - { - customAxisMax = Double.NaN - } - - public func requiredSize() -> CGSize - { - let label = getLongestLabel() as NSString - var size = label.sizeWithAttributes([NSFontAttributeName: labelFont]) - size.width += xOffset * 2.0 - size.height += yOffset * 2.0 - size.width = max(minWidth, min(size.width, maxWidth > 0.0 ? maxWidth : size.width)) - return size - } - - public func getRequiredHeightSpace() -> CGFloat - { - return requiredSize().height + 2.5 * 2.0 + yOffset - } - - public override func getLongestLabel() -> String - { - var longest = "" - - for (var i = 0; i < entries.count; i++) - { - let text = getFormattedLabel(i) - - if (longest.characters.count < text.characters.count) - { - longest = text - } - } - - return longest - } - - /// - returns: the formatted y-label at the specified index. This will either use the auto-formatter or the custom formatter (if one is set). - public func getFormattedLabel(index: Int) -> String - { - if (index < 0 || index >= entries.count) - { - return "" - } - - return (valueFormatter ?? _defaultValueFormatter).stringFromNumber(entries[index])! - } - - /// - returns: true if this axis needs horizontal offset, false if no offset is needed. - public var needsOffset: Bool - { - if (isEnabled && isDrawLabelsEnabled && labelPosition == .OutsideChart) - { - return true - } - else - { - return false - } - } - - public var isInverted: Bool { return inverted; } - - public var isStartAtZeroEnabled: Bool { return startAtZeroEnabled; } - - /// - returns: true if focing the y-label count is enabled. Default: false - public var isForceLabelsEnabled: Bool { return forceLabelsEnabled } - - public var isShowOnlyMinMaxEnabled: Bool { return showOnlyMinMaxEnabled; } - - public var isDrawTopYLabelEntryEnabled: Bool { return drawTopYLabelEntryEnabled; } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartData.swift deleted file mode 100644 index 515822a0..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartData.swift +++ /dev/null @@ -1,58 +0,0 @@ -// -// BarChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class BarChartData: BarLineScatterCandleBubbleChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - private var _groupSpace = CGFloat(0.8) - - /// The spacing is relative to a full bar width - public var groupSpace: CGFloat - { - get - { - if (_dataSets.count <= 1) - { - return 0.0 - } - return _groupSpace - } - set - { - _groupSpace = newValue - } - } - - /// - returns: true if this BarData object contains grouped DataSets (more than 1 DataSet). - public var isGrouped: Bool - { - return _dataSets.count > 1 ? true : false - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataEntry.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataEntry.swift deleted file mode 100644 index 20457b29..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataEntry.swift +++ /dev/null @@ -1,166 +0,0 @@ -// -// BarChartDataEntry.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class BarChartDataEntry: ChartDataEntry -{ - /// the values the stacked barchart holds - private var _values: [Double]? - - /// the sum of all negative values this entry (if stacked) contains - private var _negativeSum: Double = 0.0 - - /// the sum of all positive values this entry (if stacked) contains - private var _positiveSum: Double = 0.0 - - public required init() - { - super.init() - } - - /// Constructor for stacked bar entries. - public init(values: [Double], xIndex: Int) - { - super.init(value: BarChartDataEntry.calcSum(values), xIndex: xIndex) - self.values = values - calcPosNegSum() - } - - /// Constructor for normal bars (not stacked). - public override init(value: Double, xIndex: Int) - { - super.init(value: value, xIndex: xIndex) - } - - /// Constructor for stacked bar entries. - public init(values: [Double], xIndex: Int, label: String) - { - super.init(value: BarChartDataEntry.calcSum(values), xIndex: xIndex, data: label) - self.values = values - } - - /// Constructor for normal bars (not stacked). - public override init(value: Double, xIndex: Int, data: AnyObject?) - { - super.init(value: value, xIndex: xIndex, data: data) - } - - public func getBelowSum(stackIndex :Int) -> Double - { - if (values == nil) - { - return 0 - } - - var remainder: Double = 0.0 - var index = values!.count - 1 - - while (index > stackIndex && index >= 0) - { - remainder += values![index] - index-- - } - - return remainder - } - - /// - returns: the sum of all negative values this entry (if stacked) contains. (this is a positive number) - public var negativeSum: Double - { - return _negativeSum - } - - /// - returns: the sum of all positive values this entry (if stacked) contains. - public var positiveSum: Double - { - return _positiveSum - } - - public func calcPosNegSum() - { - if _values == nil - { - _positiveSum = 0.0 - _negativeSum = 0.0 - return - } - - var sumNeg: Double = 0.0 - var sumPos: Double = 0.0 - - for f in _values! - { - if f < 0.0 - { - sumNeg += -f - } - else - { - sumPos += f - } - } - - _negativeSum = sumNeg - _positiveSum = sumPos - } - - // MARK: Accessors - - /// the values the stacked barchart holds - public var isStacked: Bool { return _values != nil } - - /// the values the stacked barchart holds - public var values: [Double]? - { - get { return self._values } - set - { - self.value = BarChartDataEntry.calcSum(newValue) - self._values = newValue - calcPosNegSum() - } - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! BarChartDataEntry - copy._values = _values - copy.value = value - copy._negativeSum = _negativeSum - return copy - } - - /// Calculates the sum across all values of the given stack. - /// - /// - parameter vals: - /// - returns: - private static func calcSum(vals: [Double]?) -> Double - { - if vals == nil - { - return 0.0 - } - - var sum = 0.0 - - for f in vals! - { - sum += f - } - - return sum - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataSet.swift deleted file mode 100644 index 7425d9a9..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarChartDataSet.swift +++ /dev/null @@ -1,188 +0,0 @@ -// -// BarChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class BarChartDataSet: BarLineScatterCandleBubbleChartDataSet -{ - /// space indicator between the bars in percentage of the whole width of one value (0.15 == 15% of bar width) - public var barSpace: CGFloat = 0.15 - - /// the maximum number of bars that are stacked upon each other, this value - /// is calculated from the Entries that are added to the DataSet - private var _stackSize = 1 - - /// the color used for drawing the bar-shadows. The bar shadows is a surface behind the bar that indicates the maximum value - public var barShadowColor = UIColor(red: 215.0/255.0, green: 215.0/255.0, blue: 215.0/255.0, alpha: 1.0) - - /// the alpha value (transparency) that is used for drawing the highlight indicator bar. min = 0.0 (fully transparent), max = 1.0 (fully opaque) - public var highLightAlpha = CGFloat(120.0 / 255.0) - - /// the overall entry count, including counting each stack-value individually - private var _entryCountStacks = 0 - - /// array of labels used to describe the different values of the stacked bars - public var stackLabels: [String] = ["Stack"] - - public required init() - { - super.init() - } - - public override init(yVals: [ChartDataEntry]?, label: String?) - { - super.init(yVals: yVals, label: label) - - self.highlightColor = UIColor.blackColor() - - self.calcStackSize(yVals as! [BarChartDataEntry]?) - self.calcEntryCountIncludingStacks(yVals as! [BarChartDataEntry]?) - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! BarChartDataSet - copy.barSpace = barSpace - copy._stackSize = _stackSize - copy.barShadowColor = barShadowColor - copy.highLightAlpha = highLightAlpha - copy._entryCountStacks = _entryCountStacks - copy.stackLabels = stackLabels - return copy - } - - /// Calculates the total number of entries this DataSet represents, including - /// stacks. All values belonging to a stack are calculated separately. - private func calcEntryCountIncludingStacks(yVals: [BarChartDataEntry]!) - { - _entryCountStacks = 0 - - for (var i = 0; i < yVals.count; i++) - { - let vals = yVals[i].values - - if (vals == nil) - { - _entryCountStacks++ - } - else - { - _entryCountStacks += vals!.count - } - } - } - - /// calculates the maximum stacksize that occurs in the Entries array of this DataSet - private func calcStackSize(yVals: [BarChartDataEntry]!) - { - for (var i = 0; i < yVals.count; i++) - { - if let vals = yVals[i].values - { - if vals.count > _stackSize - { - _stackSize = vals.count - } - } - } - } - - internal override func calcMinMax(start start : Int, end: Int) - { - let yValCount = _yVals.count - - if yValCount == 0 - { - return - } - - var endValue : Int - - if end == 0 || end >= yValCount - { - endValue = yValCount - 1 - } - else - { - endValue = end - } - - _lastStart = start - _lastEnd = endValue - - _yMin = DBL_MAX - _yMax = -DBL_MAX - - for (var i = start; i <= endValue; i++) - { - if let e = _yVals[i] as? BarChartDataEntry - { - if !e.value.isNaN - { - if e.values == nil - { - if e.value < _yMin - { - _yMin = e.value - } - - if e.value > _yMax - { - _yMax = e.value - } - } - else - { - if -e.negativeSum < _yMin - { - _yMin = -e.negativeSum - } - - if e.positiveSum > _yMax - { - _yMax = e.positiveSum - } - } - } - } - } - - if (_yMin == DBL_MAX) - { - _yMin = 0.0 - _yMax = 0.0 - } - } - - /// - returns: the maximum number of bars that can be stacked upon another in this DataSet. - public var stackSize: Int - { - return _stackSize - } - - /// - returns: true if this DataSet is stacked (stacksize > 1) or not. - public var isStacked: Bool - { - return _stackSize > 1 ? true : false - } - - /// - returns: the overall entry count, including counting each stack-value individually - public var entryCountStacks: Int - { - return _entryCountStacks - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartData.swift deleted file mode 100644 index 0b93b4ef..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartData.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// BarLineScatterCandleBubbleChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class BarLineScatterCandleBubbleChartData: ChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartDataSet.swift deleted file mode 100644 index 194a1b25..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BarLineScatterCandleBubbleChartDataSet.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// BarLineScatterCandleBubbleChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class BarLineScatterCandleBubbleChartDataSet: ChartDataSet -{ - public var highlightColor = UIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) - public var highlightLineWidth = CGFloat(0.5) - public var highlightLineDashPhase = CGFloat(0.0) - public var highlightLineDashLengths: [CGFloat]? - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! BarLineScatterCandleBubbleChartDataSet - copy.highlightColor = highlightColor - copy.highlightLineWidth = highlightLineWidth - copy.highlightLineDashPhase = highlightLineDashPhase - copy.highlightLineDashLengths = highlightLineDashLengths - return copy - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartData.swift deleted file mode 100644 index d7eef1ec..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartData.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// BubbleChartData.swift -// Charts -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class BubbleChartData: BarLineScatterCandleBubbleChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - /// Sets the width of the circle that surrounds the bubble when highlighted for all DataSet objects this data object contains - public func setHighlightCircleWidth(width: CGFloat) - { - for set in _dataSets as! [BubbleChartDataSet]! - { - set.highlightCircleWidth = width - } - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataEntry.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataEntry.swift deleted file mode 100644 index 06931d77..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataEntry.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// BubbleDataEntry.swift -// Charts -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class BubbleChartDataEntry: ChartDataEntry -{ - /// The size of the bubble. - public var size = CGFloat(0.0) - - public required init() - { - super.init() - } - - /// - parameter xIndex: The index on the x-axis. - /// - parameter val: The value on the y-axis. - /// - parameter size: The size of the bubble. - public init(xIndex: Int, value: Double, size: CGFloat) - { - super.init(value: value, xIndex: xIndex) - - self.size = size - } - - /// - parameter xIndex: The index on the x-axis. - /// - parameter val: The value on the y-axis. - /// - parameter size: The size of the bubble. - /// - parameter data: Spot for additional data this Entry represents. - public init(xIndex: Int, value: Double, size: CGFloat, data: AnyObject?) - { - super.init(value: value, xIndex: xIndex, data: data) - - self.size = size - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! BubbleChartDataEntry - copy.size = size - return copy - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataSet.swift deleted file mode 100644 index fcda134a..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/BubbleChartDataSet.swift +++ /dev/null @@ -1,125 +0,0 @@ -// -// BubbleChartDataSet.swift -// Charts -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class BubbleChartDataSet: BarLineScatterCandleBubbleChartDataSet -{ - internal var _xMax = Double(0.0) - internal var _xMin = Double(0.0) - internal var _maxSize = CGFloat(0.0) - - public var xMin: Double { return _xMin } - public var xMax: Double { return _xMax } - public var maxSize: CGFloat { return _maxSize } - - public func setColor(color: UIColor, alpha: CGFloat) - { - super.setColor(color.colorWithAlphaComponent(alpha)) - } - - internal override func calcMinMax(start start: Int, end: Int) - { - if (yVals.count == 0) - { - return - } - - let entries = yVals as! [BubbleChartDataEntry] - - // need chart width to guess this properly - - var endValue : Int - - if end == 0 - { - endValue = entries.count - 1 - } - else - { - endValue = end - } - - _lastStart = start - _lastEnd = end - - _yMin = yMin(entries[start]) - _yMax = yMax(entries[start]) - - for (var i = start; i <= endValue; i++) - { - let entry = entries[i] - - let ymin = yMin(entry) - let ymax = yMax(entry) - - if (ymin < _yMin) - { - _yMin = ymin - } - - if (ymax > _yMax) - { - _yMax = ymax - } - - let xmin = xMin(entry) - let xmax = xMax(entry) - - if (xmin < _xMin) - { - _xMin = xmin - } - - if (xmax > _xMax) - { - _xMax = xmax - } - - let size = largestSize(entry) - - if (size > _maxSize) - { - _maxSize = size - } - } - } - - /// Sets/gets the width of the circle that surrounds the bubble when highlighted - public var highlightCircleWidth: CGFloat = 2.5 - - private func yMin(entry: BubbleChartDataEntry) -> Double - { - return entry.value - } - - private func yMax(entry: BubbleChartDataEntry) -> Double - { - return entry.value - } - - private func xMin(entry: BubbleChartDataEntry) -> Double - { - return Double(entry.xIndex) - } - - private func xMax(entry: BubbleChartDataEntry) -> Double - { - return Double(entry.xIndex) - } - - private func largestSize(entry: BubbleChartDataEntry) -> CGFloat - { - return entry.size - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartData.swift deleted file mode 100644 index 088289a5..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartData.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// CandleChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class CandleChartData: BarLineScatterCandleBubbleChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataEntry.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataEntry.swift deleted file mode 100644 index a38d58ef..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataEntry.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// CandleChartDataEntry.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class CandleChartDataEntry: ChartDataEntry -{ - /// shadow-high value - public var high = Double(0.0) - - /// shadow-low value - public var low = Double(0.0) - - /// close value - public var close = Double(0.0) - - /// open value - public var open = Double(0.0) - - public required init() - { - super.init() - } - - public init(xIndex: Int, shadowH: Double, shadowL: Double, open: Double, close: Double) - { - super.init(value: (shadowH + shadowL) / 2.0, xIndex: xIndex) - - self.high = shadowH - self.low = shadowL - self.open = open - self.close = close - } - - public init(xIndex: Int, shadowH: Double, shadowL: Double, open: Double, close: Double, data: AnyObject?) - { - super.init(value: (shadowH + shadowL) / 2.0, xIndex: xIndex, data: data) - - self.high = shadowH - self.low = shadowL - self.open = open - self.close = close - } - - /// - returns: the overall range (difference) between shadow-high and shadow-low. - public var shadowRange: Double - { - return abs(high - low) - } - - /// - returns: the body size (difference between open and close). - public var bodyRange: Double - { - return abs(open - close) - } - - /// the center value of the candle. (Middle value between high and low) - public override var value: Double - { - get - { - return super.value - } - set - { - super.value = (high + low) / 2.0 - } - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! CandleChartDataEntry - copy.high = high - copy.high = low - copy.high = open - copy.high = close - return copy - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataSet.swift deleted file mode 100644 index 49413f8f..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/CandleChartDataSet.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// CandleChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class CandleChartDataSet: LineScatterCandleChartDataSet -{ - /// the width of the candle-shadow-line in pixels. - /// - /// **default**: 3.0 - public var shadowWidth = CGFloat(1.5) - - /// the space between the candle entries - /// - /// **default**: 0.1 (10%) - private var _bodySpace = CGFloat(0.1) - - /// the color of the shadow line - public var shadowColor: UIColor? - - /// use candle color for the shadow - public var shadowColorSameAsCandle = false - - /// color for open <= close - public var decreasingColor: UIColor? - - /// color for open > close - public var increasingColor: UIColor? - - /// Are decreasing values drawn as filled? - public var decreasingFilled = false - - /// Are increasing values drawn as filled? - public var increasingFilled = true - - public required init() - { - super.init() - } - - public override init(yVals: [ChartDataEntry]?, label: String?) - { - super.init(yVals: yVals, label: label) - } - - internal override func calcMinMax(start start: Int, end: Int) - { - if (yVals.count == 0) - { - return - } - - var entries = yVals as! [CandleChartDataEntry] - - var endValue : Int - - if end == 0 || end >= entries.count - { - endValue = entries.count - 1 - } - else - { - endValue = end - } - - _lastStart = start - _lastEnd = end - - _yMin = entries[start].low - _yMax = entries[start].high - - for (var i = start + 1; i <= endValue; i++) - { - let e = entries[i] - - if (e.low < _yMin) - { - _yMin = e.low - } - - if (e.high > _yMax) - { - _yMax = e.high - } - } - } - - /// the space that is left out on the left and right side of each candle, - /// **default**: 0.1 (10%), max 0.45, min 0.0 - public var bodySpace: CGFloat - { - set - { - if (newValue < 0.0) - { - _bodySpace = 0.0 - } - else if (newValue > 0.45) - { - _bodySpace = 0.45 - } - else - { - _bodySpace = newValue - } - } - get - { - return _bodySpace - } - } - - /// Is the shadow color same as the candle color? - public var isShadowColorSameAsCandle: Bool { return shadowColorSameAsCandle } - - /// Are increasing values drawn as filled? - public var isIncreasingFilled: Bool { return increasingFilled; } - - /// Are decreasing values drawn as filled? - public var isDecreasingFilled: Bool { return decreasingFilled; } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartData.swift deleted file mode 100644 index a2d0b984..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartData.swift +++ /dev/null @@ -1,949 +0,0 @@ -// -// ChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartData: NSObject -{ - internal var _yMax = Double(0.0) - internal var _yMin = Double(0.0) - internal var _leftAxisMax = Double(0.0) - internal var _leftAxisMin = Double(0.0) - internal var _rightAxisMax = Double(0.0) - internal var _rightAxisMin = Double(0.0) - private var _yValueSum = Double(0.0) - private var _yValCount = Int(0) - - /// the last start value used for calcMinMax - internal var _lastStart: Int = 0 - - /// the last end value used for calcMinMax - internal var _lastEnd: Int = 0 - - /// the average length (in characters) across all x-value strings - private var _xValAverageLength = Double(0.0) - - internal var _xVals: [String?]! - internal var _dataSets: [ChartDataSet]! - - public override init() - { - super.init() - - _xVals = [String?]() - _dataSets = [ChartDataSet]() - } - - public init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init() - - _xVals = xVals == nil ? [String?]() : xVals - _dataSets = dataSets == nil ? [ChartDataSet]() : dataSets - - self.initialize(_dataSets) - } - - public init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init() - - _xVals = xVals == nil ? [String?]() : ChartUtils.bridgedObjCGetStringArray(objc: xVals!) - _dataSets = dataSets == nil ? [ChartDataSet]() : dataSets - - self.initialize(_dataSets) - } - - public convenience init(xVals: [String?]?) - { - self.init(xVals: xVals, dataSets: [ChartDataSet]()) - } - - public convenience init(xVals: [NSObject]?) - { - self.init(xVals: xVals, dataSets: [ChartDataSet]()) - } - - public convenience init(xVals: [String?]?, dataSet: ChartDataSet?) - { - self.init(xVals: xVals, dataSets: dataSet === nil ? nil : [dataSet!]) - } - - public convenience init(xVals: [NSObject]?, dataSet: ChartDataSet?) - { - self.init(xVals: xVals, dataSets: dataSet === nil ? nil : [dataSet!]) - } - - internal func initialize(dataSets: [ChartDataSet]) - { - checkIsLegal(dataSets) - - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - calcYValueCount() - - calcXValAverageLength() - } - - // calculates the average length (in characters) across all x-value strings - internal func calcXValAverageLength() - { - if (_xVals.count == 0) - { - _xValAverageLength = 1 - return - } - - var sum = 1 - - for (var i = 0; i < _xVals.count; i++) - { - sum += _xVals[i] == nil ? 0 : (_xVals[i]!).characters.count - } - - _xValAverageLength = Double(sum) / Double(_xVals.count) - } - - // Checks if the combination of x-values array and DataSet array is legal or not. - // :param: dataSets - internal func checkIsLegal(dataSets: [ChartDataSet]!) - { - if (dataSets == nil) - { - return - } - - if self is ScatterChartData - { // In scatter chart it makes sense to have more than one y-value value for an x-index - return - } - - for (var i = 0; i < dataSets.count; i++) - { - if (dataSets[i].yVals.count > _xVals.count) - { - print("One or more of the DataSet Entry arrays are longer than the x-values array of this Data object.", terminator: "\n") - return - } - } - } - - public func notifyDataChanged() - { - initialize(_dataSets) - } - - /// calc minimum and maximum y value over all datasets - internal func calcMinMax(start start: Int, end: Int) - { - - if (_dataSets == nil || _dataSets.count < 1) - { - _yMax = 0.0 - _yMin = 0.0 - } - else - { - _lastStart = start - _lastEnd = end - - _yMin = DBL_MAX - _yMax = -DBL_MAX - - for (var i = 0; i < _dataSets.count; i++) - { - _dataSets[i].calcMinMax(start: start, end: end) - - if (_dataSets[i].yMin < _yMin) - { - _yMin = _dataSets[i].yMin - } - - if (_dataSets[i].yMax > _yMax) - { - _yMax = _dataSets[i].yMax - } - } - - if (_yMin == DBL_MAX) - { - _yMin = 0.0 - _yMax = 0.0 - } - - // left axis - let firstLeft = getFirstLeft() - - if (firstLeft !== nil) - { - _leftAxisMax = firstLeft!.yMax - _leftAxisMin = firstLeft!.yMin - - for dataSet in _dataSets - { - if (dataSet.axisDependency == .Left) - { - if (dataSet.yMin < _leftAxisMin) - { - _leftAxisMin = dataSet.yMin - } - - if (dataSet.yMax > _leftAxisMax) - { - _leftAxisMax = dataSet.yMax - } - } - } - } - - // right axis - let firstRight = getFirstRight() - - if (firstRight !== nil) - { - _rightAxisMax = firstRight!.yMax - _rightAxisMin = firstRight!.yMin - - for dataSet in _dataSets - { - if (dataSet.axisDependency == .Right) - { - if (dataSet.yMin < _rightAxisMin) - { - _rightAxisMin = dataSet.yMin - } - - if (dataSet.yMax > _rightAxisMax) - { - _rightAxisMax = dataSet.yMax - } - } - } - } - - // in case there is only one axis, adjust the second axis - handleEmptyAxis(firstLeft, firstRight: firstRight) - } - } - - /// calculates the sum of all y-values in all datasets - internal func calcYValueSum() - { - _yValueSum = 0 - - if (_dataSets == nil) - { - return - } - - for (var i = 0; i < _dataSets.count; i++) - { - _yValueSum += fabs(_dataSets[i].yValueSum) - } - } - - /// Calculates the total number of y-values across all ChartDataSets the ChartData represents. - internal func calcYValueCount() - { - _yValCount = 0 - - if (_dataSets == nil) - { - return - } - - var count = 0 - - for (var i = 0; i < _dataSets.count; i++) - { - count += _dataSets[i].entryCount - } - - _yValCount = count - } - - /// - returns: the number of LineDataSets this object contains - public var dataSetCount: Int - { - if (_dataSets == nil) - { - return 0 - } - return _dataSets.count - } - - /// - returns: the average value across all entries in this Data object (all entries from the DataSets this data object holds) - public var average: Double - { - return yValueSum / Double(yValCount) - } - - /// - returns: the smallest y-value the data object contains. - public var yMin: Double - { - return _yMin - } - - public func getYMin() -> Double - { - return _yMin - } - - public func getYMin(axis: ChartYAxis.AxisDependency) -> Double - { - if (axis == .Left) - { - return _leftAxisMin - } - else - { - return _rightAxisMin - } - } - - /// - returns: the greatest y-value the data object contains. - public var yMax: Double - { - return _yMax - } - - public func getYMax() -> Double - { - return _yMax - } - - public func getYMax(axis: ChartYAxis.AxisDependency) -> Double - { - if (axis == .Left) - { - return _leftAxisMax - } - else - { - return _rightAxisMax - } - } - - /// - returns: the average length (in characters) across all values in the x-vals array - public var xValAverageLength: Double - { - return _xValAverageLength - } - - /// - returns: the total y-value sum across all DataSet objects the this object represents. - public var yValueSum: Double - { - return _yValueSum - } - - /// - returns: the total number of y-values across all DataSet objects the this object represents. - public var yValCount: Int - { - return _yValCount - } - - /// - returns: the x-values the chart represents - public var xVals: [String?] - { - return _xVals - } - - ///Adds a new x-value to the chart data. - public func addXValue(xVal: String?) - { - _xVals.append(xVal) - } - - /// Removes the x-value at the specified index. - public func removeXValue(index: Int) - { - _xVals.removeAtIndex(index) - } - - /// - returns: the array of ChartDataSets this object holds. - public var dataSets: [ChartDataSet] - { - get - { - return _dataSets - } - set - { - _dataSets = newValue - } - } - - /// Retrieve the index of a ChartDataSet with a specific label from the ChartData. Search can be case sensitive or not. - /// - /// **IMPORTANT: This method does calculations at runtime, do not over-use in performance critical situations.** - /// - /// - parameter dataSets: the DataSet array to search - /// - parameter type: - /// - parameter ignorecase: if true, the search is not case-sensitive - /// - returns: the index of the DataSet Object with the given label. Sensitive or not. - internal func getDataSetIndexByLabel(label: String, ignorecase: Bool) -> Int - { - if (ignorecase) - { - for (var i = 0; i < dataSets.count; i++) - { - if (dataSets[i].label == nil) - { - continue - } - if (label.caseInsensitiveCompare(dataSets[i].label!) == NSComparisonResult.OrderedSame) - { - return i - } - } - } - else - { - for (var i = 0; i < dataSets.count; i++) - { - if (label == dataSets[i].label) - { - return i - } - } - } - - return -1 - } - - /// - returns: the total number of x-values this ChartData object represents (the size of the x-values array) - public var xValCount: Int - { - return _xVals.count - } - - /// - returns: the labels of all DataSets as a string array. - internal func dataSetLabels() -> [String] - { - var types = [String]() - - for (var i = 0; i < _dataSets.count; i++) - { - if (dataSets[i].label == nil) - { - continue - } - - types[i] = _dataSets[i].label! - } - - return types - } - - /// Get the Entry for a corresponding highlight object - /// - /// - parameter highlight: - /// - returns: the entry that is highlighted - public func getEntryForHighlight(highlight: ChartHighlight) -> ChartDataEntry? - { - if highlight.dataSetIndex >= dataSets.count - { - return nil - } - else - { - return _dataSets[highlight.dataSetIndex].entryForXIndex(highlight.xIndex) - } - } - - /// **IMPORTANT: This method does calculations at runtime. Use with care in performance critical situations.** - /// - /// - parameter label: - /// - parameter ignorecase: - /// - returns: the DataSet Object with the given label. Sensitive or not. - public func getDataSetByLabel(label: String, ignorecase: Bool) -> ChartDataSet? - { - let index = getDataSetIndexByLabel(label, ignorecase: ignorecase) - - if (index < 0 || index >= _dataSets.count) - { - return nil - } - else - { - return _dataSets[index] - } - } - - public func getDataSetByIndex(index: Int) -> ChartDataSet! - { - if (_dataSets == nil || index < 0 || index >= _dataSets.count) - { - return nil - } - - return _dataSets[index] - } - - public func addDataSet(d: ChartDataSet!) - { - if (_dataSets == nil) - { - return - } - - _yValCount += d.entryCount - _yValueSum += d.yValueSum - - if (_dataSets.count == 0) - { - _yMax = d.yMax - _yMin = d.yMin - - if (d.axisDependency == .Left) - { - _leftAxisMax = d.yMax - _leftAxisMin = d.yMin - } - else - { - _rightAxisMax = d.yMax - _rightAxisMin = d.yMin - } - } - else - { - if (_yMax < d.yMax) - { - _yMax = d.yMax - } - if (_yMin > d.yMin) - { - _yMin = d.yMin - } - - if (d.axisDependency == .Left) - { - if (_leftAxisMax < d.yMax) - { - _leftAxisMax = d.yMax - } - if (_leftAxisMin > d.yMin) - { - _leftAxisMin = d.yMin - } - } - else - { - if (_rightAxisMax < d.yMax) - { - _rightAxisMax = d.yMax - } - if (_rightAxisMin > d.yMin) - { - _rightAxisMin = d.yMin - } - } - } - - _dataSets.append(d) - - handleEmptyAxis(getFirstLeft(), firstRight: getFirstRight()) - } - - public func handleEmptyAxis(firstLeft: ChartDataSet?, firstRight: ChartDataSet?) - { - // in case there is only one axis, adjust the second axis - if (firstLeft === nil) - { - _leftAxisMax = _rightAxisMax - _leftAxisMin = _rightAxisMin - } - else if (firstRight === nil) - { - _rightAxisMax = _leftAxisMax - _rightAxisMin = _leftAxisMin - } - } - - /// Removes the given DataSet from this data object. - /// Also recalculates all minimum and maximum values. - /// - /// - returns: true if a DataSet was removed, false if no DataSet could be removed. - public func removeDataSet(dataSet: ChartDataSet!) -> Bool - { - if (_dataSets == nil || dataSet === nil) - { - return false - } - - for (var i = 0; i < _dataSets.count; i++) - { - if (_dataSets[i] === dataSet) - { - return removeDataSetByIndex(i) - } - } - - return false - } - - /// Removes the DataSet at the given index in the DataSet array from the data object. - /// Also recalculates all minimum and maximum values. - /// - /// - returns: true if a DataSet was removed, false if no DataSet could be removed. - public func removeDataSetByIndex(index: Int) -> Bool - { - if (_dataSets == nil || index >= _dataSets.count || index < 0) - { - return false - } - - let d = _dataSets.removeAtIndex(index) - _yValCount -= d.entryCount - _yValueSum -= d.yValueSum - - calcMinMax(start: _lastStart, end: _lastEnd) - - return true - } - - /// Adds an Entry to the DataSet at the specified index. Entries are added to the end of the list. - public func addEntry(e: ChartDataEntry, dataSetIndex: Int) - { - if (_dataSets != nil && _dataSets.count > dataSetIndex && dataSetIndex >= 0) - { - let val = e.value - let set = _dataSets[dataSetIndex] - - if (_yValCount == 0) - { - _yMin = val - _yMax = val - - if (set.axisDependency == .Left) - { - _leftAxisMax = e.value - _leftAxisMin = e.value - } - else - { - _rightAxisMax = e.value - _rightAxisMin = e.value - } - } - else - { - if (_yMax < val) - { - _yMax = val - } - if (_yMin > val) - { - _yMin = val - } - - if (set.axisDependency == .Left) - { - if (_leftAxisMax < e.value) - { - _leftAxisMax = e.value - } - if (_leftAxisMin > e.value) - { - _leftAxisMin = e.value - } - } - else - { - if (_rightAxisMax < e.value) - { - _rightAxisMax = e.value - } - if (_rightAxisMin > e.value) - { - _rightAxisMin = e.value - } - } - } - - _yValCount += 1 - _yValueSum += val - - handleEmptyAxis(getFirstLeft(), firstRight: getFirstRight()) - - set.addEntry(e) - } - else - { - print("ChartData.addEntry() - dataSetIndex our of range.", terminator: "\n") - } - } - - /// Removes the given Entry object from the DataSet at the specified index. - public func removeEntry(entry: ChartDataEntry!, dataSetIndex: Int) -> Bool - { - // entry null, outofbounds - if (entry === nil || dataSetIndex >= _dataSets.count) - { - return false - } - - // remove the entry from the dataset - let removed = _dataSets[dataSetIndex].removeEntry(xIndex: entry.xIndex) - - if (removed) - { - let val = entry.value - - _yValCount -= 1 - _yValueSum -= val - - calcMinMax(start: _lastStart, end: _lastEnd) - } - - return removed - } - - /// Removes the Entry object at the given xIndex from the ChartDataSet at the - /// specified index. - /// - returns: true if an entry was removed, false if no Entry was found that meets the specified requirements. - public func removeEntryByXIndex(xIndex: Int, dataSetIndex: Int) -> Bool - { - if (dataSetIndex >= _dataSets.count) - { - return false - } - - let entry = _dataSets[dataSetIndex].entryForXIndex(xIndex) - - if (entry?.xIndex != xIndex) - { - return false - } - - return removeEntry(entry, dataSetIndex: dataSetIndex) - } - - /// - returns: the DataSet that contains the provided Entry, or null, if no DataSet contains this entry. - public func getDataSetForEntry(e: ChartDataEntry!) -> ChartDataSet? - { - if (e == nil) - { - return nil - } - - for (var i = 0; i < _dataSets.count; i++) - { - let set = _dataSets[i] - - for (var j = 0; j < set.entryCount; j++) - { - if (e === set.entryForXIndex(e.xIndex)) - { - return set - } - } - } - - return nil - } - - /// - returns: the index of the provided DataSet inside the DataSets array of this data object. -1 if the DataSet was not found. - public func indexOfDataSet(dataSet: ChartDataSet) -> Int - { - for (var i = 0; i < _dataSets.count; i++) - { - if (_dataSets[i] === dataSet) - { - return i - } - } - - return -1 - } - - /// - returns: the first DataSet from the datasets-array that has it's dependency on the left axis. Returns null if no DataSet with left dependency could be found. - public func getFirstLeft() -> ChartDataSet? - { - for dataSet in _dataSets - { - if (dataSet.axisDependency == .Left) - { - return dataSet - } - } - - return nil - } - - /// - returns: the first DataSet from the datasets-array that has it's dependency on the right axis. Returns null if no DataSet with right dependency could be found. - public func getFirstRight() -> ChartDataSet? - { - for dataSet in _dataSets - { - if (dataSet.axisDependency == .Right) - { - return dataSet - } - } - - return nil - } - - /// - returns: all colors used across all DataSet objects this object represents. - public func getColors() -> [UIColor]? - { - if (_dataSets == nil) - { - return nil - } - - var clrcnt = 0 - - for (var i = 0; i < _dataSets.count; i++) - { - clrcnt += _dataSets[i].colors.count - } - - var colors = [UIColor]() - - for (var i = 0; i < _dataSets.count; i++) - { - let clrs = _dataSets[i].colors - - for clr in clrs - { - colors.append(clr) - } - } - - return colors - } - - /// Generates an x-values array filled with numbers in range specified by the parameters. Can be used for convenience. - public func generateXVals(from: Int, to: Int) -> [String] - { - var xvals = [String]() - - for (var i = from; i < to; i++) - { - xvals.append(String(i)) - } - - return xvals - } - - /// Sets a custom ValueFormatter for all DataSets this data object contains. - public func setValueFormatter(formatter: NSNumberFormatter!) - { - for set in dataSets - { - set.valueFormatter = formatter - } - } - - /// Sets the color of the value-text (color in which the value-labels are drawn) for all DataSets this data object contains. - public func setValueTextColor(color: UIColor!) - { - for set in dataSets - { - set.valueTextColor = color ?? set.valueTextColor - } - } - - /// Sets the font for all value-labels for all DataSets this data object contains. - public func setValueFont(font: UIFont!) - { - for set in dataSets - { - set.valueFont = font ?? set.valueFont - } - } - - /// Enables / disables drawing values (value-text) for all DataSets this data object contains. - public func setDrawValues(enabled: Bool) - { - for set in dataSets - { - set.drawValuesEnabled = enabled - } - } - - /// Enables / disables highlighting values for all DataSets this data object contains. - public var highlightEnabled: Bool - { - get - { - for set in dataSets - { - if (!set.highlightEnabled) - { - return false - } - } - - return true - } - set - { - for set in dataSets - { - set.highlightEnabled = newValue - } - } - } - - /// if true, value highlightning is enabled - public var isHighlightEnabled: Bool { return highlightEnabled } - - /// Clears this data object from all DataSets and removes all Entries. - /// Don't forget to invalidate the chart after this. - public func clearValues() - { - dataSets.removeAll(keepCapacity: false) - notifyDataChanged() - } - - /// Checks if this data object contains the specified Entry. - /// - returns: true if so, false if not. - public func contains(entry entry: ChartDataEntry) -> Bool - { - for set in dataSets - { - if (set.contains(entry)) - { - return true - } - } - - return false - } - - /// Checks if this data object contains the specified DataSet. - /// - returns: true if so, false if not. - public func contains(dataSet dataSet: ChartDataSet) -> Bool - { - for set in dataSets - { - if (set.isEqual(dataSet)) - { - return true - } - } - - return false - } - - /// MARK: - ObjC compatibility - - /// - returns: the average length (in characters) across all values in the x-vals array - public var xValsObjc: [NSObject] { return ChartUtils.bridgedObjCGetStringArray(swift: _xVals); } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataEntry.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataEntry.swift deleted file mode 100644 index 84a57b8a..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataEntry.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// ChartDataEntry.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class ChartDataEntry: NSObject -{ - /// the actual value (y axis) - public var value = Double(0.0) - - /// the index on the x-axis - public var xIndex = Int(0) - - /// optional spot for additional data this Entry represents - public var data: AnyObject? - - public override required init() - { - super.init() - } - - public init(value: Double, xIndex: Int) - { - super.init() - - self.value = value - self.xIndex = xIndex - } - - public init(value: Double, xIndex: Int, data: AnyObject?) - { - super.init() - - self.value = value - self.xIndex = xIndex - self.data = data - } - - // MARK: NSObject - - public override func isEqual(object: AnyObject?) -> Bool - { - if (object === nil) - { - return false - } - - if (!object!.isKindOfClass(self.dynamicType)) - { - return false - } - - if (object!.data !== data && !object!.data.isEqual(self.data)) - { - return false - } - - if (object!.xIndex != xIndex) - { - return false - } - - if (fabs(object!.value - value) > 0.00001) - { - return false - } - - return true - } - - // MARK: NSObject - - public override var description: String - { - return "ChartDataEntry, xIndex: \(xIndex), value \(value)" - } - - // MARK: NSCopying - - public func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = self.dynamicType.init() - - copy.value = value - copy.xIndex = xIndex - copy.data = data - - return copy - } -} - -public func ==(lhs: ChartDataEntry, rhs: ChartDataEntry) -> Bool -{ - if (lhs === rhs) - { - return true - } - - if (!lhs.isKindOfClass(rhs.dynamicType)) - { - return false - } - - if (lhs.data !== rhs.data && !lhs.data!.isEqual(rhs.data)) - { - return false - } - - if (lhs.xIndex != rhs.xIndex) - { - return false - } - - if (fabs(lhs.value - rhs.value) > 0.00001) - { - return false - } - - return true -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataSet.swift deleted file mode 100644 index 41e0ba9a..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/ChartDataSet.swift +++ /dev/null @@ -1,550 +0,0 @@ -// -// ChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartDataSet: NSObject -{ - public var colors = [UIColor]() - internal var _yVals: [ChartDataEntry]! - internal var _yMax = Double(0.0) - internal var _yMin = Double(0.0) - internal var _yValueSum = Double(0.0) - - /// the last start value used for calcMinMax - internal var _lastStart: Int = 0 - - /// the last end value used for calcMinMax - internal var _lastEnd: Int = 0 - - public var label: String? = "DataSet" - public var visible = true - public var drawValuesEnabled = true - - /// the color used for the value-text - public var valueTextColor: UIColor = UIColor.blackColor() - - /// the font for the value-text labels - public var valueFont: UIFont = UIFont.systemFontOfSize(7.0) - - /// the formatter used to customly format the values - public var valueFormatter: NSNumberFormatter? - - /// the axis this DataSet should be plotted against. - public var axisDependency = ChartYAxis.AxisDependency.Left - - public var yVals: [ChartDataEntry] { return _yVals } - public var yValueSum: Double { return _yValueSum } - public var yMin: Double { return _yMin } - public var yMax: Double { return _yMax } - - /// if true, value highlighting is enabled - public var highlightEnabled = true - - /// - returns: true if value highlighting is enabled for this dataset - public var isHighlightEnabled: Bool { return highlightEnabled } - - public override required init() - { - super.init() - } - - public init(yVals: [ChartDataEntry]?, label: String?) - { - super.init() - - self.label = label - _yVals = yVals == nil ? [ChartDataEntry]() : yVals - - // default color - colors.append(UIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - - self.calcMinMax(start: _lastStart, end: _lastEnd) - self.calcYValueSum() - } - - public convenience init(yVals: [ChartDataEntry]?) - { - self.init(yVals: yVals, label: "DataSet") - } - - /// Use this method to tell the data set that the underlying data has changed - public func notifyDataSetChanged() - { - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - } - - internal func calcMinMax(start start : Int, end: Int) - { - let yValCount = _yVals.count - - if yValCount == 0 - { - return - } - - var endValue : Int - - if end == 0 || end >= yValCount - { - endValue = yValCount - 1 - } - else - { - endValue = end - } - - _lastStart = start - _lastEnd = endValue - - _yMin = DBL_MAX - _yMax = -DBL_MAX - - for (var i = start; i <= endValue; i++) - { - let e = _yVals[i] - - if (!e.value.isNaN) - { - if (e.value < _yMin) - { - _yMin = e.value - } - if (e.value > _yMax) - { - _yMax = e.value - } - } - } - - if (_yMin == DBL_MAX) - { - _yMin = 0.0 - _yMax = 0.0 - } - } - - private func calcYValueSum() - { - _yValueSum = 0 - - for var i = 0; i < _yVals.count; i++ - { - _yValueSum += fabs(_yVals[i].value) - } - } - - /// - returns: the average value across all entries in this DataSet. - public var average: Double - { - return yValueSum / Double(valueCount) - } - - public var entryCount: Int { return _yVals!.count; } - - public func yValForXIndex(x: Int) -> Double - { - let e = self.entryForXIndex(x) - - if (e !== nil && e!.xIndex == x) { return e!.value } - else { return Double.NaN } - } - - /// - returns: the first Entry object found at the given xIndex with binary search. - /// If the no Entry at the specifed x-index is found, this method returns the Entry at the closest x-index. - /// nil if no Entry object at that index. - public func entryForXIndex(x: Int) -> ChartDataEntry? - { - let index = self.entryIndex(xIndex: x) - if (index > -1) - { - return _yVals[index] - } - return nil - } - - public func entriesForXIndex(x: Int) -> [ChartDataEntry] - { - var entries = [ChartDataEntry]() - - var low = 0 - var high = _yVals.count - 1 - - while (low <= high) - { - var m = Int((high + low) / 2) - var entry = _yVals[m] - - if (x == entry.xIndex) - { - while (m > 0 && _yVals[m - 1].xIndex == x) - { - m-- - } - - high = _yVals.count - for (; m < high; m++) - { - entry = _yVals[m] - if (entry.xIndex == x) - { - entries.append(entry) - } - else - { - break - } - } - } - - if (x > _yVals[m].xIndex) - { - low = m + 1 - } - else - { - high = m - 1 - } - } - - return entries - } - - public func entryIndex(xIndex x: Int) -> Int - { - var low = 0 - var high = _yVals.count - 1 - var closest = -1 - - while (low <= high) - { - var m = (high + low) / 2 - let entry = _yVals[m] - - if (x == entry.xIndex) - { - while (m > 0 && _yVals[m - 1].xIndex == x) - { - m-- - } - - return m - } - - if (x > entry.xIndex) - { - low = m + 1 - } - else - { - high = m - 1 - } - - closest = m - } - - return closest - } - - public func entryIndex(entry e: ChartDataEntry, isEqual: Bool) -> Int - { - if (isEqual) - { - for (var i = 0; i < _yVals.count; i++) - { - if (_yVals[i].isEqual(e)) - { - return i - } - } - } - else - { - for (var i = 0; i < _yVals.count; i++) - { - if (_yVals[i] === e) - { - return i - } - } - } - - return -1 - } - - /// - returns: the number of entries this DataSet holds. - public var valueCount: Int { return _yVals.count; } - - /// Adds an Entry to the DataSet dynamically. - /// Entries are added to the end of the list. - /// This will also recalculate the current minimum and maximum values of the DataSet and the value-sum. - /// - parameter e: the entry to add - public func addEntry(e: ChartDataEntry) - { - let val = e.value - - if (_yVals == nil) - { - _yVals = [ChartDataEntry]() - } - - if (_yVals.count == 0) - { - _yMax = val - _yMin = val - } - else - { - if (_yMax < val) - { - _yMax = val - } - if (_yMin > val) - { - _yMin = val - } - } - - _yValueSum += val - - _yVals.append(e) - } - - /// Adds an Entry to the DataSet dynamically. - /// Entries are added to their appropriate index respective to it's x-index. - /// This will also recalculate the current minimum and maximum values of the DataSet and the value-sum. - /// - parameter e: the entry to add - public func addEntryOrdered(e: ChartDataEntry) - { - let val = e.value - - if (_yVals == nil) - { - _yVals = [ChartDataEntry]() - } - - if (_yVals.count == 0) - { - _yMax = val - _yMin = val - } - else - { - if (_yMax < val) - { - _yMax = val - } - if (_yMin > val) - { - _yMin = val - } - } - - _yValueSum += val - - if _yVals.last?.xIndex > e.xIndex - { - var closestIndex = entryIndex(xIndex: e.xIndex) - if _yVals[closestIndex].xIndex < e.xIndex - { - closestIndex++ - } - _yVals.insert(e, atIndex: closestIndex) - return; - } - - _yVals.append(e) - } - - public func removeEntry(entry: ChartDataEntry) -> Bool - { - var removed = false - - for (var i = 0; i < _yVals.count; i++) - { - if (_yVals[i] === entry) - { - _yVals.removeAtIndex(i) - removed = true - break - } - } - - if (removed) - { - _yValueSum -= entry.value - calcMinMax(start: _lastStart, end: _lastEnd) - } - - return removed - } - - public func removeEntry(xIndex xIndex: Int) -> Bool - { - let index = self.entryIndex(xIndex: xIndex) - if (index > -1) - { - let e = _yVals.removeAtIndex(index) - - _yValueSum -= e.value - calcMinMax(start: _lastStart, end: _lastEnd) - - return true - } - - return false - } - - /// Removes the first Entry (at index 0) of this DataSet from the entries array. - /// - /// - returns: true if successful, false if not. - public func removeFirst() -> Bool - { - let entry: ChartDataEntry? = _yVals.isEmpty ? nil : _yVals.removeFirst() - - let removed = entry != nil - - if (removed) - { - - let val = entry!.value - _yValueSum -= val - - calcMinMax(start: _lastStart, end: _lastEnd) - } - - return removed; - } - - /// Removes the last Entry (at index size-1) of this DataSet from the entries array. - /// - /// - returns: true if successful, false if not. - public func removeLast() -> Bool - { - let entry: ChartDataEntry? = _yVals.isEmpty ? nil : _yVals.removeLast() - - let removed = entry != nil - - if (removed) - { - - let val = entry!.value - _yValueSum -= val - - calcMinMax(start: _lastStart, end: _lastEnd) - } - - return removed; - } - - public func resetColors() - { - colors.removeAll(keepCapacity: false) - } - - public func addColor(color: UIColor) - { - colors.append(color) - } - - public func setColor(color: UIColor) - { - colors.removeAll(keepCapacity: false) - colors.append(color) - } - - public func colorAt(var index: Int) -> UIColor - { - if (index < 0) - { - index = 0 - } - return colors[index % colors.count] - } - - public var isVisible: Bool - { - return visible - } - - public var isDrawValuesEnabled: Bool - { - return drawValuesEnabled - } - - /// Checks if this DataSet contains the specified Entry. - /// - returns: true if contains the entry, false if not. - public func contains(e: ChartDataEntry) -> Bool - { - for entry in _yVals - { - if (entry.isEqual(e)) - { - return true - } - } - - return false - } - - /// Removes all values from this DataSet and recalculates min and max value. - public func clear() - { - _yVals.removeAll(keepCapacity: true) - _lastStart = 0 - _lastEnd = 0 - notifyDataSetChanged() - } - - // MARK: NSObject - - public override var description: String - { - return String(format: "ChartDataSet, label: %@, %i entries", arguments: [self.label ?? "", _yVals.count]) - } - - public override var debugDescription: String - { - var desc = description + ":" - - for (var i = 0; i < _yVals.count; i++) - { - desc += "\n" + _yVals[i].description - } - - return desc - } - - // MARK: NSCopying - - public func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = self.dynamicType.init() - - copy.colors = colors - copy._yVals = _yVals - copy._yMax = _yMax - copy._yMin = _yMin - copy._yValueSum = _yValueSum - copy._lastStart = _lastStart - copy._lastEnd = _lastEnd - copy.label = label - - return copy - } -} - - diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/CombinedChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/CombinedChartData.swift deleted file mode 100644 index 1c754cbf..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/CombinedChartData.swift +++ /dev/null @@ -1,213 +0,0 @@ -// -// CombinedChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class CombinedChartData: BarLineScatterCandleBubbleChartData -{ - private var _lineData: LineChartData! - private var _barData: BarChartData! - private var _scatterData: ScatterChartData! - private var _candleData: CandleChartData! - private var _bubbleData: BubbleChartData! - - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public var lineData: LineChartData! - { - get - { - return _lineData - } - set - { - _lineData = newValue - for dataSet in newValue.dataSets - { - _dataSets.append(dataSet) - } - - checkIsLegal(newValue.dataSets) - - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - calcYValueCount() - - calcXValAverageLength() - } - } - - public var barData: BarChartData! - { - get - { - return _barData - } - set - { - _barData = newValue - for dataSet in newValue.dataSets - { - _dataSets.append(dataSet) - } - - checkIsLegal(newValue.dataSets) - - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - calcYValueCount() - - calcXValAverageLength() - } - } - - public var scatterData: ScatterChartData! - { - get - { - return _scatterData - } - set - { - _scatterData = newValue - for dataSet in newValue.dataSets - { - _dataSets.append(dataSet) - } - - checkIsLegal(newValue.dataSets) - - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - calcYValueCount() - - calcXValAverageLength() - } - } - - public var candleData: CandleChartData! - { - get - { - return _candleData - } - set - { - _candleData = newValue - for dataSet in newValue.dataSets - { - _dataSets.append(dataSet) - } - - checkIsLegal(newValue.dataSets) - - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - calcYValueCount() - - calcXValAverageLength() - } - } - - public var bubbleData: BubbleChartData! - { - get - { - return _bubbleData - } - set - { - _bubbleData = newValue - for dataSet in newValue.dataSets - { - _dataSets.append(dataSet) - } - - checkIsLegal(newValue.dataSets) - - calcMinMax(start: _lastStart, end: _lastEnd) - calcYValueSum() - calcYValueCount() - - calcXValAverageLength() - } - } - - /// - returns: all data objects in row: line-bar-scatter-candle-bubble if not null. - public var allData: [ChartData] - { - var data = [ChartData]() - - if lineData !== nil - { - data.append(lineData) - } - if barData !== nil - { - data.append(barData) - } - if scatterData !== nil - { - data.append(scatterData) - } - if candleData !== nil - { - data.append(candleData) - } - if bubbleData !== nil - { - data.append(bubbleData) - } - - return data; - } - - public override func notifyDataChanged() - { - if (_lineData !== nil) - { - _lineData.notifyDataChanged() - } - if (_barData !== nil) - { - _barData.notifyDataChanged() - } - if (_scatterData !== nil) - { - _scatterData.notifyDataChanged() - } - if (_candleData !== nil) - { - _candleData.notifyDataChanged() - } - if (_bubbleData !== nil) - { - _bubbleData.notifyDataChanged() - } - - super.notifyDataChanged() // recalculate everything - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartData.swift deleted file mode 100644 index a4d29e00..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartData.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// LineChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -/// Data object that encapsulates all data associated with a LineChart. -public class LineChartData: ChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartDataSet.swift deleted file mode 100644 index b85d9a8c..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineChartDataSet.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// LineChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class LineChartDataSet: LineRadarChartDataSet -{ - public var circleColors = [UIColor]() - public var circleHoleColor = UIColor.whiteColor() - public var circleRadius = CGFloat(8.0) - - private var _cubicIntensity = CGFloat(0.2) - - public var lineDashPhase = CGFloat(0.0) - public var lineDashLengths: [CGFloat]! - - /// if true, drawing circles is enabled - public var drawCirclesEnabled = true - - /// if true, cubic lines are drawn instead of linear - public var drawCubicEnabled = false - - public var drawCircleHoleEnabled = true - - public required init() - { - super.init() - circleColors.append(UIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - } - - public override init(yVals: [ChartDataEntry]?, label: String?) - { - super.init(yVals: yVals, label: label) - circleColors.append(UIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0)) - } - - /// intensity for cubic lines (min = 0.05, max = 1) - /// - /// **default**: 0.2 - public var cubicIntensity: CGFloat - { - get - { - return _cubicIntensity - } - set - { - _cubicIntensity = newValue - if (_cubicIntensity > 1.0) - { - _cubicIntensity = 1.0 - } - if (_cubicIntensity < 0.05) - { - _cubicIntensity = 0.05 - } - } - } - - /// - returns: the color at the given index of the DataSet's circle-color array. - /// Performs a IndexOutOfBounds check by modulus. - public func getCircleColor(var index: Int) -> UIColor? - { - let size = circleColors.count - index = index % size - if (index >= size) - { - return nil - } - return circleColors[index] - } - - /// Sets the one and ONLY color that should be used for this DataSet. - /// Internally, this recreates the colors array and adds the specified color. - public func setCircleColor(color: UIColor) - { - circleColors.removeAll(keepCapacity: false) - circleColors.append(color) - } - - /// resets the circle-colors array and creates a new one - public func resetCircleColors(index: Int) - { - circleColors.removeAll(keepCapacity: false) - } - - public var isDrawCirclesEnabled: Bool { return drawCirclesEnabled; } - - public var isDrawCubicEnabled: Bool { return drawCubicEnabled; } - - public var isDrawCircleHoleEnabled: Bool { return drawCircleHoleEnabled; } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! LineChartDataSet - copy.circleColors = circleColors - copy.circleRadius = circleRadius - copy.cubicIntensity = cubicIntensity - copy.lineDashPhase = lineDashPhase - copy.lineDashLengths = lineDashLengths - copy.drawCirclesEnabled = drawCirclesEnabled - copy.drawCubicEnabled = drawCubicEnabled - return copy - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineRadarChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/LineRadarChartDataSet.swift deleted file mode 100644 index 070a2f3f..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineRadarChartDataSet.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// LineRadarChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class LineRadarChartDataSet: LineScatterCandleChartDataSet -{ - public var fillColor = UIColor(red: 140.0/255.0, green: 234.0/255.0, blue: 255.0/255.0, alpha: 1.0) - public var fillAlpha = CGFloat(0.33) - private var _lineWidth = CGFloat(1.0) - public var drawFilledEnabled = false - - /// line width of the chart (min = 0.2, max = 10) - /// - /// **default**: 1 - public var lineWidth: CGFloat - { - get - { - return _lineWidth - } - set - { - if (newValue < 0.2) - { - _lineWidth = 0.2 - } - else if (newValue > 10.0) - { - _lineWidth = 10.0 - } - else - { - _lineWidth = newValue - } - } - } - - public var isDrawFilledEnabled: Bool - { - return drawFilledEnabled - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! LineRadarChartDataSet - copy.fillColor = fillColor - copy._lineWidth = _lineWidth - copy.drawFilledEnabled = drawFilledEnabled - return copy - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineScatterCandleChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/LineScatterCandleChartDataSet.swift deleted file mode 100644 index 4ed46978..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/LineScatterCandleChartDataSet.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// LineScatterCandleChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 29/7/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class LineScatterCandleChartDataSet: BarLineScatterCandleBubbleChartDataSet -{ - /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. - public var drawHorizontalHighlightIndicatorEnabled = true - - /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. - public var drawVerticalHighlightIndicatorEnabled = true - - public var isHorizontalHighlightIndicatorEnabled: Bool { return drawHorizontalHighlightIndicatorEnabled } - public var isVerticalHighlightIndicatorEnabled: Bool { return drawVerticalHighlightIndicatorEnabled } - - /// Enables / disables both vertical and horizontal highlight-indicators. - /// :param: enabled - public func setDrawHighlightIndicators(enabled: Bool) - { - drawHorizontalHighlightIndicatorEnabled = enabled - drawVerticalHighlightIndicatorEnabled = enabled - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! LineScatterCandleChartDataSet - copy.drawHorizontalHighlightIndicatorEnabled = drawHorizontalHighlightIndicatorEnabled - copy.drawVerticalHighlightIndicatorEnabled = drawVerticalHighlightIndicatorEnabled - return copy - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartData.swift deleted file mode 100644 index 8f75991b..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartData.swift +++ /dev/null @@ -1,84 +0,0 @@ -// -// PieData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 24/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class PieChartData: ChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - var dataSet: PieChartDataSet? - { - get - { - return dataSets.count > 0 ? dataSets[0] as? PieChartDataSet : nil - } - set - { - if (newValue != nil) - { - dataSets = [newValue!] - } - else - { - dataSets = [] - } - } - } - - public override func getDataSetByIndex(index: Int) -> ChartDataSet? - { - if (index != 0) - { - return nil - } - return super.getDataSetByIndex(index) - } - - public override func getDataSetByLabel(label: String, ignorecase: Bool) -> ChartDataSet? - { - if (dataSets.count == 0 || dataSets[0].label == nil) - { - return nil - } - - if (ignorecase) - { - if (label.caseInsensitiveCompare(dataSets[0].label!) == NSComparisonResult.OrderedSame) - { - return dataSets[0] - } - } - else - { - if (label == dataSets[0].label) - { - return dataSets[0] - } - } - return nil - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartDataSet.swift deleted file mode 100644 index 389cafda..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/PieChartDataSet.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// PieChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 24/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class PieChartDataSet: ChartDataSet -{ - private var _sliceSpace = CGFloat(0.0) - - /// indicates the selection distance of a pie slice - public var selectionShift = CGFloat(18.0) - - public required init() - { - super.init() - - self.valueTextColor = UIColor.whiteColor() - self.valueFont = UIFont.systemFontOfSize(13.0) - } - - public override init(yVals: [ChartDataEntry]?, label: String?) - { - super.init(yVals: yVals, label: label) - - self.valueTextColor = UIColor.whiteColor() - self.valueFont = UIFont.systemFontOfSize(13.0) - } - - /// the space that is left out between the piechart-slices, default: 0° - /// --> no space, maximum 45, minimum 0 (no space) - public var sliceSpace: CGFloat - { - get - { - return _sliceSpace - } - set - { - _sliceSpace = newValue - if (_sliceSpace > 45.0) - { - _sliceSpace = 45.0 - } - if (_sliceSpace < 0.0) - { - _sliceSpace = 0.0 - } - } - } - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! PieChartDataSet - copy._sliceSpace = _sliceSpace - copy.selectionShift = selectionShift - return copy - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartData.swift deleted file mode 100644 index 877e7b93..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartData.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// RadarChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class RadarChartData: ChartData -{ - public var highlightColor = UIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) - public var highlightLineWidth = CGFloat(1.0) - public var highlightLineDashPhase = CGFloat(0.0) - public var highlightLineDashLengths: [CGFloat]? - - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartDataSet.swift deleted file mode 100644 index 18f5c1ca..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/RadarChartDataSet.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// RadarChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 24/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class RadarChartDataSet: LineRadarChartDataSet -{ - public required init() - { - super.init() - - self.valueFont = UIFont.systemFontOfSize(13.0) - } - - public override init(yVals: [ChartDataEntry]?, label: String?) - { - super.init(yVals: yVals, label: label) - - self.valueFont = UIFont.systemFontOfSize(13.0) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartData.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartData.swift deleted file mode 100644 index 63e0a7cc..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartData.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// ScatterChartData.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import UIKit - -public class ScatterChartData: BarLineScatterCandleBubbleChartData -{ - public override init() - { - super.init() - } - - public override init(xVals: [String?]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - public override init(xVals: [NSObject]?, dataSets: [ChartDataSet]?) - { - super.init(xVals: xVals, dataSets: dataSets) - } - - /// - returns: the maximum shape-size across all DataSets. - public func getGreatestShapeSize() -> CGFloat - { - var max = CGFloat(0.0) - - for set in _dataSets - { - let scatterDataSet = set as? ScatterChartDataSet - - if (scatterDataSet == nil) - { - print("ScatterChartData: Found a DataSet which is not a ScatterChartDataSet", terminator: "\n") - } - else - { - let size = scatterDataSet!.scatterShapeSize - - if (size > max) - { - max = size - } - } - } - - return max - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartDataSet.swift b/Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartDataSet.swift deleted file mode 100644 index 56917a78..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Data/ScatterChartDataSet.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// ScatterChartDataSet.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class ScatterChartDataSet: LineScatterCandleChartDataSet -{ - @objc - public enum ScatterShape: Int - { - case Cross - case Triangle - case Circle - case Square - case Custom - } - - public var scatterShapeSize = CGFloat(15.0) - public var scatterShape = ScatterShape.Square - public var customScatterShape: CGPath? - - // MARK: NSCopying - - public override func copyWithZone(zone: NSZone) -> AnyObject - { - let copy = super.copyWithZone(zone) as! ScatterChartDataSet - copy.scatterShapeSize = scatterShapeSize - copy.scatterShape = scatterShape - copy.customScatterShape = customScatterShape - return copy - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataApproximatorFilter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataApproximatorFilter.swift deleted file mode 100644 index 12172dc0..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataApproximatorFilter.swift +++ /dev/null @@ -1,214 +0,0 @@ -// -// ChartDataApproximator.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class ChartDataApproximatorFilter: ChartDataBaseFilter -{ - @objc - public enum ApproximatorType: Int - { - case None - case RamerDouglasPeucker - } - - /// the type of filtering algorithm to use - public var type = ApproximatorType.None - - /// the tolerance to be filtered with - /// When using the Douglas-Peucker-Algorithm, the tolerance is an angle in degrees, that will trigger the filtering - public var tolerance = Double(0.0) - - public var scaleRatio = Double(1.0) - public var deltaRatio = Double(1.0) - - public override init() - { - super.init() - } - - /// Initializes the approximator with the given type and tolerance. - /// If toleranec <= 0, no filtering will be done. - public init(type: ApproximatorType, tolerance: Double) - { - super.init() - - setup(type, tolerance: tolerance) - } - - /// Sets type and tolerance. - /// If tolerance <= 0, no filtering will be done. - public func setup(type: ApproximatorType, tolerance: Double) - { - self.type = type - self.tolerance = tolerance - } - - /// Sets the ratios for x- and y-axis, as well as the ratio of the scale levels - public func setRatios(deltaRatio: Double, scaleRatio: Double) - { - self.deltaRatio = deltaRatio - self.scaleRatio = scaleRatio - } - - /// Filters according to type. Uses the pre set set tolerance - /// - /// - parameter points: the points to filter - public override func filter(points: [ChartDataEntry]) -> [ChartDataEntry] - { - return filter(points, tolerance: tolerance) - } - - /// Filters according to type. - /// - /// - parameter points: the points to filter - /// - parameter tolerance: the angle in degrees that will trigger the filtering - public func filter(points: [ChartDataEntry], tolerance: Double) -> [ChartDataEntry] - { - if (tolerance <= 0) - { - return points - } - - switch (type) - { - case .RamerDouglasPeucker: - return reduceWithDouglasPeuker(points, epsilon: tolerance) - case .None: - return points - } - } - - /// uses the douglas peuker algorithm to reduce the given arraylist of entries - private func reduceWithDouglasPeuker(entries: [ChartDataEntry], epsilon: Double) -> [ChartDataEntry] - { - // if a shape has 2 or less points it cannot be reduced - if (epsilon <= 0 || entries.count < 3) - { - return entries - } - - var keep = [Bool](count: entries.count, repeatedValue: false) - - // first and last always stay - keep[0] = true - keep[entries.count - 1] = true - - // first and last entry are entry point to recursion - algorithmDouglasPeucker(entries, epsilon: epsilon, start: 0, end: entries.count - 1, keep: &keep) - - // create a new array with series, only take the kept ones - var reducedEntries = [ChartDataEntry]() - for (var i = 0; i < entries.count; i++) - { - if (keep[i]) - { - let curEntry = entries[i] - reducedEntries.append(ChartDataEntry(value: curEntry.value, xIndex: curEntry.xIndex)) - } - } - - return reducedEntries - } - - /// apply the Douglas-Peucker-Reduction to an ArrayList of Entry with a given epsilon (tolerance) - /// - /// - parameter entries: - /// - parameter epsilon: as y-value - /// - parameter start: - /// - parameter end: - private func algorithmDouglasPeucker(entries: [ChartDataEntry], epsilon: Double, start: Int, end: Int, inout keep: [Bool]) - { - if (end <= start + 1) - { - // recursion finished - return - } - - // find the greatest distance between start and endpoint - var maxDistIndex = Int(0) - var distMax = Double(0.0) - - let firstEntry = entries[start] - let lastEntry = entries[end] - - for (var i = start + 1; i < end; i++) - { - let dist = calcAngleBetweenLines(firstEntry, end1: lastEntry, start2: firstEntry, end2: entries[i]) - - // keep the point with the greatest distance - if (dist > distMax) - { - distMax = dist - maxDistIndex = i - } - } - - if (distMax > epsilon) - { - // keep max dist point - keep[maxDistIndex] = true - - // recursive call - algorithmDouglasPeucker(entries, epsilon: epsilon, start: start, end: maxDistIndex, keep: &keep) - algorithmDouglasPeucker(entries, epsilon: epsilon, start: maxDistIndex, end: end, keep: &keep) - } // else don't keep the point... - } - - /// calculate the distance between a line between two entries and an entry (point) - /// - /// - parameter startEntry: line startpoint - /// - parameter endEntry: line endpoint - /// - parameter entryPoint: the point to which the distance is measured from the line - private func calcPointToLineDistance(startEntry: ChartDataEntry, endEntry: ChartDataEntry, entryPoint: ChartDataEntry) -> Double - { - let xDiffEndStart = Double(endEntry.xIndex) - Double(startEntry.xIndex) - let xDiffEntryStart = Double(entryPoint.xIndex) - Double(startEntry.xIndex) - - let normalLength = sqrt((xDiffEndStart) - * (xDiffEndStart) - + (endEntry.value - startEntry.value) - * (endEntry.value - startEntry.value)) - - return Double(fabs((xDiffEntryStart) - * (endEntry.value - startEntry.value) - - (entryPoint.value - startEntry.value) - * (xDiffEndStart))) / Double(normalLength) - } - - /// Calculates the angle between two given lines. The provided entries mark the starting and end points of the lines. - private func calcAngleBetweenLines(start1: ChartDataEntry, end1: ChartDataEntry, start2: ChartDataEntry, end2: ChartDataEntry) -> Double - { - let angle1 = calcAngleWithRatios(start1, p2: end1) - let angle2 = calcAngleWithRatios(start2, p2: end2) - - return fabs(angle1 - angle2) - } - - /// calculates the angle between two entries (points) in the chart taking ratios into consideration - private func calcAngleWithRatios(p1: ChartDataEntry, p2: ChartDataEntry) -> Double - { - let dx = Double(p2.xIndex) * Double(deltaRatio) - Double(p1.xIndex) * Double(deltaRatio) - let dy = p2.value * scaleRatio - p1.value * scaleRatio - return atan2(Double(dy), dx) * ChartUtils.Math.RAD2DEG - } - - // calculates the angle between two entries (points) in the chart - private func calcAngle(p1: ChartDataEntry, p2: ChartDataEntry) -> Double - { - let dx = p2.xIndex - p1.xIndex - let dy = p2.value - p1.value - return atan2(Double(dy), Double(dx)) * ChartUtils.Math.RAD2DEG - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataBaseFilter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataBaseFilter.swift deleted file mode 100644 index a8385451..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Filters/ChartDataBaseFilter.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// ChartDataFilter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class ChartDataBaseFilter: NSObject -{ - public override init() - { - super.init() - } - - public func filter(points: [ChartDataEntry]) -> [ChartDataEntry] - { - fatalError("filter() cannot be called on ChartDataBaseFilter") - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift deleted file mode 100644 index 69905cfb..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// ChartDefaultXAxisValueFormatter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 27/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -/// An interface for providing custom x-axis Strings. -public class ChartDefaultXAxisValueFormatter: NSObject, ChartXAxisValueFormatter -{ - - public func stringForXValue(index: Int, original: String, viewPortHandler: ChartViewPortHandler) -> String - { - return original // just return original, no adjustments - } - -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartFillFormatter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartFillFormatter.swift deleted file mode 100644 index 45fa36d9..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartFillFormatter.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// ChartFillFormatter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 6/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// Protocol for providing a custom logic to where the filling line of a LineDataSet should end. This of course only works if setFillEnabled(...) is set to true. -@objc -public protocol ChartFillFormatter -{ - /// - returns: the vertical (y-axis) position where the filled-line of the LineDataSet should end. - func getFillLinePosition(dataSet dataSet: LineChartDataSet, data: LineChartData, chartMaxY: Double, chartMinY: Double) -> CGFloat -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartXAxisValueFormatter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartXAxisValueFormatter.swift deleted file mode 100644 index f88bfee0..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Formatters/ChartXAxisValueFormatter.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// ChartXAxisValueFormatter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 27/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -/// An interface for providing custom x-axis Strings. -@objc -public protocol ChartXAxisValueFormatter -{ - - /// For performance reasons, avoid excessive calculations and memory allocations inside this method. - /// - /// - returns: the customized label that is drawn on the x-axis. - /// - parameter index: the x-index that is currently being drawn - /// - parameter original: the original x-axis label to be drawn - /// - parameter viewPortHandler: provides information about the current chart state (scale, translation, ...) - /// - func stringForXValue(index: Int, original: String, viewPortHandler: ChartViewPortHandler) -> String - -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/BarChartHighlighter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Highlight/BarChartHighlighter.swift deleted file mode 100644 index a8c50539..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/BarChartHighlighter.swift +++ /dev/null @@ -1,244 +0,0 @@ -// -// ChartBarHighlighter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/7/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -internal class BarChartHighlighter: ChartHighlighter -{ - internal init(chart: BarChartView) - { - super.init(chart: chart) - } - - internal override func getHighlight(x x: Double, y: Double) -> ChartHighlight? - { - let h = super.getHighlight(x: x, y: y) - - if h === nil - { - return h - } - else - { - if let set = _chart?.data?.getDataSetByIndex(h!.dataSetIndex) as? BarChartDataSet - { - if set.isStacked - { - // create an array of the touch-point - var pt = CGPoint() - pt.y = CGFloat(y) - - // take any transformer to determine the x-axis value - _chart?.getTransformer(set.axisDependency).pixelToValue(&pt) - - return getStackedHighlight(old: h, set: set, xIndex: h!.xIndex, dataSetIndex: h!.dataSetIndex, yValue: Double(pt.y)) - } - } - - return h - } - } - - internal override func getXIndex(x: Double) -> Int - { - if let barChartData = _chart?.data as? BarChartData - { - if !barChartData.isGrouped - { - return super.getXIndex(x) - } - else - { - let baseNoSpace = getBase(x) - - let setCount = barChartData.dataSetCount - var xIndex = Int(baseNoSpace) / setCount - - let valCount = barChartData.xValCount - - if xIndex < 0 - { - xIndex = 0 - } - else if xIndex >= valCount - { - xIndex = valCount - 1 - } - - return xIndex - } - } - else - { - return 0 - } - } - - internal override func getDataSetIndex(xIndex xIndex: Int, x: Double, y: Double) -> Int - { - if let barChartData = _chart?.data as? BarChartData - { - if !barChartData.isGrouped - { - return 0 - } - else - { - let baseNoSpace = getBase(x) - - let setCount = barChartData.dataSetCount - var dataSetIndex = Int(baseNoSpace) % setCount - - if dataSetIndex < 0 - { - dataSetIndex = 0 - } - else if dataSetIndex >= setCount - { - dataSetIndex = setCount - 1 - } - - return dataSetIndex - } - } - else - { - return 0 - } - } - - /// This method creates the Highlight object that also indicates which value of a stacked BarEntry has been selected. - /// - parameter old: the old highlight object before looking for stacked values - /// - parameter set: - /// - parameter xIndex: - /// - parameter dataSetIndex: - /// - parameter yValue: - /// - returns: - internal func getStackedHighlight(old old: ChartHighlight?, set: BarChartDataSet, xIndex: Int, dataSetIndex: Int, yValue: Double) -> ChartHighlight? - { - let entry = set.entryForXIndex(xIndex) as? BarChartDataEntry - - if entry?.values === nil - { - return old - } - - if let ranges = getRanges(entry: entry!) - { - let stackIndex = getClosestStackIndex(ranges: ranges, value: yValue) - let h = ChartHighlight(xIndex: xIndex, dataSetIndex: dataSetIndex, stackIndex: stackIndex, range: ranges[stackIndex]) - return h - } - return nil - } - - /// Returns the index of the closest value inside the values array / ranges (stacked barchart) to the value given as a parameter. - /// - parameter entry: - /// - parameter value: - /// - returns: - internal func getClosestStackIndex(ranges ranges: [ChartRange]?, value: Double) -> Int - { - if ranges == nil - { - return 0 - } - - var stackIndex = 0 - - for range in ranges! - { - if range.contains(value) - { - return stackIndex - } - else - { - stackIndex++ - } - } - - let length = ranges!.count - 1 - - return (value > ranges![length].to) ? length : 0 - } - - /// Returns the base x-value to the corresponding x-touch value in pixels. - /// - parameter x: - /// - returns: - internal func getBase(x: Double) -> Double - { - if let barChartData = _chart?.data as? BarChartData - { - // create an array of the touch-point - var pt = CGPoint() - pt.x = CGFloat(x) - - // take any transformer to determine the x-axis value - _chart?.getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - let xVal = Double(pt.x) - - let setCount = barChartData.dataSetCount ?? 0 - - // calculate how often the group-space appears - let steps = Int(xVal / (Double(setCount) + Double(barChartData.groupSpace))) - - let groupSpaceSum = Double(barChartData.groupSpace) * Double(steps) - - let baseNoSpace = xVal - groupSpaceSum - - return baseNoSpace - } - else - { - return 0.0 - } - } - - /// Splits up the stack-values of the given bar-entry into Range objects. - /// - parameter entry: - /// - returns: - internal func getRanges(entry entry: BarChartDataEntry) -> [ChartRange]? - { - let values = entry.values - if (values == nil) - { - return nil - } - - var negRemain = -entry.negativeSum - var posRemain: Double = 0.0 - - var ranges = [ChartRange]() - ranges.reserveCapacity(values!.count) - - for (var i = 0, count = values!.count; i < count; i++) - { - let value = values![i] - - if value < 0 - { - ranges.append(ChartRange(from: negRemain, to: negRemain + abs(value))) - negRemain += abs(value) - } - else - { - ranges.append(ChartRange(from: posRemain, to: posRemain+value)) - posRemain += value - } - } - - return ranges - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlight.swift b/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlight.swift deleted file mode 100644 index fd69b077..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlight.swift +++ /dev/null @@ -1,141 +0,0 @@ -// -// ChartHighlight.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class ChartHighlight: NSObject -{ - /// the x-index of the highlighted value - private var _xIndex = Int(0) - - /// the index of the dataset the highlighted value is in - private var _dataSetIndex = Int(0) - - /// index which value of a stacked bar entry is highlighted - /// - /// **default**: -1 - private var _stackIndex = Int(-1) - - /// the range of the bar that is selected (only for stacked-barchart) - private var _range: ChartRange? - - public override init() - { - super.init() - } - - public init(xIndex x: Int, dataSetIndex: Int) - { - super.init() - - _xIndex = x - _dataSetIndex = dataSetIndex - } - - public init(xIndex x: Int, dataSetIndex: Int, stackIndex: Int) - { - super.init() - - _xIndex = x - _dataSetIndex = dataSetIndex - _stackIndex = stackIndex - } - - /// Constructor, only used for stacked-barchart. - /// - /// - parameter x: the index of the highlighted value on the x-axis - /// - parameter dataSet: the index of the DataSet the highlighted value belongs to - /// - parameter stackIndex: references which value of a stacked-bar entry has been selected - /// - parameter range: the range the selected stack-value is in - public convenience init(xIndex x: Int, dataSetIndex: Int, stackIndex: Int, range: ChartRange) - { - self.init(xIndex: x, dataSetIndex: dataSetIndex, stackIndex: stackIndex) - - _range = range - } - - public var dataSetIndex: Int { return _dataSetIndex; } - public var xIndex: Int { return _xIndex; } - public var stackIndex: Int { return _stackIndex; } - - /// - returns: the range of values the selected value of a stacked bar is in. (this is only relevant for stacked-barchart) - public var range: ChartRange? { return _range } - - // MARK: NSObject - - public override var description: String - { - return "Highlight, xIndex: \(_xIndex), dataSetIndex: \(_dataSetIndex), stackIndex (only stacked barentry): \(_stackIndex)" - } - - public override func isEqual(object: AnyObject?) -> Bool - { - if (object === nil) - { - return false - } - - if (!object!.isKindOfClass(self.dynamicType)) - { - return false - } - - if (object!.xIndex != _xIndex) - { - return false - } - - if (object!.dataSetIndex != _dataSetIndex) - { - return false - } - - if (object!.stackIndex != _stackIndex) - { - return false - } - - return true - } -} - -func ==(lhs: ChartHighlight, rhs: ChartHighlight) -> Bool -{ - if (lhs === rhs) - { - return true - } - - if (!lhs.isKindOfClass(rhs.dynamicType)) - { - return false - } - - if (lhs._xIndex != rhs._xIndex) - { - return false - } - - if (lhs._dataSetIndex != rhs._dataSetIndex) - { - return false - } - - if (lhs._stackIndex != rhs._stackIndex) - { - return false - } - - return true -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlighter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlighter.swift deleted file mode 100644 index 3da722d9..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartHighlighter.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// ChartHighlighter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/7/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -internal class ChartHighlighter -{ - /// instance of the data-provider - internal weak var _chart: BarLineChartViewBase?; - - internal init(chart: BarLineChartViewBase) - { - _chart = chart; - } - - /// Returns a Highlight object corresponding to the given x- and y- touch positions in pixels. - /// - parameter x: - /// - parameter y: - /// - returns: - internal func getHighlight(x x: Double, y: Double) -> ChartHighlight? - { - let xIndex = getXIndex(x) - if (xIndex == -Int.max) - { - return nil - } - - let dataSetIndex = getDataSetIndex(xIndex: xIndex, x: x, y: y) - if (dataSetIndex == -Int.max) - { - return nil - } - - return ChartHighlight(xIndex: xIndex, dataSetIndex: dataSetIndex) - } - - /// Returns the corresponding x-index for a given touch-position in pixels. - /// - parameter x: - /// - returns: - internal func getXIndex(x: Double) -> Int - { - // create an array of the touch-point - var pt = CGPoint(x: x, y: 0.0) - - // take any transformer to determine the x-axis value - _chart?.getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - - return Int(round(pt.x)) - } - - /// Returns the corresponding dataset-index for a given xIndex and xy-touch position in pixels. - /// - parameter xIndex: - /// - parameter x: - /// - parameter y: - /// - returns: - internal func getDataSetIndex(xIndex xIndex: Int, x: Double, y: Double) -> Int - { - let valsAtIndex = getSelectionDetailsAtIndex(xIndex) - - let leftdist = ChartUtils.getMinimumDistance(valsAtIndex, val: y, axis: ChartYAxis.AxisDependency.Left) - let rightdist = ChartUtils.getMinimumDistance(valsAtIndex, val: y, axis: ChartYAxis.AxisDependency.Right) - - let axis = leftdist < rightdist ? ChartYAxis.AxisDependency.Left : ChartYAxis.AxisDependency.Right - - let dataSetIndex = ChartUtils.closestDataSetIndex(valsAtIndex, value: y, axis: axis) - - return dataSetIndex - } - - /// Returns a list of SelectionDetail object corresponding to the given xIndex. - /// - parameter xIndex: - /// - returns: - internal func getSelectionDetailsAtIndex(xIndex: Int) -> [ChartSelectionDetail] - { - var vals = [ChartSelectionDetail]() - var pt = CGPoint() - - for (var i = 0, dataSetCount = _chart?.data?.dataSetCount; i < dataSetCount; i++) - { - let dataSet = _chart!.data!.getDataSetByIndex(i) - - // dont include datasets that cannot be highlighted - if !dataSet.isHighlightEnabled - { - continue - } - - // extract all y-values from all DataSets at the given x-index - let yVal: Double = dataSet.yValForXIndex(xIndex) - if yVal.isNaN - { - continue - } - - pt.y = CGFloat(yVal) - - _chart!.getTransformer(dataSet.axisDependency).pointValueToPixel(&pt) - - if !pt.y.isNaN - { - vals.append(ChartSelectionDetail(value: Double(pt.y), dataSetIndex: i, dataSet: dataSet)) - } - } - - return vals - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartRange.swift b/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartRange.swift deleted file mode 100644 index b2df48cf..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/ChartRange.swift +++ /dev/null @@ -1,53 +0,0 @@ -// -// ChartRange.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/7/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class ChartRange: NSObject -{ - public var from: Double - public var to: Double - - public init(from: Double, to: Double) - { - self.from = from - self.to = to - - super.init() - } - - /// Returns true if this range contains (if the value is in between) the given value, false if not. - /// - parameter value: - public func contains(value: Double) -> Bool - { - if value > from && value <= to - { - return true - } - else - { - return false - } - } - - public func isLarger(value: Double) -> Bool - { - return value > to - } - - public func isSmaller(value: Double) -> Bool - { - return value < from - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/CombinedHighlighter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Highlight/CombinedHighlighter.swift deleted file mode 100644 index 1df3ebf4..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/CombinedHighlighter.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// CombinedHighlighter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/7/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -internal class CombinedHighlighter: ChartHighlighter -{ - internal init(chart: CombinedChartView) - { - super.init(chart: chart) - } - - /// Returns a list of SelectionDetail object corresponding to the given xIndex. - /// - parameter xIndex: - /// - returns: - internal override func getSelectionDetailsAtIndex(xIndex: Int) -> [ChartSelectionDetail] - { - var vals = [ChartSelectionDetail]() - - if let data = _chart?.data as? CombinedChartData - { - // get all chartdata objects - var dataObjects = data.allData - - var pt = CGPoint() - - for var i = 0; i < dataObjects.count; i++ - { - for var j = 0; j < dataObjects[i].dataSetCount; j++ - { - let dataSet = dataObjects[i].getDataSetByIndex(j) - - // dont include datasets that cannot be highlighted - if !dataSet.isHighlightEnabled - { - continue - } - - // extract all y-values from all DataSets at the given x-index - let yVal = dataSet.yValForXIndex(xIndex) - if yVal.isNaN - { - continue - } - - pt.y = CGFloat(yVal) - - _chart!.getTransformer(dataSet.axisDependency).pointValueToPixel(&pt) - - if !pt.y.isNaN - { - vals.append(ChartSelectionDetail(value: Double(pt.y), dataSetIndex: j, dataSet: dataSet)) - } - } - } - } - - return vals - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift b/Carthage/Checkouts/Charts/Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift deleted file mode 100644 index ee4a7def..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift +++ /dev/null @@ -1,121 +0,0 @@ -// -// HorizontalBarChartHighlighter.swift -// Charts -// -// Created by Daniel Cohen Gindi on 26/7/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -internal class HorizontalBarChartHighlighter: BarChartHighlighter -{ - internal override func getHighlight(x x: Double, y: Double) -> ChartHighlight? - { - let h = super.getHighlight(x: x, y: y) - - if h === nil - { - return h - } - else - { - if let set = _chart?.data?.getDataSetByIndex(h!.dataSetIndex) as? BarChartDataSet - { - if set.isStacked - { - // create an array of the touch-point - var pt = CGPoint() - pt.x = CGFloat(y) - - // take any transformer to determine the x-axis value - _chart?.getTransformer(set.axisDependency).pixelToValue(&pt) - - return getStackedHighlight(old: h, set: set, xIndex: h!.xIndex, dataSetIndex: h!.dataSetIndex, yValue: Double(pt.x)) - } - } - - return h - } - } - - internal override func getXIndex(x: Double) -> Int - { - if let barChartData = _chart?.data as? BarChartData - { - if !barChartData.isGrouped - { - // create an array of the touch-point - var pt = CGPoint(x: 0.0, y: x) - - // take any transformer to determine the x-axis value - _chart?.getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - - return Int(round(pt.y)) - } - else - { - let baseNoSpace = getBase(x) - - let setCount = barChartData.dataSetCount - var xIndex = Int(baseNoSpace) / setCount - - let valCount = barChartData.xValCount - - if xIndex < 0 - { - xIndex = 0 - } - else if xIndex >= valCount - { - xIndex = valCount - 1 - } - - return xIndex - } - } - else - { - return 0 - } - } - - /// Returns the base y-value to the corresponding x-touch value in pixels. - /// - parameter y: - /// - returns: - internal override func getBase(y: Double) -> Double - { - if let barChartData = _chart?.data as? BarChartData - { - // create an array of the touch-point - var pt = CGPoint() - pt.y = CGFloat(y) - - // take any transformer to determine the x-axis value - _chart?.getTransformer(ChartYAxis.AxisDependency.Left).pixelToValue(&pt) - let yVal = Double(pt.y) - - let setCount = barChartData.dataSetCount ?? 0 - - // calculate how often the group-space appears - let steps = Int(yVal / (Double(setCount) + Double(barChartData.groupSpace))) - - let groupSpaceSum = Double(barChartData.groupSpace) * Double(steps) - - let baseNoSpace = yVal - groupSpaceSum - - return baseNoSpace - } - else - { - return 0.0 - } - } -} diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/BarChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/BarChartRenderer.swift deleted file mode 100644 index 47a6b692..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/BarChartRenderer.swift +++ /dev/null @@ -1,589 +0,0 @@ -// -// BarChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -@objc -public protocol BarChartRendererDelegate -{ - func barChartRendererData(renderer: BarChartRenderer) -> BarChartData! - func barChartRenderer(renderer: BarChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - func barChartRendererMaxVisibleValueCount(renderer: BarChartRenderer) -> Int - func barChartDefaultRendererValueFormatter(renderer: BarChartRenderer) -> NSNumberFormatter! - func barChartRendererChartYMax(renderer: BarChartRenderer) -> Double - func barChartRendererChartYMin(renderer: BarChartRenderer) -> Double - func barChartRendererChartXMax(renderer: BarChartRenderer) -> Double - func barChartRendererChartXMin(renderer: BarChartRenderer) -> Double - func barChartIsDrawHighlightArrowEnabled(renderer: BarChartRenderer) -> Bool - func barChartIsDrawValueAboveBarEnabled(renderer: BarChartRenderer) -> Bool - func barChartIsDrawBarShadowEnabled(renderer: BarChartRenderer) -> Bool - func barChartIsInverted(renderer: BarChartRenderer, axis: ChartYAxis.AxisDependency) -> Bool -} - -public class BarChartRenderer: ChartDataRendererBase -{ - public weak var delegate: BarChartRendererDelegate? - - public init(delegate: BarChartRendererDelegate?, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - self.delegate = delegate - } - - public override func drawData(context context: CGContext?) - { - let barData = delegate!.barChartRendererData(self) - - if (barData === nil) - { - return - } - - for (var i = 0; i < barData.dataSetCount; i++) - { - let set = barData.getDataSetByIndex(i) - - if set !== nil && set!.isVisible && set.entryCount > 0 - { - drawDataSet(context: context, dataSet: set as! BarChartDataSet, index: i) - } - } - } - - internal func drawDataSet(context context: CGContext?, dataSet: BarChartDataSet, index: Int) - { - CGContextSaveGState(context) - - let barData = delegate!.barChartRendererData(self) - - let trans = delegate!.barChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - let drawBarShadowEnabled: Bool = delegate!.barChartIsDrawBarShadowEnabled(self) - let dataSetOffset = (barData.dataSetCount - 1) - let groupSpace = barData.groupSpace - let groupSpaceHalf = groupSpace / 2.0 - let barSpace = dataSet.barSpace - let barSpaceHalf = barSpace / 2.0 - let containsStacks = dataSet.isStacked - let isInverted = delegate!.barChartIsInverted(self, axis: dataSet.axisDependency) - var entries = dataSet.yVals as! [BarChartDataEntry] - let barWidth: CGFloat = 0.5 - let phaseY = _animator.phaseY - var barRect = CGRect() - var barShadow = CGRect() - var y: Double - - // do the drawing - for (var j = 0, count = Int(ceil(CGFloat(dataSet.entryCount) * _animator.phaseX)); j < count; j++) - { - let e = entries[j] - - // calculate the x-position, depending on datasetcount - let x = CGFloat(e.xIndex + e.xIndex * dataSetOffset) + CGFloat(index) - + groupSpace * CGFloat(e.xIndex) + groupSpaceHalf - var vals = e.values - - if (!containsStacks || vals == nil) - { - y = e.value - - let left = x - barWidth + barSpaceHalf - let right = x + barWidth - barSpaceHalf - var top = isInverted ? (y <= 0.0 ? CGFloat(y) : 0) : (y >= 0.0 ? CGFloat(y) : 0) - var bottom = isInverted ? (y >= 0.0 ? CGFloat(y) : 0) : (y <= 0.0 ? CGFloat(y) : 0) - - // multiply the height of the rect with the phase - if (top > 0) - { - top *= phaseY - } - else - { - bottom *= phaseY - } - - barRect.origin.x = left - barRect.size.width = right - left - barRect.origin.y = top - barRect.size.height = bottom - top - - trans.rectValueToPixel(&barRect) - - if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width)) - { - continue - } - - if (!viewPortHandler.isInBoundsRight(barRect.origin.x)) - { - break - } - - // if drawing the bar shadow is enabled - if (drawBarShadowEnabled) - { - barShadow.origin.x = barRect.origin.x - barShadow.origin.y = viewPortHandler.contentTop - barShadow.size.width = barRect.size.width - barShadow.size.height = viewPortHandler.contentHeight - - CGContextSetFillColorWithColor(context, dataSet.barShadowColor.CGColor) - CGContextFillRect(context, barShadow) - } - - // Set the color for the currently drawn value. If the index is out of bounds, reuse colors. - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - CGContextFillRect(context, barRect) - } - else - { - var posY = 0.0 - var negY = -e.negativeSum - var yStart = 0.0 - - // if drawing the bar shadow is enabled - if (drawBarShadowEnabled) - { - y = e.value - - let left = x - barWidth + barSpaceHalf - let right = x + barWidth - barSpaceHalf - var top = isInverted ? (y <= 0.0 ? CGFloat(y) : 0) : (y >= 0.0 ? CGFloat(y) : 0) - var bottom = isInverted ? (y >= 0.0 ? CGFloat(y) : 0) : (y <= 0.0 ? CGFloat(y) : 0) - - // multiply the height of the rect with the phase - if (top > 0) - { - top *= phaseY - } - else - { - bottom *= phaseY - } - - barRect.origin.x = left - barRect.size.width = right - left - barRect.origin.y = top - barRect.size.height = bottom - top - - trans.rectValueToPixel(&barRect) - - barShadow.origin.x = barRect.origin.x - barShadow.origin.y = viewPortHandler.contentTop - barShadow.size.width = barRect.size.width - barShadow.size.height = viewPortHandler.contentHeight - - CGContextSetFillColorWithColor(context, dataSet.barShadowColor.CGColor) - CGContextFillRect(context, barShadow) - } - - // fill the stack - for (var k = 0; k < vals!.count; k++) - { - let value = vals![k] - - if value >= 0.0 - { - y = posY - yStart = posY + value - posY = yStart - } - else - { - y = negY - yStart = negY + abs(value) - negY += abs(value) - } - - let left = x - barWidth + barSpaceHalf - let right = x + barWidth - barSpaceHalf - var top: CGFloat, bottom: CGFloat - if isInverted - { - bottom = y >= yStart ? CGFloat(y) : CGFloat(yStart) - top = y <= yStart ? CGFloat(y) : CGFloat(yStart) - } - else - { - top = y >= yStart ? CGFloat(y) : CGFloat(yStart) - bottom = y <= yStart ? CGFloat(y) : CGFloat(yStart) - } - - // multiply the height of the rect with the phase - top *= phaseY - bottom *= phaseY - - barRect.origin.x = left - barRect.size.width = right - left - barRect.origin.y = top - barRect.size.height = bottom - top - - trans.rectValueToPixel(&barRect) - - if (k == 0 && !viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width)) - { - // Skip to next bar - break - } - - // avoid drawing outofbounds values - if (!viewPortHandler.isInBoundsRight(barRect.origin.x)) - { - break - } - - // Set the color for the currently drawn value. If the index is out of bounds, reuse colors. - CGContextSetFillColorWithColor(context, dataSet.colorAt(k).CGColor) - CGContextFillRect(context, barRect) - } - } - } - - CGContextRestoreGState(context) - } - - /// Prepares a bar for being highlighted. - internal func prepareBarHighlight(x x: CGFloat, y1: Double, y2: Double, barspacehalf: CGFloat, trans: ChartTransformer, inout rect: CGRect) - { - let barWidth: CGFloat = 0.5 - - let left = x - barWidth + barspacehalf - let right = x + barWidth - barspacehalf - let top = CGFloat(y1) - let bottom = CGFloat(y2) - - rect.origin.x = left - rect.origin.y = top - rect.size.width = right - left - rect.size.height = bottom - top - - trans.rectValueToPixel(&rect, phaseY: _animator.phaseY) - } - - public override func drawValues(context context: CGContext?) - { - // if values are drawn - if (passesCheck()) - { - let barData = delegate!.barChartRendererData(self) - - let defaultValueFormatter = delegate!.barChartDefaultRendererValueFormatter(self) - - var dataSets = barData.dataSets - - let drawValueAboveBar = delegate!.barChartIsDrawValueAboveBarEnabled(self) - - var posOffset: CGFloat - var negOffset: CGFloat - - for (var i = 0, count = barData.dataSetCount; i < count; i++) - { - let dataSet = dataSets[i] as! BarChartDataSet - - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - let isInverted = delegate!.barChartIsInverted(self, axis: dataSet.axisDependency) - - // calculate the correct offset depending on the draw position of the value - let valueOffsetPlus: CGFloat = 4.5 - let valueFont = dataSet.valueFont - let valueTextHeight = valueFont.lineHeight - posOffset = (drawValueAboveBar ? -(valueTextHeight + valueOffsetPlus) : valueOffsetPlus) - negOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextHeight + valueOffsetPlus)) - - if (isInverted) - { - posOffset = -posOffset - valueTextHeight - negOffset = -negOffset - valueTextHeight - } - - let valueTextColor = dataSet.valueTextColor - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - let trans = delegate!.barChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - var entries = dataSet.yVals as! [BarChartDataEntry] - - var valuePoints = getTransformedValues(trans: trans, entries: entries, dataSetIndex: i) - - // if only single values are drawn (sum) - if (!dataSet.isStacked) - { - for (var j = 0, count = Int(ceil(CGFloat(valuePoints.count) * _animator.phaseX)); j < count; j++) - { - if (!viewPortHandler.isInBoundsRight(valuePoints[j].x)) - { - break - } - - if (!viewPortHandler.isInBoundsY(valuePoints[j].y) - || !viewPortHandler.isInBoundsLeft(valuePoints[j].x)) - { - continue - } - - let val = entries[j].value - - drawValue(context: context, - value: formatter!.stringFromNumber(val)!, - xPos: valuePoints[j].x, - yPos: valuePoints[j].y + (val >= 0.0 ? posOffset : negOffset), - font: valueFont, - align: .Center, - color: valueTextColor) - } - } - else - { - // if we have stacks - - for (var j = 0, count = Int(ceil(CGFloat(valuePoints.count) * _animator.phaseX)); j < count; j++) - { - let e = entries[j] - - let values = e.values - - // we still draw stacked bars, but there is one non-stacked in between - if (values == nil) - { - if (!viewPortHandler.isInBoundsRight(valuePoints[j].x)) - { - break - } - - if (!viewPortHandler.isInBoundsY(valuePoints[j].y) - || !viewPortHandler.isInBoundsLeft(valuePoints[j].x)) - { - continue - } - - drawValue(context: context, - value: formatter!.stringFromNumber(e.value)!, - xPos: valuePoints[j].x, - yPos: valuePoints[j].y + (e.value >= 0.0 ? posOffset : negOffset), - font: valueFont, - align: .Center, - color: valueTextColor) - } - else - { - // draw stack values - - let vals = values! - var transformed = [CGPoint]() - - var posY = 0.0 - var negY = -e.negativeSum - - for (var k = 0; k < vals.count; k++) - { - let value = vals[k] - var y: Double - - if value >= 0.0 - { - posY += value - y = posY - } - else - { - y = negY - negY -= value - } - - transformed.append(CGPoint(x: 0.0, y: CGFloat(y) * _animator.phaseY)) - } - - trans.pointValuesToPixel(&transformed) - - for (var k = 0; k < transformed.count; k++) - { - let x = valuePoints[j].x - let y = transformed[k].y + (vals[k] >= 0 ? posOffset : negOffset) - - if (!viewPortHandler.isInBoundsRight(x)) - { - break - } - - if (!viewPortHandler.isInBoundsY(y) || !viewPortHandler.isInBoundsLeft(x)) - { - continue - } - - drawValue(context: context, - value: formatter!.stringFromNumber(vals[k])!, - xPos: x, - yPos: y, - font: valueFont, - align: .Center, - color: valueTextColor) - } - } - } - } - } - } - } - - /// Draws a value at the specified x and y position. - internal func drawValue(context context: CGContext?, value: String, xPos: CGFloat, yPos: CGFloat, font: UIFont, align: NSTextAlignment, color: UIColor) - { - ChartUtils.drawText(context: context, text: value, point: CGPoint(x: xPos, y: yPos), align: align, attributes: [NSFontAttributeName: font, NSForegroundColorAttributeName: color]) - } - - public override func drawExtras(context context: CGContext?) - { - - } - - private var _highlightArrowPtsBuffer = [CGPoint](count: 3, repeatedValue: CGPoint()) - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - let barData = delegate!.barChartRendererData(self) - if (barData === nil) - { - return - } - - CGContextSaveGState(context) - - let setCount = barData.dataSetCount - let drawHighlightArrowEnabled = delegate!.barChartIsDrawHighlightArrowEnabled(self) - var barRect = CGRect() - - for (var i = 0; i < indices.count; i++) - { - let h = indices[i] - let index = h.xIndex - - let dataSetIndex = h.dataSetIndex - let set = barData.getDataSetByIndex(dataSetIndex) as! BarChartDataSet! - - if (set === nil || !set.isHighlightEnabled) - { - continue - } - - let barspaceHalf = set.barSpace / 2.0 - - let trans = delegate!.barChartRenderer(self, transformerForAxis: set.axisDependency) - - CGContextSetFillColorWithColor(context, set.highlightColor.CGColor) - CGContextSetAlpha(context, set.highLightAlpha) - - // check outofbounds - if (CGFloat(index) < (CGFloat(delegate!.barChartRendererChartXMax(self)) * _animator.phaseX) / CGFloat(setCount)) - { - let e = set.entryForXIndex(index) as! BarChartDataEntry! - - if (e === nil || e.xIndex != index) - { - continue - } - - let groupspace = barData.groupSpace - let isStack = h.stackIndex < 0 ? false : true - - // calculate the correct x-position - let x = CGFloat(index * setCount + dataSetIndex) + groupspace / 2.0 + groupspace * CGFloat(index) - - let y1: Double - let y2: Double - - if (isStack) - { - y1 = h.range?.from ?? 0.0 - y2 = h.range?.to ?? 0.0 - } - else - { - y1 = e.value - y2 = 0.0 - } - - prepareBarHighlight(x: x, y1: y1, y2: y2, barspacehalf: barspaceHalf, trans: trans, rect: &barRect) - - CGContextFillRect(context, barRect) - - if (drawHighlightArrowEnabled) - { - CGContextSetAlpha(context, 1.0) - - // distance between highlight arrow and bar - let offsetY = _animator.phaseY * 0.07 - - CGContextSaveGState(context) - - let pixelToValueMatrix = trans.pixelToValueMatrix - let xToYRel = abs(sqrt(pixelToValueMatrix.b * pixelToValueMatrix.b + pixelToValueMatrix.d * pixelToValueMatrix.d) / sqrt(pixelToValueMatrix.a * pixelToValueMatrix.a + pixelToValueMatrix.c * pixelToValueMatrix.c)) - - let arrowWidth = set.barSpace / 2.0 - let arrowHeight = arrowWidth * xToYRel - - let yArrow = (y1 > -y2 ? y1 : y1) * Double(_animator.phaseY) - - _highlightArrowPtsBuffer[0].x = CGFloat(x) + 0.4 - _highlightArrowPtsBuffer[0].y = CGFloat(yArrow) + offsetY - _highlightArrowPtsBuffer[1].x = CGFloat(x) + 0.4 + arrowWidth - _highlightArrowPtsBuffer[1].y = CGFloat(yArrow) + offsetY - arrowHeight - _highlightArrowPtsBuffer[2].x = CGFloat(x) + 0.4 + arrowWidth - _highlightArrowPtsBuffer[2].y = CGFloat(yArrow) + offsetY + arrowHeight - - trans.pointValuesToPixel(&_highlightArrowPtsBuffer) - - CGContextBeginPath(context) - CGContextMoveToPoint(context, _highlightArrowPtsBuffer[0].x, _highlightArrowPtsBuffer[0].y) - CGContextAddLineToPoint(context, _highlightArrowPtsBuffer[1].x, _highlightArrowPtsBuffer[1].y) - CGContextAddLineToPoint(context, _highlightArrowPtsBuffer[2].x, _highlightArrowPtsBuffer[2].y) - CGContextClosePath(context) - - CGContextFillPath(context) - - CGContextRestoreGState(context) - } - } - } - - CGContextRestoreGState(context) - } - - public func getTransformedValues(trans trans: ChartTransformer, entries: [BarChartDataEntry], dataSetIndex: Int) -> [CGPoint] - { - return trans.generateTransformedValuesBarChart(entries, dataSet: dataSetIndex, barData: delegate!.barChartRendererData(self)!, phaseY: _animator.phaseY) - } - - internal func passesCheck() -> Bool - { - let barData = delegate!.barChartRendererData(self) - - if (barData === nil) - { - return false - } - - return CGFloat(barData.yValCount) < CGFloat(delegate!.barChartRendererMaxVisibleValueCount(self)) * viewPortHandler.scaleX - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/BubbleChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/BubbleChartRenderer.swift deleted file mode 100644 index 1727c67a..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/BubbleChartRenderer.swift +++ /dev/null @@ -1,306 +0,0 @@ -// -// BubbleChartRenderer.swift -// Charts -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -@objc -public protocol BubbleChartRendererDelegate -{ - func bubbleChartRendererData(renderer: BubbleChartRenderer) -> BubbleChartData! - func bubbleChartRenderer(renderer: BubbleChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - func bubbleChartDefaultRendererValueFormatter(renderer: BubbleChartRenderer) -> NSNumberFormatter! - func bubbleChartRendererChartYMax(renderer: BubbleChartRenderer) -> Double - func bubbleChartRendererChartYMin(renderer: BubbleChartRenderer) -> Double - func bubbleChartRendererChartXMax(renderer: BubbleChartRenderer) -> Double - func bubbleChartRendererChartXMin(renderer: BubbleChartRenderer) -> Double - func bubbleChartRendererMaxVisibleValueCount(renderer: BubbleChartRenderer) -> Int - func bubbleChartRendererXValCount(renderer: BubbleChartRenderer) -> Int -} - -public class BubbleChartRenderer: ChartDataRendererBase -{ - public weak var delegate: BubbleChartRendererDelegate? - - public init(delegate: BubbleChartRendererDelegate?, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - self.delegate = delegate - } - - public override func drawData(context context: CGContext?) - { - let bubbleData = delegate!.bubbleChartRendererData(self) - - for set in bubbleData.dataSets as! [BubbleChartDataSet] - { - if set.isVisible && set.entryCount > 0 - { - drawDataSet(context: context, dataSet: set) - } - } - } - - private func getShapeSize(entrySize entrySize: CGFloat, maxSize: CGFloat, reference: CGFloat) -> CGFloat - { - let factor: CGFloat = (maxSize == 0.0) ? 1.0 : sqrt(entrySize / maxSize) - let shapeSize: CGFloat = reference * factor - return shapeSize - } - - private var _pointBuffer = CGPoint() - private var _sizeBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - internal func drawDataSet(context context: CGContext?, dataSet: BubbleChartDataSet) - { - let trans = delegate!.bubbleChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - let entries = dataSet.yVals as! [BubbleChartDataEntry] - - let valueToPixelMatrix = trans.valueToPixelMatrix - - CGContextSaveGState(context) - - let entryFrom = dataSet.entryForXIndex(_minX) - let entryTo = dataSet.entryForXIndex(_maxX) - - let minx = max(dataSet.entryIndex(entry: entryFrom!, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo!, isEqual: true) + 1, entries.count) - - _sizeBuffer[0].x = 0.0 - _sizeBuffer[0].y = 0.0 - _sizeBuffer[1].x = 1.0 - _sizeBuffer[1].y = 0.0 - - trans.pointValuesToPixel(&_sizeBuffer) - - // calcualte the full width of 1 step on the x-axis - let maxBubbleWidth: CGFloat = abs(_sizeBuffer[1].x - _sizeBuffer[0].x) - let maxBubbleHeight: CGFloat = abs(viewPortHandler.contentBottom - viewPortHandler.contentTop) - let referenceSize: CGFloat = min(maxBubbleHeight, maxBubbleWidth) - - for (var j = minx; j < maxx; j++) - { - let entry = entries[j] - - _pointBuffer.x = CGFloat(entry.xIndex - minx) * phaseX + CGFloat(minx) - _pointBuffer.y = CGFloat(entry.value) * phaseY - _pointBuffer = CGPointApplyAffineTransform(_pointBuffer, valueToPixelMatrix) - - let shapeSize = getShapeSize(entrySize: entry.size, maxSize: dataSet.maxSize, reference: referenceSize) - let shapeHalf = shapeSize / 2.0 - - if (!viewPortHandler.isInBoundsTop(_pointBuffer.y + shapeHalf) - || !viewPortHandler.isInBoundsBottom(_pointBuffer.y - shapeHalf)) - { - continue - } - - if (!viewPortHandler.isInBoundsLeft(_pointBuffer.x + shapeHalf)) - { - continue - } - - if (!viewPortHandler.isInBoundsRight(_pointBuffer.x - shapeHalf)) - { - break - } - - let color = dataSet.colorAt(entry.xIndex) - - let rect = CGRect( - x: _pointBuffer.x - shapeHalf, - y: _pointBuffer.y - shapeHalf, - width: shapeSize, - height: shapeSize - ) - - CGContextSetFillColorWithColor(context, color.CGColor) - CGContextFillEllipseInRect(context, rect) - } - - CGContextRestoreGState(context) - } - - public override func drawValues(context context: CGContext?) - { - let bubbleData = delegate!.bubbleChartRendererData(self) - if (bubbleData === nil) - { - return - } - - let defaultValueFormatter = delegate!.bubbleChartDefaultRendererValueFormatter(self) - - // if values are drawn - if (bubbleData.yValCount < Int(ceil(CGFloat(delegate!.bubbleChartRendererMaxVisibleValueCount(self)) * viewPortHandler.scaleX))) - { - let dataSets = bubbleData.dataSets as! [BubbleChartDataSet] - - for dataSet in dataSets - { - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - let alpha = phaseX == 1 ? phaseY : phaseX - let valueTextColor = dataSet.valueTextColor.colorWithAlphaComponent(alpha) - - let formatter = dataSet.valueFormatter === nil ? defaultValueFormatter : dataSet.valueFormatter - - let entries = dataSet.yVals - - let entryFrom = dataSet.entryForXIndex(_minX) - let entryTo = dataSet.entryForXIndex(_maxX) - - let minx = max(dataSet.entryIndex(entry: entryFrom!, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo!, isEqual: true) + 1, entries.count) - - let positions = delegate!.bubbleChartRenderer(self, transformerForAxis: dataSet.axisDependency).generateTransformedValuesBubble(entries, phaseX: phaseX, phaseY: phaseY, from: minx, to: maxx) - - for (var j = 0, count = positions.count; j < count; j++) - { - if (!viewPortHandler.isInBoundsRight(positions[j].x)) - { - break - } - - if ((!viewPortHandler.isInBoundsLeft(positions[j].x) || !viewPortHandler.isInBoundsY(positions[j].y))) - { - continue - } - - let entry = entries[j + minx] as! BubbleChartDataEntry - - let val = entry.size - - let text = formatter!.stringFromNumber(val) - - // Larger font for larger bubbles? - let valueFont = dataSet.valueFont - let lineHeight = valueFont.lineHeight - - ChartUtils.drawText(context: context, text: text!, point: CGPoint(x: positions[j].x, y: positions[j].y - ( 0.5 * lineHeight)), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - } - } - } - - public override func drawExtras(context context: CGContext?) - { - - } - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - let bubbleData = delegate!.bubbleChartRendererData(self) - - CGContextSaveGState(context) - - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - for indice in indices - { - let dataSet = bubbleData.getDataSetByIndex(indice.dataSetIndex) as! BubbleChartDataSet! - - if (dataSet === nil || !dataSet.isHighlightEnabled) - { - continue - } - - let entryFrom = dataSet.entryForXIndex(_minX) - let entryTo = dataSet.entryForXIndex(_maxX) - - let minx = max(dataSet.entryIndex(entry: entryFrom!, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo!, isEqual: true) + 1, dataSet.entryCount) - - let entry: BubbleChartDataEntry! = bubbleData.getEntryForHighlight(indice) as! BubbleChartDataEntry - if (entry === nil || entry.xIndex != indice.xIndex) - { - continue - } - - let trans = delegate!.bubbleChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - _sizeBuffer[0].x = 0.0 - _sizeBuffer[0].y = 0.0 - _sizeBuffer[1].x = 1.0 - _sizeBuffer[1].y = 0.0 - - trans.pointValuesToPixel(&_sizeBuffer) - - // calcualte the full width of 1 step on the x-axis - let maxBubbleWidth: CGFloat = abs(_sizeBuffer[1].x - _sizeBuffer[0].x) - let maxBubbleHeight: CGFloat = abs(viewPortHandler.contentBottom - viewPortHandler.contentTop) - let referenceSize: CGFloat = min(maxBubbleHeight, maxBubbleWidth) - - _pointBuffer.x = CGFloat(entry.xIndex - minx) * phaseX + CGFloat(minx) - _pointBuffer.y = CGFloat(entry.value) * phaseY - trans.pointValueToPixel(&_pointBuffer) - - let shapeSize = getShapeSize(entrySize: entry.size, maxSize: dataSet.maxSize, reference: referenceSize) - let shapeHalf = shapeSize / 2.0 - - if (!viewPortHandler.isInBoundsTop(_pointBuffer.y + shapeHalf) - || !viewPortHandler.isInBoundsBottom(_pointBuffer.y - shapeHalf)) - { - continue - } - - if (!viewPortHandler.isInBoundsLeft(_pointBuffer.x + shapeHalf)) - { - continue - } - - if (!viewPortHandler.isInBoundsRight(_pointBuffer.x - shapeHalf)) - { - break - } - - if (indice.xIndex < minx || indice.xIndex >= maxx) - { - continue - } - - let originalColor = dataSet.colorAt(entry.xIndex) - - var h: CGFloat = 0.0 - var s: CGFloat = 0.0 - var b: CGFloat = 0.0 - var a: CGFloat = 0.0 - - originalColor.getHue(&h, saturation: &s, brightness: &b, alpha: &a) - - let color = UIColor(hue: h, saturation: s, brightness: b * 0.5, alpha: a) - let rect = CGRect( - x: _pointBuffer.x - shapeHalf, - y: _pointBuffer.y - shapeHalf, - width: shapeSize, - height: shapeSize) - - CGContextSetLineWidth(context, dataSet.highlightCircleWidth) - CGContextSetStrokeColorWithColor(context, color.CGColor) - CGContextStrokeEllipseInRect(context, rect) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/CandleStickChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/CandleStickChartRenderer.swift deleted file mode 100644 index 2db37a29..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/CandleStickChartRenderer.swift +++ /dev/null @@ -1,299 +0,0 @@ -// -// CandleStickChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -@objc -public protocol CandleStickChartRendererDelegate -{ - func candleStickChartRendererCandleData(renderer: CandleStickChartRenderer) -> CandleChartData! - func candleStickChartRenderer(renderer: CandleStickChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - func candleStickChartDefaultRendererValueFormatter(renderer: CandleStickChartRenderer) -> NSNumberFormatter! - func candleStickChartRendererChartYMax(renderer: CandleStickChartRenderer) -> Double - func candleStickChartRendererChartYMin(renderer: CandleStickChartRenderer) -> Double - func candleStickChartRendererChartXMax(renderer: CandleStickChartRenderer) -> Double - func candleStickChartRendererChartXMin(renderer: CandleStickChartRenderer) -> Double - func candleStickChartRendererMaxVisibleValueCount(renderer: CandleStickChartRenderer) -> Int -} - -public class CandleStickChartRenderer: LineScatterCandleRadarChartRenderer -{ - public weak var delegate: CandleStickChartRendererDelegate? - - public init(delegate: CandleStickChartRendererDelegate?, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - self.delegate = delegate - } - - public override func drawData(context context: CGContext?) - { - let candleData = delegate!.candleStickChartRendererCandleData(self) - - for set in candleData.dataSets as! [CandleChartDataSet] - { - if set.isVisible && set.entryCount > 0 - { - drawDataSet(context: context, dataSet: set) - } - } - } - - private var _shadowPoints = [CGPoint](count: 2, repeatedValue: CGPoint()) - private var _bodyRect = CGRect() - private var _lineSegments = [CGPoint](count: 2, repeatedValue: CGPoint()) - - internal func drawDataSet(context context: CGContext?, dataSet: CandleChartDataSet) - { - let trans = delegate!.candleStickChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - let bodySpace = dataSet.bodySpace - - var entries = dataSet.yVals as! [CandleChartDataEntry] - - let minx = max(_minX, 0) - let maxx = min(_maxX + 1, entries.count) - - CGContextSaveGState(context) - - CGContextSetLineWidth(context, dataSet.shadowWidth) - - for (var j = minx, count = Int(ceil(CGFloat(maxx - minx) * phaseX + CGFloat(minx))); j < count; j++) - { - // get the entry - let e = entries[j] - - if (e.xIndex < _minX || e.xIndex > _maxX) - { - continue - } - - // calculate the shadow - - _shadowPoints[0].x = CGFloat(e.xIndex) - _shadowPoints[0].y = CGFloat(e.high) * phaseY - _shadowPoints[1].x = CGFloat(e.xIndex) - _shadowPoints[1].y = CGFloat(e.low) * phaseY - - trans.pointValuesToPixel(&_shadowPoints) - - // draw the shadow - - var shadowColor: UIColor! = nil - if (dataSet.shadowColorSameAsCandle) - { - if (e.open > e.close) - { - shadowColor = dataSet.decreasingColor ?? dataSet.colorAt(j) - } - else if (e.open < e.close) - { - shadowColor = dataSet.increasingColor ?? dataSet.colorAt(j) - } - } - - if (shadowColor === nil) - { - shadowColor = dataSet.shadowColor ?? dataSet.colorAt(j); - } - - CGContextSetStrokeColorWithColor(context, shadowColor.CGColor) - CGContextStrokeLineSegments(context, _shadowPoints, 2) - - // calculate the body - - _bodyRect.origin.x = CGFloat(e.xIndex) - 0.5 + bodySpace - _bodyRect.origin.y = CGFloat(e.close) * phaseY - _bodyRect.size.width = (CGFloat(e.xIndex) + 0.5 - bodySpace) - _bodyRect.origin.x - _bodyRect.size.height = (CGFloat(e.open) * phaseY) - _bodyRect.origin.y - - trans.rectValueToPixel(&_bodyRect) - - // draw body differently for increasing and decreasing entry - - if (e.open > e.close) - { - let color = dataSet.decreasingColor ?? dataSet.colorAt(j) - - if (dataSet.isDecreasingFilled) - { - CGContextSetFillColorWithColor(context, color.CGColor) - CGContextFillRect(context, _bodyRect) - } - else - { - CGContextSetStrokeColorWithColor(context, color.CGColor) - CGContextStrokeRect(context, _bodyRect) - } - } - else if (e.open < e.close) - { - let color = dataSet.increasingColor ?? dataSet.colorAt(j) - - if (dataSet.isIncreasingFilled) - { - CGContextSetFillColorWithColor(context, color.CGColor) - CGContextFillRect(context, _bodyRect) - } - else - { - CGContextSetStrokeColorWithColor(context, color.CGColor) - CGContextStrokeRect(context, _bodyRect) - } - } - else - { - CGContextSetStrokeColorWithColor(context, shadowColor.CGColor) - CGContextStrokeRect(context, _bodyRect) - } - } - - CGContextRestoreGState(context) - } - - public override func drawValues(context context: CGContext?) - { - let candleData = delegate!.candleStickChartRendererCandleData(self) - if (candleData === nil) - { - return - } - - let defaultValueFormatter = delegate!.candleStickChartDefaultRendererValueFormatter(self) - - // if values are drawn - if (candleData.yValCount < Int(ceil(CGFloat(delegate!.candleStickChartRendererMaxVisibleValueCount(self)) * viewPortHandler.scaleX))) - { - var dataSets = candleData.dataSets - - for (var i = 0; i < dataSets.count; i++) - { - let dataSet = dataSets[i] - - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - let valueFont = dataSet.valueFont - let valueTextColor = dataSet.valueTextColor - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - let trans = delegate!.candleStickChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - var entries = dataSet.yVals as! [CandleChartDataEntry] - - let minx = max(_minX, 0) - let maxx = min(_maxX + 1, entries.count) - - var positions = trans.generateTransformedValuesCandle(entries, phaseY: _animator.phaseY) - - let lineHeight = valueFont.lineHeight - let yOffset: CGFloat = lineHeight + 5.0 - - for (var j = minx, count = Int(ceil(CGFloat(maxx - minx) * _animator.phaseX + CGFloat(minx))); j < count; j++) - { - let x = positions[j].x - let y = positions[j].y - - if (!viewPortHandler.isInBoundsRight(x)) - { - break - } - - if (!viewPortHandler.isInBoundsLeft(x) || !viewPortHandler.isInBoundsY(y)) - { - continue - } - - let val = entries[j].high - - ChartUtils.drawText(context: context, text: formatter!.stringFromNumber(val)!, point: CGPoint(x: x, y: y - yOffset), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - } - } - } - - public override func drawExtras(context context: CGContext?) - { - } - - private var _highlightPointBuffer = CGPoint() - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - let candleData = delegate!.candleStickChartRendererCandleData(self) - if (candleData === nil) - { - return - } - - CGContextSaveGState(context) - - for (var i = 0; i < indices.count; i++) - { - let xIndex = indices[i].xIndex; // get the x-position - - let set = candleData.getDataSetByIndex(indices[i].dataSetIndex) as! CandleChartDataSet! - - if (set === nil || !set.isHighlightEnabled) - { - continue - } - - let e = set.entryForXIndex(xIndex) as! CandleChartDataEntry! - - if (e === nil || e.xIndex != xIndex) - { - continue - } - - let trans = delegate!.candleStickChartRenderer(self, transformerForAxis: set.axisDependency) - - CGContextSetStrokeColorWithColor(context, set.highlightColor.CGColor) - CGContextSetLineWidth(context, set.highlightLineWidth) - if (set.highlightLineDashLengths != nil) - { - CGContextSetLineDash(context, set.highlightLineDashPhase, set.highlightLineDashLengths!, set.highlightLineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let low = CGFloat(e.low) * _animator.phaseY - let high = CGFloat(e.high) * _animator.phaseY - let y = (low + high) / 2.0 - - _highlightPointBuffer.x = CGFloat(xIndex) - _highlightPointBuffer.y = y - - trans.pointValueToPixel(&_highlightPointBuffer) - - // draw the lines - drawHighlightLines(context: context, point: _highlightPointBuffer, set: set) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartAxisRendererBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartAxisRendererBase.swift deleted file mode 100644 index 8f4af6f3..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartAxisRendererBase.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// ChartAxisRendererBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartAxisRendererBase: ChartRendererBase -{ - internal var transformer: ChartTransformer! - - public override init() - { - super.init() - } - - public init(viewPortHandler: ChartViewPortHandler, transformer: ChartTransformer!) - { - super.init(viewPortHandler: viewPortHandler) - - self.transformer = transformer - } - - /// Draws the axis labels on the specified context - public func renderAxisLabels(context context: CGContext?) - { - fatalError("renderAxisLabels() cannot be called on ChartAxisRendererBase") - } - - /// Draws the grid lines belonging to the axis. - public func renderGridLines(context context: CGContext?) - { - fatalError("renderGridLines() cannot be called on ChartAxisRendererBase") - } - - /// Draws the line that goes alongside the axis. - public func renderAxisLine(context context: CGContext?) - { - fatalError("renderAxisLine() cannot be called on ChartAxisRendererBase") - } - - /// Draws the LimitLines associated with this axis to the screen. - public func renderLimitLines(context context: CGContext?) - { - fatalError("renderLimitLines() cannot be called on ChartAxisRendererBase") - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartDataRendererBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartDataRendererBase.swift deleted file mode 100644 index c7211065..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartDataRendererBase.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// ChartDataRendererBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class ChartDataRendererBase: ChartRendererBase -{ - internal var _animator: ChartAnimator! - - public init(animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(viewPortHandler: viewPortHandler) - _animator = animator - } - - public func drawData(context context: CGContext?) - { - fatalError("drawData() cannot be called on ChartDataRendererBase") - } - - public func drawValues(context context: CGContext?) - { - fatalError("drawValues() cannot be called on ChartDataRendererBase") - } - - public func drawExtras(context context: CGContext?) - { - fatalError("drawExtras() cannot be called on ChartDataRendererBase") - } - - /// Draws all highlight indicators for the values that are currently highlighted. - /// - /// - parameter indices: the highlighted values - public func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - fatalError("drawHighlighted() cannot be called on ChartDataRendererBase") - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartLegendRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartLegendRenderer.swift deleted file mode 100755 index b5728b85..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartLegendRenderer.swift +++ /dev/null @@ -1,426 +0,0 @@ -// -// ChartLegendRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartLegendRenderer: ChartRendererBase -{ - /// the legend object this renderer renders - internal var _legend: ChartLegend! - - public init(viewPortHandler: ChartViewPortHandler, legend: ChartLegend?) - { - super.init(viewPortHandler: viewPortHandler) - _legend = legend - } - - /// Prepares the legend and calculates all needed forms, labels and colors. - public func computeLegend(data: ChartData) - { - if (!_legend.isLegendCustom) - { - var labels = [String?]() - var colors = [UIColor?]() - - // loop for building up the colors and labels used in the legend - for (var i = 0, count = data.dataSetCount; i < count; i++) - { - let dataSet = data.getDataSetByIndex(i)! - - var clrs: [UIColor] = dataSet.colors - let entryCount = dataSet.entryCount - - // if we have a barchart with stacked bars - if (dataSet.isKindOfClass(BarChartDataSet) && (dataSet as! BarChartDataSet).isStacked) - { - let bds = dataSet as! BarChartDataSet - var sLabels = bds.stackLabels - - for (var j = 0; j < clrs.count && j < bds.stackSize; j++) - { - labels.append(sLabels[j % sLabels.count]) - colors.append(clrs[j]) - } - - if (bds.label != nil) - { - // add the legend description label - colors.append(nil) - labels.append(bds.label) - } - } - else if (dataSet.isKindOfClass(PieChartDataSet)) - { - var xVals = data.xVals - let pds = dataSet as! PieChartDataSet - - for (var j = 0; j < clrs.count && j < entryCount && j < xVals.count; j++) - { - labels.append(xVals[j]) - colors.append(clrs[j]) - } - - if (pds.label != nil) - { - // add the legend description label - colors.append(nil) - labels.append(pds.label) - } - } - else - { // all others - - for (var j = 0; j < clrs.count && j < entryCount; j++) - { - // if multiple colors are set for a DataSet, group them - if (j < clrs.count - 1 && j < entryCount - 1) - { - labels.append(nil) - } - else - { // add label to the last entry - labels.append(dataSet.label) - } - - colors.append(clrs[j]) - } - } - } - - _legend.colors = colors + _legend._extraColors - _legend.labels = labels + _legend._extraLabels - } - - // calculate all dimensions of the legend - _legend.calculateDimensions(labelFont: _legend.font, viewPortHandler: viewPortHandler) - } - - public func renderLegend(context context: CGContext?) - { - if (_legend === nil || !_legend.enabled) - { - return - } - - let labelFont = _legend.font - let labelTextColor = _legend.textColor - let labelLineHeight = labelFont.lineHeight - let formYOffset = labelLineHeight / 2.0 - - var labels = _legend.labels - var colors = _legend.colors - - let formSize = _legend.formSize - let formToTextSpace = _legend.formToTextSpace - let xEntrySpace = _legend.xEntrySpace - let direction = _legend.direction - - // space between the entries - let stackSpace = _legend.stackSpace - - let yoffset = _legend.yOffset - let xoffset = _legend.xOffset - - let legendPosition = _legend.position - - switch (legendPosition) - { - case .BelowChartLeft: fallthrough - case .BelowChartRight: fallthrough - case .BelowChartCenter: fallthrough - case .AboveChartLeft: fallthrough - case .AboveChartRight: fallthrough - case .AboveChartCenter: - - let contentWidth: CGFloat = viewPortHandler.contentWidth - - var originPosX: CGFloat - - if (legendPosition == .BelowChartLeft || legendPosition == .AboveChartLeft) - { - originPosX = viewPortHandler.contentLeft + xoffset - - if (direction == .RightToLeft) - { - originPosX += _legend.neededWidth - } - } - else if (legendPosition == .BelowChartRight || legendPosition == .AboveChartRight) - { - originPosX = viewPortHandler.contentRight - xoffset - - if (direction == .LeftToRight) - { - originPosX -= _legend.neededWidth - } - } - else // .BelowChartCenter || .AboveChartCenter - { - originPosX = viewPortHandler.contentLeft + contentWidth / 2.0 - } - - var calculatedLineSizes = _legend.calculatedLineSizes - var calculatedLabelSizes = _legend.calculatedLabelSizes - var calculatedLabelBreakPoints = _legend.calculatedLabelBreakPoints - - var posX: CGFloat = originPosX - var posY: CGFloat - - if (legendPosition == .AboveChartLeft - || legendPosition == .AboveChartRight - || legendPosition == .AboveChartCenter) - { - posY = 0 - } - else - { - posY = viewPortHandler.chartHeight - yoffset - _legend.neededHeight - } - - var lineIndex: Int = 0 - - for (var i = 0, count = labels.count; i < count; i++) - { - if (i < calculatedLabelBreakPoints.count && calculatedLabelBreakPoints[i]) - { - posX = originPosX - posY += labelLineHeight - } - - if (posX == originPosX && legendPosition == .BelowChartCenter && lineIndex < calculatedLineSizes.count) - { - posX += (direction == .RightToLeft ? calculatedLineSizes[lineIndex].width : -calculatedLineSizes[lineIndex].width) / 2.0 - lineIndex++ - } - - let drawingForm = colors[i] != nil - let isStacked = labels[i] == nil; // grouped forms have null labels - - if (drawingForm) - { - if (direction == .RightToLeft) - { - posX -= formSize - } - - drawForm(context, x: posX, y: posY + formYOffset, colorIndex: i, legend: _legend) - - if (direction == .LeftToRight) - { - posX += formSize - } - } - - if (!isStacked) - { - if (drawingForm) - { - posX += direction == .RightToLeft ? -formToTextSpace : formToTextSpace - } - - if (direction == .RightToLeft) - { - posX -= calculatedLabelSizes[i].width - } - - drawLabel(context, x: posX, y: posY, label: labels[i]!, font: labelFont, textColor: labelTextColor) - - if (direction == .LeftToRight) - { - posX += calculatedLabelSizes[i].width - } - - posX += direction == .RightToLeft ? -xEntrySpace : xEntrySpace - } - else - { - posX += direction == .RightToLeft ? -stackSpace : stackSpace - } - } - - break - - case .PiechartCenter: fallthrough - case .RightOfChart: fallthrough - case .RightOfChartCenter: fallthrough - case .RightOfChartInside: fallthrough - case .LeftOfChart: fallthrough - case .LeftOfChartCenter: fallthrough - case .LeftOfChartInside: - - // contains the stacked legend size in pixels - var stack = CGFloat(0.0) - var wasStacked = false - var posX: CGFloat = 0.0, posY: CGFloat = 0.0 - - if (legendPosition == .PiechartCenter) - { - posX = viewPortHandler.chartWidth / 2.0 + (direction == .LeftToRight ? -_legend.textWidthMax / 2.0 : _legend.textWidthMax / 2.0) - posY = viewPortHandler.chartHeight / 2.0 - _legend.neededHeight / 2.0 + _legend.yOffset - } - else - { - let isRightAligned = legendPosition == .RightOfChart || - legendPosition == .RightOfChartCenter || - legendPosition == .RightOfChartInside - - if (isRightAligned) - { - posX = viewPortHandler.chartWidth - xoffset - if (direction == .LeftToRight) - { - posX -= _legend.textWidthMax - } - } - else - { - posX = xoffset - if (direction == .RightToLeft) - { - posX += _legend.textWidthMax - } - } - - if (legendPosition == .RightOfChart || - legendPosition == .LeftOfChart) - { - posY = viewPortHandler.contentTop + yoffset - } - else if (legendPosition == .RightOfChartCenter || - legendPosition == .LeftOfChartCenter) - { - posY = viewPortHandler.chartHeight / 2.0 - _legend.neededHeight / 2.0 - } - else /*if (legend.position == .RightOfChartInside || - legend.position == .LeftOfChartInside)*/ - { - posY = viewPortHandler.contentTop + yoffset - } - } - - for (var i = 0; i < labels.count; i++) - { - let drawingForm = colors[i] != nil - var x = posX - - if (drawingForm) - { - if (direction == .LeftToRight) - { - x += stack - } - else - { - x -= formSize - stack - } - - drawForm(context, x: x, y: posY + formYOffset, colorIndex: i, legend: _legend) - - if (direction == .LeftToRight) - { - x += formSize - } - } - - if (labels[i] != nil) - { - if (drawingForm && !wasStacked) - { - x += direction == .LeftToRight ? formToTextSpace : -formToTextSpace - } - else if (wasStacked) - { - x = posX - } - - if (direction == .RightToLeft) - { - x -= (labels[i] as NSString!).sizeWithAttributes([NSFontAttributeName: labelFont]).width - } - - if (!wasStacked) - { - drawLabel(context, x: x, y: posY, label: labels[i]!, font: labelFont, textColor: labelTextColor) - } - else - { - posY += labelLineHeight - drawLabel(context, x: x, y: posY, label: labels[i]!, font: labelFont, textColor: labelTextColor) - } - - // make a step down - posY += labelLineHeight - stack = 0.0 - } - else - { - stack += formSize + stackSpace - wasStacked = true - } - } - - break - } - } - - private var _formLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - /// Draws the Legend-form at the given position with the color at the given index. - internal func drawForm(context: CGContext?, x: CGFloat, y: CGFloat, colorIndex: Int, legend: ChartLegend) - { - let formColor = legend.colors[colorIndex] - - if (formColor === nil || formColor == UIColor.clearColor()) - { - return - } - - let formsize = legend.formSize - - CGContextSaveGState(context) - - switch (legend.form) - { - case .Circle: - CGContextSetFillColorWithColor(context, formColor!.CGColor) - CGContextFillEllipseInRect(context, CGRect(x: x, y: y - formsize / 2.0, width: formsize, height: formsize)) - break - case .Square: - CGContextSetFillColorWithColor(context, formColor!.CGColor) - CGContextFillRect(context, CGRect(x: x, y: y - formsize / 2.0, width: formsize, height: formsize)) - break - case .Line: - - CGContextSetLineWidth(context, legend.formLineWidth) - CGContextSetStrokeColorWithColor(context, formColor!.CGColor) - - _formLineSegmentsBuffer[0].x = x - _formLineSegmentsBuffer[0].y = y - _formLineSegmentsBuffer[1].x = x + formsize - _formLineSegmentsBuffer[1].y = y - CGContextStrokeLineSegments(context, _formLineSegmentsBuffer, 2) - - break - } - - CGContextRestoreGState(context) - } - - /// Draws the provided label at the given position. - internal func drawLabel(context: CGContext?, x: CGFloat, y: CGFloat, label: String, font: UIFont, textColor: UIColor) - { - ChartUtils.drawText(context: context, text: label, point: CGPoint(x: x, y: y), align: .Left, attributes: [NSFontAttributeName: font, NSForegroundColorAttributeName: textColor]) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartRendererBase.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartRendererBase.swift deleted file mode 100644 index a4369450..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartRendererBase.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// ChartRendererBase.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class ChartRendererBase: NSObject -{ - /// the component that handles the drawing area of the chart and it's offsets - public var viewPortHandler: ChartViewPortHandler! - - /// the minimum value on the x-axis that should be plotted - internal var _minX: Int = 0 - - /// the maximum value on the x-axis that should be plotted - internal var _maxX: Int = 0 - - public override init() - { - super.init() - } - - public init(viewPortHandler: ChartViewPortHandler) - { - super.init() - self.viewPortHandler = viewPortHandler - } - - /// - returns: true if the specified value fits in between the provided min and max bounds, false if not. - internal func fitsBounds(val: Double, min: Double, max: Double) -> Bool - { - if (val < min || val > max) - { - return false - } - else - { - return true - } - } - - /// Calculates the minimum and maximum x-value the chart can currently display (with the given zoom level). - public func calcXBounds(chart chart: BarLineChartViewBase, xAxisModulus: Int) - { - let low = chart.lowestVisibleXIndex - let high = chart.highestVisibleXIndex - - let subLow = (low % xAxisModulus == 0) ? xAxisModulus : 0 - - _minX = max((low / xAxisModulus) * (xAxisModulus) - subLow, 0) - _maxX = min((high / xAxisModulus) * (xAxisModulus) + xAxisModulus, Int(chart.chartXMax)) - } -} - \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRenderer.swift deleted file mode 100644 index 5be93b6e..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRenderer.swift +++ /dev/null @@ -1,339 +0,0 @@ -// -// ChartXAxisRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartXAxisRenderer: ChartAxisRendererBase -{ - internal var _xAxis: ChartXAxis! - - public init(viewPortHandler: ChartViewPortHandler, xAxis: ChartXAxis, transformer: ChartTransformer!) - { - super.init(viewPortHandler: viewPortHandler, transformer: transformer) - - _xAxis = xAxis - } - - public func computeAxis(xValAverageLength xValAverageLength: Double, xValues: [String?]) - { - var a = "" - - let max = Int(round(xValAverageLength + Double(_xAxis.spaceBetweenLabels))) - - for (var i = 0; i < max; i++) - { - a += "h" - } - - let widthText = a as NSString - - _xAxis.labelWidth = widthText.sizeWithAttributes([NSFontAttributeName: _xAxis.labelFont]).width - _xAxis.labelHeight = _xAxis.labelFont.lineHeight - _xAxis.values = xValues - } - - public override func renderAxisLabels(context context: CGContext?) - { - if (!_xAxis.isEnabled || !_xAxis.isDrawLabelsEnabled) - { - return - } - - let yoffset = CGFloat(4.0) - - if (_xAxis.labelPosition == .Top) - { - drawLabels(context: context, pos: viewPortHandler.offsetTop - _xAxis.labelHeight - yoffset) - } - else if (_xAxis.labelPosition == .Bottom) - { - drawLabels(context: context, pos: viewPortHandler.contentBottom + yoffset * 1.5) - } - else if (_xAxis.labelPosition == .BottomInside) - { - drawLabels(context: context, pos: viewPortHandler.contentBottom - _xAxis.labelHeight - yoffset) - } - else if (_xAxis.labelPosition == .TopInside) - { - drawLabels(context: context, pos: viewPortHandler.offsetTop + yoffset) - } - else - { // BOTH SIDED - drawLabels(context: context, pos: viewPortHandler.offsetTop - _xAxis.labelHeight - yoffset) - drawLabels(context: context, pos: viewPortHandler.contentBottom + yoffset * 1.6) - } - } - - private var _axisLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderAxisLine(context context: CGContext?) - { - if (!_xAxis.isEnabled || !_xAxis.isDrawAxisLineEnabled) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _xAxis.axisLineColor.CGColor) - CGContextSetLineWidth(context, _xAxis.axisLineWidth) - if (_xAxis.axisLineDashLengths != nil) - { - CGContextSetLineDash(context, _xAxis.axisLineDashPhase, _xAxis.axisLineDashLengths, _xAxis.axisLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - if (_xAxis.labelPosition == .Top - || _xAxis.labelPosition == .TopInside - || _xAxis.labelPosition == .BothSided) - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentTop - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - - if (_xAxis.labelPosition == .Bottom - || _xAxis.labelPosition == .BottomInside - || _xAxis.labelPosition == .BothSided) - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentBottom - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - - CGContextRestoreGState(context) - } - - /// draws the x-labels on the specified y-position - internal func drawLabels(context context: CGContext?, pos: CGFloat) - { - let paraStyle = NSParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle - paraStyle.alignment = .Center - - let labelAttrs = [NSFontAttributeName: _xAxis.labelFont, - NSForegroundColorAttributeName: _xAxis.labelTextColor, - NSParagraphStyleAttributeName: paraStyle] - - let valueToPixelMatrix = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - var labelMaxSize = CGSize() - - if (_xAxis.isWordWrapEnabled) - { - labelMaxSize.width = _xAxis.wordWrapWidthPercent * valueToPixelMatrix.a - } - - for (var i = _minX, maxX = min(_maxX + 1, _xAxis.values.count); i < maxX; i += _xAxis.axisLabelModulus) - { - let label = _xAxis.values[i] - if (label == nil) - { - continue - } - - position.x = CGFloat(i) - position.y = 0.0 - position = CGPointApplyAffineTransform(position, valueToPixelMatrix) - - if (viewPortHandler.isInBoundsX(position.x)) - { - let labelns = label! as NSString - - if (_xAxis.isAvoidFirstLastClippingEnabled) - { - // avoid clipping of the last - if (i == _xAxis.values.count - 1 && _xAxis.values.count > 1) - { - let width = labelns.boundingRectWithSize(labelMaxSize, options: .UsesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width - - if (width > viewPortHandler.offsetRight * 2.0 - && position.x + width > viewPortHandler.chartWidth) - { - position.x -= width / 2.0 - } - } - else if (i == 0) - { // avoid clipping of the first - let width = labelns.boundingRectWithSize(labelMaxSize, options: .UsesLineFragmentOrigin, attributes: labelAttrs, context: nil).size.width - position.x += width / 2.0 - } - } - - drawLabel(context: context, label: label!, xIndex: i, x: position.x, y: pos, align: .Center, attributes: labelAttrs, constrainedToSize: labelMaxSize) - } - } - } - - internal func drawLabel(context context: CGContext?, label: String, xIndex: Int, x: CGFloat, y: CGFloat, align: NSTextAlignment, attributes: [String: NSObject], constrainedToSize: CGSize) - { - let formattedLabel = _xAxis.valueFormatter?.stringForXValue(xIndex, original: label, viewPortHandler: viewPortHandler) ?? label - ChartUtils.drawMultilineText(context: context, text: formattedLabel, point: CGPoint(x: x, y: y), align: align, attributes: attributes, constrainedToSize: constrainedToSize) - } - - private var _gridLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderGridLines(context context: CGContext?) - { - if (!_xAxis.isDrawGridLinesEnabled || !_xAxis.isEnabled) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _xAxis.gridColor.CGColor) - CGContextSetLineWidth(context, _xAxis.gridLineWidth) - if (_xAxis.gridLineDashLengths != nil) - { - CGContextSetLineDash(context, _xAxis.gridLineDashPhase, _xAxis.gridLineDashLengths, _xAxis.gridLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let valueToPixelMatrix = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - for (var i = _minX; i <= _maxX; i += _xAxis.axisLabelModulus) - { - position.x = CGFloat(i) - position.y = 0.0 - position = CGPointApplyAffineTransform(position, valueToPixelMatrix) - - if (position.x >= viewPortHandler.offsetLeft - && position.x <= viewPortHandler.chartWidth) - { - _gridLineSegmentsBuffer[0].x = position.x - _gridLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _gridLineSegmentsBuffer[1].x = position.x - _gridLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _gridLineSegmentsBuffer, 2) - } - } - - CGContextRestoreGState(context) - } - - private var _limitLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderLimitLines(context context: CGContext?) - { - var limitLines = _xAxis.limitLines - - if (limitLines.count == 0) - { - return - } - - CGContextSaveGState(context) - - let trans = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - for (var i = 0; i < limitLines.count; i++) - { - let l = limitLines[i] - - position.x = CGFloat(l.limit) - position.y = 0.0 - position = CGPointApplyAffineTransform(position, trans) - - _limitLineSegmentsBuffer[0].x = position.x - _limitLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _limitLineSegmentsBuffer[1].x = position.x - _limitLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - - CGContextSetStrokeColorWithColor(context, l.lineColor.CGColor) - CGContextSetLineWidth(context, l.lineWidth) - if (l.lineDashLengths != nil) - { - CGContextSetLineDash(context, l.lineDashPhase, l.lineDashLengths!, l.lineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - CGContextStrokeLineSegments(context, _limitLineSegmentsBuffer, 2) - - let label = l.label - - // if drawing the limit-value label is enabled - if (label.characters.count > 0) - { - let labelLineHeight = l.valueFont.lineHeight - - let add = CGFloat(4.0) - let xOffset: CGFloat = l.lineWidth - let yOffset: CGFloat = add / 2.0 - - if (l.labelPosition == .RightTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x + xOffset, - y: viewPortHandler.contentTop + yOffset), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .RightBottom) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x + xOffset, - y: viewPortHandler.contentBottom - labelLineHeight - yOffset), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .LeftTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x - xOffset, - y: viewPortHandler.contentTop + yOffset), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x - xOffset, - y: viewPortHandler.contentBottom - labelLineHeight - yOffset), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - } - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift deleted file mode 100644 index 8c1c96e0..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift +++ /dev/null @@ -1,151 +0,0 @@ -// -// ChartXAxisRendererBarChart.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartXAxisRendererBarChart: ChartXAxisRenderer -{ - internal weak var _chart: BarChartView! - - public init(viewPortHandler: ChartViewPortHandler, xAxis: ChartXAxis, transformer: ChartTransformer!, chart: BarChartView) - { - super.init(viewPortHandler: viewPortHandler, xAxis: xAxis, transformer: transformer) - - self._chart = chart - } - - /// draws the x-labels on the specified y-position - internal override func drawLabels(context context: CGContext?, pos: CGFloat) - { - if (_chart.data === nil) - { - return - } - - let paraStyle = NSParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle - paraStyle.alignment = .Center - - let labelAttrs = [NSFontAttributeName: _xAxis.labelFont, - NSForegroundColorAttributeName: _xAxis.labelTextColor, - NSParagraphStyleAttributeName: paraStyle] - - let barData = _chart.data as! BarChartData - let step = barData.dataSetCount - - let valueToPixelMatrix = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - var labelMaxSize = CGSize() - - if (_xAxis.isWordWrapEnabled) - { - labelMaxSize.width = _xAxis.wordWrapWidthPercent * valueToPixelMatrix.a - } - - for (var i = _minX, maxX = min(_maxX + 1, _xAxis.values.count); i < maxX; i += _xAxis.axisLabelModulus) - { - let label = i >= 0 && i < _xAxis.values.count ? _xAxis.values[i] : nil - if (label == nil) - { - continue - } - - position.x = CGFloat(i * step) + CGFloat(i) * barData.groupSpace + barData.groupSpace / 2.0 - position.y = 0.0 - - // consider groups (center label for each group) - if (step > 1) - { - position.x += (CGFloat(step) - 1.0) / 2.0 - } - - position = CGPointApplyAffineTransform(position, valueToPixelMatrix) - - if (viewPortHandler.isInBoundsX(position.x)) - { - if (_xAxis.isAvoidFirstLastClippingEnabled) - { - // avoid clipping of the last - if (i == _xAxis.values.count - 1) - { - let width = label!.sizeWithAttributes(labelAttrs).width - - if (width > viewPortHandler.offsetRight * 2.0 - && position.x + width > viewPortHandler.chartWidth) - { - position.x -= width / 2.0 - } - } - else if (i == 0) - { // avoid clipping of the first - let width = label!.sizeWithAttributes(labelAttrs).width - position.x += width / 2.0 - } - } - - drawLabel(context: context, label: label!, xIndex: i, x: position.x, y: pos, align: .Center, attributes: labelAttrs, constrainedToSize: labelMaxSize) - } - } - } - - private var _gridLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderGridLines(context context: CGContext?) - { - if (!_xAxis.isDrawGridLinesEnabled || !_xAxis.isEnabled) - { - return - } - - let barData = _chart.data as! BarChartData - let step = barData.dataSetCount - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _xAxis.gridColor.CGColor) - CGContextSetLineWidth(context, _xAxis.gridLineWidth) - if (_xAxis.gridLineDashLengths != nil) - { - CGContextSetLineDash(context, _xAxis.gridLineDashPhase, _xAxis.gridLineDashLengths, _xAxis.gridLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let valueToPixelMatrix = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - for (var i = _minX; i < _maxX; i += _xAxis.axisLabelModulus) - { - position.x = CGFloat(i * step) + CGFloat(i) * barData.groupSpace - 0.5 - position.y = 0.0 - position = CGPointApplyAffineTransform(position, valueToPixelMatrix) - - if (viewPortHandler.isInBoundsX(position.x)) - { - _gridLineSegmentsBuffer[0].x = position.x - _gridLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _gridLineSegmentsBuffer[1].x = position.x - _gridLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _gridLineSegmentsBuffer, 2) - } - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift deleted file mode 100644 index 69d3f2eb..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift +++ /dev/null @@ -1,307 +0,0 @@ -// -// ChartXAxisRendererHorizontalBarChart.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartXAxisRendererHorizontalBarChart: ChartXAxisRendererBarChart -{ - public override init(viewPortHandler: ChartViewPortHandler, xAxis: ChartXAxis, transformer: ChartTransformer!, chart: BarChartView) - { - super.init(viewPortHandler: viewPortHandler, xAxis: xAxis, transformer: transformer, chart: chart) - } - - public override func computeAxis(xValAverageLength xValAverageLength: Double, xValues: [String?]) - { - _xAxis.values = xValues - - let longest = _xAxis.getLongestLabel() as NSString - let longestSize = longest.sizeWithAttributes([NSFontAttributeName: _xAxis.labelFont]) - _xAxis.labelWidth = floor(longestSize.width + _xAxis.xOffset * 3.5) - _xAxis.labelHeight = longestSize.height - } - - public override func renderAxisLabels(context context: CGContext?) - { - if (!_xAxis.isEnabled || !_xAxis.isDrawLabelsEnabled || _chart.data === nil) - { - return - } - - let xoffset = _xAxis.xOffset - - if (_xAxis.labelPosition == .Top) - { - drawLabels(context: context, pos: viewPortHandler.contentRight + xoffset, align: .Left) - } - else if (_xAxis.labelPosition == .Bottom) - { - drawLabels(context: context, pos: viewPortHandler.contentLeft - xoffset, align: .Right) - } - else if (_xAxis.labelPosition == .BottomInside) - { - drawLabels(context: context, pos: viewPortHandler.contentLeft + xoffset, align: .Left) - } - else if (_xAxis.labelPosition == .TopInside) - { - drawLabels(context: context, pos: viewPortHandler.contentRight - xoffset, align: .Right) - } - else - { // BOTH SIDED - drawLabels(context: context, pos: viewPortHandler.contentLeft - xoffset, align: .Right) - drawLabels(context: context, pos: viewPortHandler.contentRight + xoffset, align: .Left) - } - } - - /// draws the x-labels on the specified y-position - internal func drawLabels(context context: CGContext?, pos: CGFloat, align: NSTextAlignment) - { - let labelFont = _xAxis.labelFont - let labelTextColor = _xAxis.labelTextColor - - // pre allocate to save performance (dont allocate in loop) - var position = CGPoint(x: 0.0, y: 0.0) - - let bd = _chart.data as! BarChartData - let step = bd.dataSetCount - - for (var i = _minX, maxX = min(_maxX + 1, _xAxis.values.count); i < maxX; i += _xAxis.axisLabelModulus) - { - let label = _xAxis.values[i] - - if (label == nil) - { - continue - } - - position.x = 0.0 - position.y = CGFloat(i * step) + CGFloat(i) * bd.groupSpace + bd.groupSpace / 2.0 - - // consider groups (center label for each group) - if (step > 1) - { - position.y += (CGFloat(step) - 1.0) / 2.0 - } - - transformer.pointValueToPixel(&position) - - if (viewPortHandler.isInBoundsY(position.y)) - { - drawLabel(context: context, label: label!, xIndex: i, x: pos, y: position.y - _xAxis.labelHeight / 2.0, align: align, attributes: [NSFontAttributeName: labelFont, NSForegroundColorAttributeName: labelTextColor]) - } - } - } - - internal func drawLabel(context context: CGContext?, label: String, xIndex: Int, x: CGFloat, y: CGFloat, align: NSTextAlignment, attributes: [String: NSObject]) - { - let formattedLabel = _xAxis.valueFormatter?.stringForXValue(xIndex, original: label, viewPortHandler: viewPortHandler) ?? label - ChartUtils.drawText(context: context, text: formattedLabel, point: CGPoint(x: x, y: y), align: align, attributes: attributes) - } - - private var _gridLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderGridLines(context context: CGContext?) - { - if (!_xAxis.isEnabled || !_xAxis.isDrawGridLinesEnabled || _chart.data === nil) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _xAxis.gridColor.CGColor) - CGContextSetLineWidth(context, _xAxis.gridLineWidth) - if (_xAxis.gridLineDashLengths != nil) - { - CGContextSetLineDash(context, _xAxis.gridLineDashPhase, _xAxis.gridLineDashLengths, _xAxis.gridLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - var position = CGPoint(x: 0.0, y: 0.0) - - let bd = _chart.data as! BarChartData - - // take into consideration that multiple DataSets increase _deltaX - let step = bd.dataSetCount - - for (var i = _minX, maxX = min(_maxX + 1, _xAxis.values.count); i < maxX; i += _xAxis.axisLabelModulus) - { - position.x = 0.0 - position.y = CGFloat(i * step) + CGFloat(i) * bd.groupSpace - 0.5 - - transformer.pointValueToPixel(&position) - - if (viewPortHandler.isInBoundsY(position.y)) - { - _gridLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _gridLineSegmentsBuffer[0].y = position.y - _gridLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _gridLineSegmentsBuffer[1].y = position.y - CGContextStrokeLineSegments(context, _gridLineSegmentsBuffer, 2) - } - } - - CGContextRestoreGState(context) - } - - private var _axisLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderAxisLine(context context: CGContext?) - { - if (!_xAxis.isEnabled || !_xAxis.isDrawAxisLineEnabled) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _xAxis.axisLineColor.CGColor) - CGContextSetLineWidth(context, _xAxis.axisLineWidth) - if (_xAxis.axisLineDashLengths != nil) - { - CGContextSetLineDash(context, _xAxis.axisLineDashPhase, _xAxis.axisLineDashLengths, _xAxis.axisLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - if (_xAxis.labelPosition == .Top - || _xAxis.labelPosition == .TopInside - || _xAxis.labelPosition == .BothSided) - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - - if (_xAxis.labelPosition == .Bottom - || _xAxis.labelPosition == .BottomInside - || _xAxis.labelPosition == .BothSided) - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - - CGContextRestoreGState(context) - } - - private var _limitLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderLimitLines(context context: CGContext?) - { - var limitLines = _xAxis.limitLines - - if (limitLines.count == 0) - { - return - } - - CGContextSaveGState(context) - - let trans = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - for (var i = 0; i < limitLines.count; i++) - { - let l = limitLines[i] - - position.x = 0.0 - position.y = CGFloat(l.limit) - position = CGPointApplyAffineTransform(position, trans) - - _limitLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _limitLineSegmentsBuffer[0].y = position.y - _limitLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _limitLineSegmentsBuffer[1].y = position.y - - CGContextSetStrokeColorWithColor(context, l.lineColor.CGColor) - CGContextSetLineWidth(context, l.lineWidth) - if (l.lineDashLengths != nil) - { - CGContextSetLineDash(context, l.lineDashPhase, l.lineDashLengths!, l.lineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - CGContextStrokeLineSegments(context, _limitLineSegmentsBuffer, 2) - - let label = l.label - - // if drawing the limit-value label is enabled - if (label.characters.count > 0) - { - let labelLineHeight = l.valueFont.lineHeight - - let add = CGFloat(4.0) - let xOffset: CGFloat = add - let yOffset: CGFloat = l.lineWidth + labelLineHeight - - if (l.labelPosition == .RightTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentRight - xOffset, - y: position.y - yOffset), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .RightBottom) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentRight - xOffset, - y: position.y + yOffset - labelLineHeight), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .LeftTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentLeft + xOffset, - y: position.y - yOffset), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentLeft + xOffset, - y: position.y + yOffset - labelLineHeight), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - } - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift deleted file mode 100644 index 0d27462d..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// ChartXAxisRendererRadarChart.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartXAxisRendererRadarChart: ChartXAxisRenderer -{ - private weak var _chart: RadarChartView! - - public init(viewPortHandler: ChartViewPortHandler, xAxis: ChartXAxis, chart: RadarChartView) - { - super.init(viewPortHandler: viewPortHandler, xAxis: xAxis, transformer: nil) - - _chart = chart - } - - public override func renderAxisLabels(context context: CGContext?) - { - if (!_xAxis.isEnabled || !_xAxis.isDrawLabelsEnabled) - { - return - } - - let labelFont = _xAxis.labelFont - let labelTextColor = _xAxis.labelTextColor - - let sliceangle = _chart.sliceAngle - - // calculate the factor that is needed for transforming the value to pixels - let factor = _chart.factor - - let center = _chart.centerOffsets - - let modulus = _xAxis.axisLabelModulus - for var i = 0, count = _xAxis.values.count; i < count; i += modulus - { - let label = _xAxis.values[i] - - if (label == nil) - { - continue - } - - let angle = (sliceangle * CGFloat(i) + _chart.rotationAngle) % 360.0 - - let p = ChartUtils.getPosition(center: center, dist: CGFloat(_chart.yRange) * factor + _xAxis.labelWidth / 2.0, angle: angle) - - drawLabel(context: context, label: label!, xIndex: i, x: p.x, y: p.y - _xAxis.labelHeight / 2.0, align: .Center, attributes: [NSFontAttributeName: labelFont, NSForegroundColorAttributeName: labelTextColor]) - } - } - - internal func drawLabel(context context: CGContext?, label: String, xIndex: Int, x: CGFloat, y: CGFloat, align: NSTextAlignment, attributes: [String: NSObject]) - { - let formattedLabel = _xAxis.valueFormatter?.stringForXValue(xIndex, original: label, viewPortHandler: viewPortHandler) ?? label - ChartUtils.drawText(context: context, text: formattedLabel, point: CGPoint(x: x, y: y), align: align, attributes: attributes) - } - - public override func renderLimitLines(context context: CGContext?) - { - /// XAxis LimitLines on RadarChart not yet supported. - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRenderer.swift deleted file mode 100644 index c4123db1..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRenderer.swift +++ /dev/null @@ -1,409 +0,0 @@ -// -// ChartYAxisRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartYAxisRenderer: ChartAxisRendererBase -{ - internal var _yAxis: ChartYAxis! - - public init(viewPortHandler: ChartViewPortHandler, yAxis: ChartYAxis, transformer: ChartTransformer!) - { - super.init(viewPortHandler: viewPortHandler, transformer: transformer) - - _yAxis = yAxis - } - - /// Computes the axis values. - public func computeAxis(var yMin yMin: Double, var yMax: Double) - { - // calculate the starting and entry point of the y-labels (depending on - // zoom / contentrect bounds) - if (viewPortHandler.contentWidth > 10.0 && !viewPortHandler.isFullyZoomedOutY) - { - let p1 = transformer.getValueByTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) - let p2 = transformer.getValueByTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentBottom)) - - if (!_yAxis.isInverted) - { - yMin = Double(p2.y) - yMax = Double(p1.y) - } - else - { - yMin = Double(p1.y) - yMax = Double(p2.y) - } - } - - computeAxisValues(min: yMin, max: yMax) - } - - /// Sets up the y-axis labels. Computes the desired number of labels between - /// the two given extremes. Unlike the papareXLabels() method, this method - /// needs to be called upon every refresh of the view. - internal func computeAxisValues(min min: Double, max: Double) - { - let yMin = min - let yMax = max - - let labelCount = _yAxis.labelCount - let range = abs(yMax - yMin) - - if (labelCount == 0 || range <= 0) - { - _yAxis.entries = [Double]() - return - } - - let rawInterval = range / Double(labelCount) - var interval = ChartUtils.roundToNextSignificant(number: Double(rawInterval)) - let intervalMagnitude = pow(10.0, round(log10(interval))) - let intervalSigDigit = (interval / intervalMagnitude) - if (intervalSigDigit > 5) - { - // Use one order of magnitude higher, to avoid intervals like 0.9 or 90 - interval = floor(10.0 * intervalMagnitude) - } - - // force label count - if _yAxis.isForceLabelsEnabled - { - let step = Double(range) / Double(labelCount - 1) - - if _yAxis.entries.count < labelCount - { - // Ensure stops contains at least numStops elements. - _yAxis.entries.removeAll(keepCapacity: true) - } - else - { - _yAxis.entries = [Double]() - _yAxis.entries.reserveCapacity(labelCount) - } - - var v = yMin - - for (var i = 0; i < labelCount; i++) - { - _yAxis.entries.append(v) - v += step - } - - } - else - { - // no forced count - - // if the labels should only show min and max - if (_yAxis.isShowOnlyMinMaxEnabled) - { - _yAxis.entries = [yMin, yMax] - } - else - { - let first = ceil(Double(yMin) / interval) * interval - let last = ChartUtils.nextUp(floor(Double(yMax) / interval) * interval) - - var f: Double - var i: Int - var n = 0 - for (f = first; f <= last; f += interval) - { - ++n - } - - if (_yAxis.entries.count < n) - { - // Ensure stops contains at least numStops elements. - _yAxis.entries = [Double](count: n, repeatedValue: 0.0) - } - else if (_yAxis.entries.count > n) - { - _yAxis.entries.removeRange(n..<_yAxis.entries.count) - } - - for (f = first, i = 0; i < n; f += interval, ++i) - { - _yAxis.entries[i] = Double(f) - } - } - } - } - - /// draws the y-axis labels to the screen - public override func renderAxisLabels(context context: CGContext?) - { - if (!_yAxis.isEnabled || !_yAxis.isDrawLabelsEnabled) - { - return - } - - let xoffset = _yAxis.xOffset - let yoffset = _yAxis.labelFont.lineHeight / 2.5 + _yAxis.yOffset - - let dependency = _yAxis.axisDependency - let labelPosition = _yAxis.labelPosition - - var xPos = CGFloat(0.0) - - var textAlign: NSTextAlignment - - if (dependency == .Left) - { - if (labelPosition == .OutsideChart) - { - textAlign = .Right - xPos = viewPortHandler.offsetLeft - xoffset - } - else - { - textAlign = .Left - xPos = viewPortHandler.offsetLeft + xoffset - } - - } - else - { - if (labelPosition == .OutsideChart) - { - textAlign = .Left - xPos = viewPortHandler.contentRight + xoffset - } - else - { - textAlign = .Right - xPos = viewPortHandler.contentRight - xoffset - } - } - - drawYLabels(context: context, fixedPosition: xPos, offset: yoffset - _yAxis.labelFont.lineHeight, textAlign: textAlign) - } - - private var _axisLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderAxisLine(context context: CGContext?) - { - if (!_yAxis.isEnabled || !_yAxis.drawAxisLineEnabled) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _yAxis.axisLineColor.CGColor) - CGContextSetLineWidth(context, _yAxis.axisLineWidth) - if (_yAxis.axisLineDashLengths != nil) - { - CGContextSetLineDash(context, _yAxis.axisLineDashPhase, _yAxis.axisLineDashLengths, _yAxis.axisLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - if (_yAxis.axisDependency == .Left) - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - else - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - - CGContextRestoreGState(context) - } - - /// draws the y-labels on the specified x-position - internal func drawYLabels(context context: CGContext?, fixedPosition: CGFloat, offset: CGFloat, textAlign: NSTextAlignment) - { - let labelFont = _yAxis.labelFont - let labelTextColor = _yAxis.labelTextColor - - let valueToPixelMatrix = transformer.valueToPixelMatrix - - var pt = CGPoint() - - for (var i = 0; i < _yAxis.entryCount; i++) - { - let text = _yAxis.getFormattedLabel(i) - - if (!_yAxis.isDrawTopYLabelEntryEnabled && i >= _yAxis.entryCount - 1) - { - break - } - - pt.x = 0 - pt.y = CGFloat(_yAxis.entries[i]) - pt = CGPointApplyAffineTransform(pt, valueToPixelMatrix) - - pt.x = fixedPosition - pt.y += offset - - ChartUtils.drawText(context: context, text: text, point: pt, align: textAlign, attributes: [NSFontAttributeName: labelFont, NSForegroundColorAttributeName: labelTextColor]) - } - } - - private var _gridLineBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderGridLines(context context: CGContext?) - { - if (!_yAxis.isDrawGridLinesEnabled || !_yAxis.isEnabled) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _yAxis.gridColor.CGColor) - CGContextSetLineWidth(context, _yAxis.gridLineWidth) - if (_yAxis.gridLineDashLengths != nil) - { - CGContextSetLineDash(context, _yAxis.gridLineDashPhase, _yAxis.gridLineDashLengths, _yAxis.gridLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let valueToPixelMatrix = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - // draw the horizontal grid - for (var i = 0, count = _yAxis.entryCount; i < count; i++) - { - position.x = 0.0 - position.y = CGFloat(_yAxis.entries[i]) - position = CGPointApplyAffineTransform(position, valueToPixelMatrix) - - _gridLineBuffer[0].x = viewPortHandler.contentLeft - _gridLineBuffer[0].y = position.y - _gridLineBuffer[1].x = viewPortHandler.contentRight - _gridLineBuffer[1].y = position.y - CGContextStrokeLineSegments(context, _gridLineBuffer, 2) - } - - CGContextRestoreGState(context) - } - - private var _limitLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderLimitLines(context context: CGContext?) - { - var limitLines = _yAxis.limitLines - - if (limitLines.count == 0) - { - return - } - - CGContextSaveGState(context) - - let trans = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - for (var i = 0; i < limitLines.count; i++) - { - let l = limitLines[i] - - position.x = 0.0 - position.y = CGFloat(l.limit) - position = CGPointApplyAffineTransform(position, trans) - - _limitLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _limitLineSegmentsBuffer[0].y = position.y - _limitLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _limitLineSegmentsBuffer[1].y = position.y - - CGContextSetStrokeColorWithColor(context, l.lineColor.CGColor) - CGContextSetLineWidth(context, l.lineWidth) - if (l.lineDashLengths != nil) - { - CGContextSetLineDash(context, l.lineDashPhase, l.lineDashLengths!, l.lineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - CGContextStrokeLineSegments(context, _limitLineSegmentsBuffer, 2) - - let label = l.label - - // if drawing the limit-value label is enabled - if (label.characters.count > 0) - { - let labelLineHeight = l.valueFont.lineHeight - - let add = CGFloat(4.0) - let xOffset: CGFloat = add - let yOffset: CGFloat = l.lineWidth + labelLineHeight - - if (l.labelPosition == .RightTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentRight - xOffset, - y: position.y - yOffset), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .RightBottom) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentRight - xOffset, - y: position.y + yOffset - labelLineHeight), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .LeftTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentLeft + xOffset, - y: position.y - yOffset), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: viewPortHandler.contentLeft + xOffset, - y: position.y + yOffset - labelLineHeight), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - } - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift deleted file mode 100644 index 3848994e..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift +++ /dev/null @@ -1,304 +0,0 @@ -// -// ChartYAxisRendererHorizontalBarChart.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartYAxisRendererHorizontalBarChart: ChartYAxisRenderer -{ - public override init(viewPortHandler: ChartViewPortHandler, yAxis: ChartYAxis, transformer: ChartTransformer!) - { - super.init(viewPortHandler: viewPortHandler, yAxis: yAxis, transformer: transformer) - } - - /// Computes the axis values. - public override func computeAxis(var yMin yMin: Double, var yMax: Double) - { - // calculate the starting and entry point of the y-labels (depending on zoom / contentrect bounds) - if (viewPortHandler.contentHeight > 10.0 && !viewPortHandler.isFullyZoomedOutX) - { - let p1 = transformer.getValueByTouchPoint(CGPoint(x: viewPortHandler.contentLeft, y: viewPortHandler.contentTop)) - let p2 = transformer.getValueByTouchPoint(CGPoint(x: viewPortHandler.contentRight, y: viewPortHandler.contentTop)) - - if (!_yAxis.isInverted) - { - yMin = Double(p1.x) - yMax = Double(p2.x) - } - else - { - yMin = Double(p2.x) - yMax = Double(p1.x) - } - } - - computeAxisValues(min: yMin, max: yMax) - } - - /// draws the y-axis labels to the screen - public override func renderAxisLabels(context context: CGContext?) - { - if (!_yAxis.isEnabled || !_yAxis.isDrawLabelsEnabled) - { - return - } - - var positions = [CGPoint]() - positions.reserveCapacity(_yAxis.entries.count) - - for (var i = 0; i < _yAxis.entries.count; i++) - { - positions.append(CGPoint(x: CGFloat(_yAxis.entries[i]), y: 0.0)) - } - - transformer.pointValuesToPixel(&positions) - - let lineHeight = _yAxis.labelFont.lineHeight - let baseYOffset: CGFloat = 2.5 - - let dependency = _yAxis.axisDependency - let labelPosition = _yAxis.labelPosition - - var yPos: CGFloat = 0.0 - - if (dependency == .Left) - { - if (labelPosition == .OutsideChart) - { - yPos = viewPortHandler.contentTop - baseYOffset - } - else - { - yPos = viewPortHandler.contentTop - baseYOffset - } - } - else - { - if (labelPosition == .OutsideChart) - { - yPos = viewPortHandler.contentBottom + lineHeight + baseYOffset - } - else - { - yPos = viewPortHandler.contentBottom + lineHeight + baseYOffset - } - } - - // For compatibility with Android code, we keep above calculation the same, - // And here we pull the line back up - yPos -= lineHeight - - drawYLabels(context: context, fixedPosition: yPos, positions: positions, offset: _yAxis.yOffset) - } - - private var _axisLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderAxisLine(context context: CGContext?) - { - if (!_yAxis.isEnabled || !_yAxis.drawAxisLineEnabled) - { - return - } - - CGContextSaveGState(context) - - CGContextSetStrokeColorWithColor(context, _yAxis.axisLineColor.CGColor) - CGContextSetLineWidth(context, _yAxis.axisLineWidth) - if (_yAxis.axisLineDashLengths != nil) - { - CGContextSetLineDash(context, _yAxis.axisLineDashPhase, _yAxis.axisLineDashLengths, _yAxis.axisLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - if (_yAxis.axisDependency == .Left) - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentTop - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - else - { - _axisLineSegmentsBuffer[0].x = viewPortHandler.contentLeft - _axisLineSegmentsBuffer[0].y = viewPortHandler.contentBottom - _axisLineSegmentsBuffer[1].x = viewPortHandler.contentRight - _axisLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - CGContextStrokeLineSegments(context, _axisLineSegmentsBuffer, 2) - } - - CGContextRestoreGState(context) - } - - /// draws the y-labels on the specified x-position - internal func drawYLabels(context context: CGContext?, fixedPosition: CGFloat, positions: [CGPoint], offset: CGFloat) - { - let labelFont = _yAxis.labelFont - let labelTextColor = _yAxis.labelTextColor - - for (var i = 0; i < _yAxis.entryCount; i++) - { - let text = _yAxis.getFormattedLabel(i) - - if (!_yAxis.isDrawTopYLabelEntryEnabled && i >= _yAxis.entryCount - 1) - { - return - } - - ChartUtils.drawText(context: context, text: text, point: CGPoint(x: positions[i].x, y: fixedPosition - offset), align: .Center, attributes: [NSFontAttributeName: labelFont, NSForegroundColorAttributeName: labelTextColor]) - } - } - - public override func renderGridLines(context context: CGContext?) - { - if (!_yAxis.isEnabled || !_yAxis.isDrawGridLinesEnabled) - { - return - } - - CGContextSaveGState(context) - - // pre alloc - var position = CGPoint() - - CGContextSetStrokeColorWithColor(context, _yAxis.gridColor.CGColor) - CGContextSetLineWidth(context, _yAxis.gridLineWidth) - if (_yAxis.gridLineDashLengths != nil) - { - CGContextSetLineDash(context, _yAxis.gridLineDashPhase, _yAxis.gridLineDashLengths, _yAxis.gridLineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - // draw the horizontal grid - for (var i = 0; i < _yAxis.entryCount; i++) - { - position.x = CGFloat(_yAxis.entries[i]) - position.y = 0.0 - transformer.pointValueToPixel(&position) - - CGContextBeginPath(context) - CGContextMoveToPoint(context, position.x, viewPortHandler.contentTop) - CGContextAddLineToPoint(context, position.x, viewPortHandler.contentBottom) - CGContextStrokePath(context) - } - - CGContextRestoreGState(context) - } - - private var _limitLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - public override func renderLimitLines(context context: CGContext?) - { - var limitLines = _yAxis.limitLines - - if (limitLines.count <= 0) - { - return - } - - CGContextSaveGState(context) - - let trans = transformer.valueToPixelMatrix - - var position = CGPoint(x: 0.0, y: 0.0) - - for (var i = 0; i < limitLines.count; i++) - { - let l = limitLines[i] - - position.x = CGFloat(l.limit) - position.y = 0.0 - position = CGPointApplyAffineTransform(position, trans) - - _limitLineSegmentsBuffer[0].x = position.x - _limitLineSegmentsBuffer[0].y = viewPortHandler.contentTop - _limitLineSegmentsBuffer[1].x = position.x - _limitLineSegmentsBuffer[1].y = viewPortHandler.contentBottom - - CGContextSetStrokeColorWithColor(context, l.lineColor.CGColor) - CGContextSetLineWidth(context, l.lineWidth) - if (l.lineDashLengths != nil) - { - CGContextSetLineDash(context, l.lineDashPhase, l.lineDashLengths!, l.lineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - CGContextStrokeLineSegments(context, _limitLineSegmentsBuffer, 2) - - let label = l.label - - // if drawing the limit-value label is enabled - if (label.characters.count > 0) - { - let labelLineHeight = l.valueFont.lineHeight - - let add = CGFloat(4.0) - let xOffset: CGFloat = l.lineWidth - let yOffset: CGFloat = add / 2.0 - - if (l.labelPosition == .RightTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x + xOffset, - y: viewPortHandler.contentTop + yOffset), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .RightBottom) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x + xOffset, - y: viewPortHandler.contentBottom - labelLineHeight - yOffset), - align: .Left, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else if (l.labelPosition == .LeftTop) - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x - xOffset, - y: viewPortHandler.contentTop + yOffset), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - else - { - ChartUtils.drawText(context: context, - text: label, - point: CGPoint( - x: position.x - xOffset, - y: viewPortHandler.contentBottom - labelLineHeight - yOffset), - align: .Right, - attributes: [NSFontAttributeName: l.valueFont, NSForegroundColorAttributeName: l.valueTextColor]) - } - } - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift deleted file mode 100644 index a4a59912..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift +++ /dev/null @@ -1,244 +0,0 @@ -// -// ChartYAxisRendererRadarChart.swift -// Charts -// -// Created by Daniel Cohen Gindi on 3/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class ChartYAxisRendererRadarChart: ChartYAxisRenderer -{ - private weak var _chart: RadarChartView! - - public init(viewPortHandler: ChartViewPortHandler, yAxis: ChartYAxis, chart: RadarChartView) - { - super.init(viewPortHandler: viewPortHandler, yAxis: yAxis, transformer: nil) - - _chart = chart - } - - public override func computeAxis(yMin yMin: Double, yMax: Double) - { - computeAxisValues(min: yMin, max: yMax) - } - - internal override func computeAxisValues(min yMin: Double, max yMax: Double) - { - let labelCount = _yAxis.labelCount - let range = abs(yMax - yMin) - - if (labelCount == 0 || range <= 0) - { - _yAxis.entries = [Double]() - return - } - - let rawInterval = range / Double(labelCount) - var interval = ChartUtils.roundToNextSignificant(number: Double(rawInterval)) - let intervalMagnitude = pow(10.0, round(log10(interval))) - let intervalSigDigit = Int(interval / intervalMagnitude) - - if (intervalSigDigit > 5) - { - // Use one order of magnitude higher, to avoid intervals like 0.9 or - // 90 - interval = floor(10 * intervalMagnitude) - } - - // force label count - if _yAxis.isForceLabelsEnabled - { - let step = Double(range) / Double(labelCount - 1) - - if _yAxis.entries.count < labelCount - { - // Ensure stops contains at least numStops elements. - _yAxis.entries.removeAll(keepCapacity: true) - } - else - { - _yAxis.entries = [Double]() - _yAxis.entries.reserveCapacity(labelCount) - } - - var v = yMin - - for (var i = 0; i < labelCount; i++) - { - _yAxis.entries.append(v) - v += step - } - - } - else - { - // no forced count - - // clean old values - if (_yAxis.entries.count > 0) - { - _yAxis.entries.removeAll(keepCapacity: false) - } - - // if the labels should only show min and max - if (_yAxis.isShowOnlyMinMaxEnabled) - { - _yAxis.entries = [Double]() - _yAxis.entries.append(yMin) - _yAxis.entries.append(yMax) - } - else - { - let rawCount = Double(yMin) / interval - var first = rawCount < 0.0 ? floor(rawCount) * interval : ceil(rawCount) * interval; - - if (first < yMin && _yAxis.isStartAtZeroEnabled) - { // Force the first label to be at the 0 (or smallest negative value) - first = yMin - } - - if (first == 0.0) - { // Fix for IEEE negative zero case (Where value == -0.0, and 0.0 == -0.0) - first = 0.0 - } - - let last = ChartUtils.nextUp(floor(Double(yMax) / interval) * interval) - - var f: Double - var i: Int - var n = 0 - for (f = first; f <= last; f += interval) - { - ++n - } - - if (isnan(_yAxis.customAxisMax)) - { - n += 1 - } - - if (_yAxis.entries.count < n) - { - // Ensure stops contains at least numStops elements. - _yAxis.entries = [Double](count: n, repeatedValue: 0.0) - } - - for (f = first, i = 0; i < n; f += interval, ++i) - { - _yAxis.entries[i] = Double(f) - } - } - } - - if !_yAxis.isStartAtZeroEnabled && _yAxis.entries[0] < yMin - { - // If startAtZero is disabled, and the first label is lower that the axis minimum, - // Then adjust the axis minimum - _yAxis.axisMinimum = _yAxis.entries[0] - } - _yAxis.axisMaximum = _yAxis.entries[_yAxis.entryCount - 1] - _yAxis.axisRange = abs(_yAxis.axisMaximum - _yAxis.axisMinimum) - } - - public override func renderAxisLabels(context context: CGContext?) - { - if (!_yAxis.isEnabled || !_yAxis.isDrawLabelsEnabled) - { - return - } - - let labelFont = _yAxis.labelFont - let labelTextColor = _yAxis.labelTextColor - - let center = _chart.centerOffsets - let factor = _chart.factor - - let labelCount = _yAxis.entryCount - - let labelLineHeight = _yAxis.labelFont.lineHeight - - for (var j = 0; j < labelCount; j++) - { - if (j == labelCount - 1 && _yAxis.isDrawTopYLabelEntryEnabled == false) - { - break - } - - let r = CGFloat(_yAxis.entries[j] - _yAxis.axisMinimum) * factor - - let p = ChartUtils.getPosition(center: center, dist: r, angle: _chart.rotationAngle) - - let label = _yAxis.getFormattedLabel(j) - - ChartUtils.drawText(context: context, text: label, point: CGPoint(x: p.x + 10.0, y: p.y - labelLineHeight), align: .Left, attributes: [NSFontAttributeName: labelFont, NSForegroundColorAttributeName: labelTextColor]) - } - } - - public override func renderLimitLines(context context: CGContext?) - { - var limitLines = _yAxis.limitLines - - if (limitLines.count == 0) - { - return - } - - CGContextSaveGState(context) - - let sliceangle = _chart.sliceAngle - - // calculate the factor that is needed for transforming the value to pixels - let factor = _chart.factor - - let center = _chart.centerOffsets - - for (var i = 0; i < limitLines.count; i++) - { - let l = limitLines[i] - - CGContextSetStrokeColorWithColor(context, l.lineColor.CGColor) - CGContextSetLineWidth(context, l.lineWidth) - if (l.lineDashLengths != nil) - { - CGContextSetLineDash(context, l.lineDashPhase, l.lineDashLengths!, l.lineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let r = CGFloat(l.limit - _chart.chartYMin) * factor - - CGContextBeginPath(context) - - for (var j = 0, count = _chart.data!.xValCount; j < count; j++) - { - let p = ChartUtils.getPosition(center: center, dist: r, angle: sliceangle * CGFloat(j) + _chart.rotationAngle) - - if (j == 0) - { - CGContextMoveToPoint(context, p.x, p.y) - } - else - { - CGContextAddLineToPoint(context, p.x, p.y) - } - } - - CGContextClosePath(context) - - CGContextStrokePath(context) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/CombinedChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/CombinedChartRenderer.swift deleted file mode 100644 index b07c6ed0..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/CombinedChartRenderer.swift +++ /dev/null @@ -1,424 +0,0 @@ -// -// CombinedChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class CombinedChartRenderer: ChartDataRendererBase, - LineChartRendererDelegate, - BarChartRendererDelegate, - ScatterChartRendererDelegate, - CandleStickChartRendererDelegate, - BubbleChartRendererDelegate -{ - private weak var _chart: CombinedChartView! - - /// flag that enables or disables the highlighting arrow - public var drawHighlightArrowEnabled = false - - /// if set to true, all values are drawn above their bars, instead of below their top - public var drawValueAboveBarEnabled = true - - /// if set to true, a grey area is darawn behind each bar that indicates the maximum value - public var drawBarShadowEnabled = true - - internal var _renderers = [ChartDataRendererBase]() - - internal var _drawOrder: [CombinedChartView.CombinedChartDrawOrder] = [.Bar, .Bubble, .Line, .Candle, .Scatter] - - public init(chart: CombinedChartView, animator: ChartAnimator, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - _chart = chart - - createRenderers() - } - - /// Creates the renderers needed for this combined-renderer in the required order. Also takes the DrawOrder into consideration. - internal func createRenderers() - { - _renderers = [ChartDataRendererBase]() - - for order in drawOrder - { - switch (order) - { - case .Bar: - if (_chart.barData !== nil) - { - _renderers.append(BarChartRenderer(delegate: self, animator: _animator, viewPortHandler: viewPortHandler)) - } - break - - case .Line: - if (_chart.lineData !== nil) - { - _renderers.append(LineChartRenderer(delegate: self, animator: _animator, viewPortHandler: viewPortHandler)) - } - break - - case .Candle: - if (_chart.candleData !== nil) - { - _renderers.append(CandleStickChartRenderer(delegate: self, animator: _animator, viewPortHandler: viewPortHandler)) - } - break - - case .Scatter: - if (_chart.scatterData !== nil) - { - _renderers.append(ScatterChartRenderer(delegate: self, animator: _animator, viewPortHandler: viewPortHandler)) - } - break - - case .Bubble: - if (_chart.bubbleData !== nil) - { - _renderers.append(BubbleChartRenderer(delegate: self, animator: _animator, viewPortHandler: viewPortHandler)) - } - break - } - } - - } - - public override func drawData(context context: CGContext?) - { - for renderer in _renderers - { - renderer.drawData(context: context) - } - } - - public override func drawValues(context context: CGContext?) - { - for renderer in _renderers - { - renderer.drawValues(context: context) - } - } - - public override func drawExtras(context context: CGContext?) - { - for renderer in _renderers - { - renderer.drawExtras(context: context) - } - } - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - for renderer in _renderers - { - renderer.drawHighlighted(context: context, indices: indices) - } - } - - public override func calcXBounds(chart chart: BarLineChartViewBase, xAxisModulus: Int) - { - for renderer in _renderers - { - renderer.calcXBounds(chart: chart, xAxisModulus: xAxisModulus) - } - } - - /// - returns: the sub-renderer object at the specified index. - public func getSubRenderer(index index: Int) -> ChartDataRendererBase? - { - if (index >= _renderers.count || index < 0) - { - return nil - } - else - { - return _renderers[index] - } - } - - /// Returns all sub-renderers. - public var subRenderers: [ChartDataRendererBase] - { - get { return _renderers } - set { _renderers = newValue } - } - - // MARK: - LineChartRendererDelegate - - public func lineChartRendererData(renderer: LineChartRenderer) -> LineChartData! - { - return _chart.lineData - } - - public func lineChartRenderer(renderer: LineChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return _chart.getTransformer(which) - } - - public func lineChartRendererFillFormatter(renderer: LineChartRenderer) -> ChartFillFormatter - { - return _chart.fillFormatter - } - - public func lineChartDefaultRendererValueFormatter(renderer: LineChartRenderer) -> NSNumberFormatter! - { - return _chart._defaultValueFormatter - } - - public func lineChartRendererChartYMax(renderer: LineChartRenderer) -> Double - { - return _chart.chartYMax - } - - public func lineChartRendererChartYMin(renderer: LineChartRenderer) -> Double - { - return _chart.chartYMin - } - - public func lineChartRendererChartXMax(renderer: LineChartRenderer) -> Double - { - return _chart.chartXMax - } - - public func lineChartRendererChartXMin(renderer: LineChartRenderer) -> Double - { - return _chart.chartXMin - } - - public func lineChartRendererMaxVisibleValueCount(renderer: LineChartRenderer) -> Int - { - return _chart.maxVisibleValueCount - } - - // MARK: - BarChartRendererDelegate - - public func barChartRendererData(renderer: BarChartRenderer) -> BarChartData! - { - return _chart.barData - } - - public func barChartRenderer(renderer: BarChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return _chart.getTransformer(which) - } - - public func barChartRendererMaxVisibleValueCount(renderer: BarChartRenderer) -> Int - { - return _chart.maxVisibleValueCount - } - - public func barChartDefaultRendererValueFormatter(renderer: BarChartRenderer) -> NSNumberFormatter! - { - return _chart._defaultValueFormatter - } - - public func barChartRendererChartYMax(renderer: BarChartRenderer) -> Double - { - return _chart.chartYMax - } - - public func barChartRendererChartYMin(renderer: BarChartRenderer) -> Double - { - return _chart.chartYMin - } - - public func barChartRendererChartXMax(renderer: BarChartRenderer) -> Double - { - return _chart.chartXMax - } - - public func barChartRendererChartXMin(renderer: BarChartRenderer) -> Double - { - return _chart.chartXMin - } - - public func barChartIsDrawHighlightArrowEnabled(renderer: BarChartRenderer) -> Bool - { - return drawHighlightArrowEnabled - } - - public func barChartIsDrawValueAboveBarEnabled(renderer: BarChartRenderer) -> Bool - { - return drawValueAboveBarEnabled - } - - public func barChartIsDrawBarShadowEnabled(renderer: BarChartRenderer) -> Bool - { - return drawBarShadowEnabled - } - - public func barChartIsInverted(renderer: BarChartRenderer, axis: ChartYAxis.AxisDependency) -> Bool - { - return _chart.getAxis(axis).isInverted - } - - // MARK: - ScatterChartRendererDelegate - - public func scatterChartRendererData(renderer: ScatterChartRenderer) -> ScatterChartData! - { - return _chart.scatterData - } - - public func scatterChartRenderer(renderer: ScatterChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return _chart.getTransformer(which) - } - - public func scatterChartDefaultRendererValueFormatter(renderer: ScatterChartRenderer) -> NSNumberFormatter! - { - return _chart._defaultValueFormatter - } - - public func scatterChartRendererChartYMax(renderer: ScatterChartRenderer) -> Double - { - return _chart.chartYMax - } - - public func scatterChartRendererChartYMin(renderer: ScatterChartRenderer) -> Double - { - return _chart.chartYMin - } - - public func scatterChartRendererChartXMax(renderer: ScatterChartRenderer) -> Double - { - return _chart.chartXMax - } - - public func scatterChartRendererChartXMin(renderer: ScatterChartRenderer) -> Double - { - return _chart.chartXMin - } - - public func scatterChartRendererMaxVisibleValueCount(renderer: ScatterChartRenderer) -> Int - { - return _chart.maxVisibleValueCount - } - - // MARK: - CandleStickChartRendererDelegate - - public func candleStickChartRendererCandleData(renderer: CandleStickChartRenderer) -> CandleChartData! - { - return _chart.candleData - } - - public func candleStickChartRenderer(renderer: CandleStickChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return _chart.getTransformer(which) - } - - public func candleStickChartDefaultRendererValueFormatter(renderer: CandleStickChartRenderer) -> NSNumberFormatter! - { - return _chart._defaultValueFormatter - } - - public func candleStickChartRendererChartYMax(renderer: CandleStickChartRenderer) -> Double - { - return _chart.chartYMax - } - - public func candleStickChartRendererChartYMin(renderer: CandleStickChartRenderer) -> Double - { - return _chart.chartYMin - } - - public func candleStickChartRendererChartXMax(renderer: CandleStickChartRenderer) -> Double - { - return _chart.chartXMax - } - - public func candleStickChartRendererChartXMin(renderer: CandleStickChartRenderer) -> Double - { - return _chart.chartXMin - } - - public func candleStickChartRendererMaxVisibleValueCount(renderer: CandleStickChartRenderer) -> Int - { - return _chart.maxVisibleValueCount - } - - // MARK: - BubbleChartRendererDelegate - - public func bubbleChartRendererData(renderer: BubbleChartRenderer) -> BubbleChartData! - { - return _chart.bubbleData - } - - public func bubbleChartRenderer(renderer: BubbleChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - { - return _chart.getTransformer(which) - } - - public func bubbleChartDefaultRendererValueFormatter(renderer: BubbleChartRenderer) -> NSNumberFormatter! - { - return _chart._defaultValueFormatter - } - - public func bubbleChartRendererChartYMax(renderer: BubbleChartRenderer) -> Double - { - return _chart.chartYMax - } - - public func bubbleChartRendererChartYMin(renderer: BubbleChartRenderer) -> Double - { - return _chart.chartYMin - } - - public func bubbleChartRendererChartXMax(renderer: BubbleChartRenderer) -> Double - { - return _chart.chartXMax - } - - public func bubbleChartRendererChartXMin(renderer: BubbleChartRenderer) -> Double - { - return _chart.chartXMin - } - - public func bubbleChartRendererMaxVisibleValueCount(renderer: BubbleChartRenderer) -> Int - { - return _chart.maxVisibleValueCount - } - - public func bubbleChartRendererXValCount(renderer: BubbleChartRenderer) -> Int - { - return _chart.data!.xValCount - } - - // MARK: Accessors - - /// - returns: true if drawing the highlighting arrow is enabled, false if not - public var isDrawHighlightArrowEnabled: Bool { return drawHighlightArrowEnabled; } - - /// - returns: true if drawing values above bars is enabled, false if not - public var isDrawValueAboveBarEnabled: Bool { return drawValueAboveBarEnabled; } - - /// - returns: true if drawing shadows (maxvalue) for each bar is enabled, false if not - public var isDrawBarShadowEnabled: Bool { return drawBarShadowEnabled; } - - /// the order in which the provided data objects should be drawn. - /// The earlier you place them in the provided array, the further they will be in the background. - /// e.g. if you provide [DrawOrder.Bar, DrawOrder.Line], the bars will be drawn behind the lines. - public var drawOrder: [CombinedChartView.CombinedChartDrawOrder] - { - get - { - return _drawOrder - } - set - { - if (newValue.count > 0) - { - _drawOrder = newValue - } - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/HorizontalBarChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/HorizontalBarChartRenderer.swift deleted file mode 100644 index 1801f6a3..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/HorizontalBarChartRenderer.swift +++ /dev/null @@ -1,470 +0,0 @@ -// -// HorizontalBarChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class HorizontalBarChartRenderer: BarChartRenderer -{ - public override init(delegate: BarChartRendererDelegate?, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(delegate: delegate, animator: animator, viewPortHandler: viewPortHandler) - } - - internal override func drawDataSet(context context: CGContext?, dataSet: BarChartDataSet, index: Int) - { - CGContextSaveGState(context) - - let barData = delegate!.barChartRendererData(self) - - let trans = delegate!.barChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - let drawBarShadowEnabled: Bool = delegate!.barChartIsDrawBarShadowEnabled(self) - let dataSetOffset = (barData.dataSetCount - 1) - let groupSpace = barData.groupSpace - let groupSpaceHalf = groupSpace / 2.0 - let barSpace = dataSet.barSpace - let barSpaceHalf = barSpace / 2.0 - let containsStacks = dataSet.isStacked - let isInverted = delegate!.barChartIsInverted(self, axis: dataSet.axisDependency) - var entries = dataSet.yVals as! [BarChartDataEntry] - let barWidth: CGFloat = 0.5 - let phaseY = _animator.phaseY - var barRect = CGRect() - var barShadow = CGRect() - var y: Double - - // do the drawing - for (var j = 0, count = Int(ceil(CGFloat(dataSet.entryCount) * _animator.phaseX)); j < count; j++) - { - let e = entries[j] - - // calculate the x-position, depending on datasetcount - let x = CGFloat(e.xIndex + e.xIndex * dataSetOffset) + CGFloat(index) - + groupSpace * CGFloat(e.xIndex) + groupSpaceHalf - let values = e.values - - if (!containsStacks || values == nil) - { - y = e.value - - let bottom = x - barWidth + barSpaceHalf - let top = x + barWidth - barSpaceHalf - var right = isInverted ? (y <= 0.0 ? CGFloat(y) : 0) : (y >= 0.0 ? CGFloat(y) : 0) - var left = isInverted ? (y >= 0.0 ? CGFloat(y) : 0) : (y <= 0.0 ? CGFloat(y) : 0) - - // multiply the height of the rect with the phase - if (right > 0) - { - right *= phaseY - } - else - { - left *= phaseY - } - - barRect.origin.x = left - barRect.size.width = right - left - barRect.origin.y = top - barRect.size.height = bottom - top - - trans.rectValueToPixel(&barRect) - - if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width)) - { - continue - } - - if (!viewPortHandler.isInBoundsRight(barRect.origin.x)) - { - break - } - - // if drawing the bar shadow is enabled - if (drawBarShadowEnabled) - { - barShadow.origin.x = viewPortHandler.contentLeft - barShadow.origin.y = barRect.origin.y - barShadow.size.width = viewPortHandler.contentWidth - barShadow.size.height = barRect.size.height - - CGContextSetFillColorWithColor(context, dataSet.barShadowColor.CGColor) - CGContextFillRect(context, barShadow) - } - - // Set the color for the currently drawn value. If the index is out of bounds, reuse colors. - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - CGContextFillRect(context, barRect) - } - else - { - let vals = values! - var posY = 0.0 - var negY = -e.negativeSum - var yStart = 0.0 - - // if drawing the bar shadow is enabled - if (drawBarShadowEnabled) - { - y = e.value - - let bottom = x - barWidth + barSpaceHalf - let top = x + barWidth - barSpaceHalf - var right = isInverted ? (y <= 0.0 ? CGFloat(y) : 0) : (y >= 0.0 ? CGFloat(y) : 0) - var left = isInverted ? (y >= 0.0 ? CGFloat(y) : 0) : (y <= 0.0 ? CGFloat(y) : 0) - - // multiply the height of the rect with the phase - if (right > 0) - { - right *= phaseY - } - else - { - left *= phaseY - } - - barRect.origin.x = left - barRect.size.width = right - left - barRect.origin.y = top - barRect.size.height = bottom - top - - trans.rectValueToPixel(&barRect) - - barShadow.origin.x = viewPortHandler.contentLeft - barShadow.origin.y = barRect.origin.y - barShadow.size.width = viewPortHandler.contentWidth - barShadow.size.height = barRect.size.height - - CGContextSetFillColorWithColor(context, dataSet.barShadowColor.CGColor) - CGContextFillRect(context, barShadow) - } - - // fill the stack - for (var k = 0; k < vals.count; k++) - { - let value = vals[k] - - if value >= 0.0 - { - y = posY - yStart = posY + value - posY = yStart - } - else - { - y = negY - yStart = negY + abs(value) - negY += abs(value) - } - - let bottom = x - barWidth + barSpaceHalf - let top = x + barWidth - barSpaceHalf - var right: CGFloat, left: CGFloat - if isInverted - { - left = y >= yStart ? CGFloat(y) : CGFloat(yStart) - right = y <= yStart ? CGFloat(y) : CGFloat(yStart) - } - else - { - right = y >= yStart ? CGFloat(y) : CGFloat(yStart) - left = y <= yStart ? CGFloat(y) : CGFloat(yStart) - } - - // multiply the height of the rect with the phase - right *= phaseY - left *= phaseY - - barRect.origin.x = left - barRect.size.width = right - left - barRect.origin.y = top - barRect.size.height = bottom - top - - trans.rectValueToPixel(&barRect) - - if (k == 0 && !viewPortHandler.isInBoundsTop(barRect.origin.y + barRect.size.height)) - { - // Skip to next bar - break - } - - // avoid drawing outofbounds values - if (!viewPortHandler.isInBoundsBottom(barRect.origin.y)) - { - break - } - - // Set the color for the currently drawn value. If the index is out of bounds, reuse colors. - CGContextSetFillColorWithColor(context, dataSet.colorAt(k).CGColor) - CGContextFillRect(context, barRect) - } - } - } - - CGContextRestoreGState(context) - } - - internal override func prepareBarHighlight(x x: CGFloat, y1: Double, y2: Double, barspacehalf: CGFloat, trans: ChartTransformer, inout rect: CGRect) - { - let barWidth: CGFloat = 0.5 - - let top = x - barWidth + barspacehalf - let bottom = x + barWidth - barspacehalf - let left = CGFloat(y1) - let right = CGFloat(y2) - - rect.origin.x = left - rect.origin.y = top - rect.size.width = right - left - rect.size.height = bottom - top - - trans.rectValueToPixelHorizontal(&rect, phaseY: _animator.phaseY) - } - - public override func getTransformedValues(trans trans: ChartTransformer, entries: [BarChartDataEntry], dataSetIndex: Int) -> [CGPoint] - { - return trans.generateTransformedValuesHorizontalBarChart(entries, dataSet: dataSetIndex, barData: delegate!.barChartRendererData(self)!, phaseY: _animator.phaseY) - } - - public override func drawValues(context context: CGContext?) - { - // if values are drawn - if (passesCheck()) - { - let barData = delegate!.barChartRendererData(self) - - let defaultValueFormatter = delegate!.barChartDefaultRendererValueFormatter(self) - - var dataSets = barData.dataSets - - let drawValueAboveBar = delegate!.barChartIsDrawValueAboveBarEnabled(self) - - let textAlign = drawValueAboveBar ? NSTextAlignment.Left : NSTextAlignment.Right - - let valueOffsetPlus: CGFloat = 5.0 - var posOffset: CGFloat - var negOffset: CGFloat - - for (var i = 0, count = barData.dataSetCount; i < count; i++) - { - let dataSet = dataSets[i] as! BarChartDataSet - - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - let isInverted = delegate!.barChartIsInverted(self, axis: dataSet.axisDependency) - - let valueFont = dataSet.valueFont - let valueTextColor = dataSet.valueTextColor - let yOffset = -valueFont.lineHeight / 2.0 - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - let trans = delegate!.barChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - var entries = dataSet.yVals as! [BarChartDataEntry] - - var valuePoints = getTransformedValues(trans: trans, entries: entries, dataSetIndex: i) - - // if only single values are drawn (sum) - if (!dataSet.isStacked) - { - for (var j = 0, count = Int(ceil(CGFloat(valuePoints.count) * _animator.phaseX)); j < count; j++) - { - if (!viewPortHandler.isInBoundsTop(valuePoints[j].y)) - { - break - } - - if (!viewPortHandler.isInBoundsX(valuePoints[j].x)) - { - continue - } - - if (!viewPortHandler.isInBoundsBottom(valuePoints[j].y)) - { - continue - } - - let val = entries[j].value - let valueText = formatter!.stringFromNumber(val)! - - // calculate the correct offset depending on the draw position of the value - let valueTextWidth = valueText.sizeWithAttributes([NSFontAttributeName: valueFont]).width - posOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus)) - negOffset = (drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus) - - if (isInverted) - { - posOffset = -posOffset - valueTextWidth - negOffset = -negOffset - valueTextWidth - } - - drawValue( - context: context, - value: valueText, - xPos: valuePoints[j].x + (val >= 0.0 ? posOffset : negOffset), - yPos: valuePoints[j].y + yOffset, - font: valueFont, - align: textAlign, - color: valueTextColor) - } - } - else - { - // if each value of a potential stack should be drawn - - for (var j = 0, count = Int(ceil(CGFloat(valuePoints.count) * _animator.phaseX)); j < count; j++) - { - let e = entries[j] - - let values = e.values - - // we still draw stacked bars, but there is one non-stacked in between - if (values == nil) - { - if (!viewPortHandler.isInBoundsTop(valuePoints[j].y)) - { - break - } - - if (!viewPortHandler.isInBoundsX(valuePoints[j].x)) - { - continue - } - - if (!viewPortHandler.isInBoundsBottom(valuePoints[j].y)) - { - continue - } - - let val = e.value - let valueText = formatter!.stringFromNumber(val)! - - // calculate the correct offset depending on the draw position of the value - let valueTextWidth = valueText.sizeWithAttributes([NSFontAttributeName: valueFont]).width - posOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus)) - negOffset = (drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus) - - if (isInverted) - { - posOffset = -posOffset - valueTextWidth - negOffset = -negOffset - valueTextWidth - } - - drawValue( - context: context, - value: valueText, - xPos: valuePoints[j].x + (val >= 0.0 ? posOffset : negOffset), - yPos: valuePoints[j].y + yOffset, - font: valueFont, - align: textAlign, - color: valueTextColor) - } - else - { - let vals = values! - var transformed = [CGPoint]() - - var posY = 0.0 - var negY = -e.negativeSum - - for (var k = 0; k < vals.count; k++) - { - let value = vals[k] - var y: Double - - if value >= 0.0 - { - posY += value - y = posY - } - else - { - y = negY - negY -= value - } - - transformed.append(CGPoint(x: CGFloat(y) * _animator.phaseY, y: 0.0)) - } - - trans.pointValuesToPixel(&transformed) - - for (var k = 0; k < transformed.count; k++) - { - let val = vals[k] - let valueText = formatter!.stringFromNumber(val)! - - // calculate the correct offset depending on the draw position of the value - let valueTextWidth = valueText.sizeWithAttributes([NSFontAttributeName: valueFont]).width - posOffset = (drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus)) - negOffset = (drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus) - - if (isInverted) - { - posOffset = -posOffset - valueTextWidth - negOffset = -negOffset - valueTextWidth - } - - let x = transformed[k].x + (val >= 0 ? posOffset : negOffset) - let y = valuePoints[j].y - - if (!viewPortHandler.isInBoundsTop(y)) - { - break - } - - if (!viewPortHandler.isInBoundsX(x)) - { - continue - } - - if (!viewPortHandler.isInBoundsBottom(y)) - { - continue - } - - drawValue(context: context, - value: valueText, - xPos: x, - yPos: y + yOffset, - font: valueFont, - align: textAlign, - color: valueTextColor) - } - } - } - } - } - } - } - - internal override func passesCheck() -> Bool - { - let barData = delegate!.barChartRendererData(self) - - if (barData === nil) - { - return false - } - - return CGFloat(barData.yValCount) < CGFloat(delegate!.barChartRendererMaxVisibleValueCount(self)) * viewPortHandler.scaleY - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineChartRenderer.swift deleted file mode 100644 index 59d17b23..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineChartRenderer.swift +++ /dev/null @@ -1,628 +0,0 @@ -// -// LineChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -@objc -public protocol LineChartRendererDelegate -{ - func lineChartRendererData(renderer: LineChartRenderer) -> LineChartData! - func lineChartRenderer(renderer: LineChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - func lineChartRendererFillFormatter(renderer: LineChartRenderer) -> ChartFillFormatter - func lineChartDefaultRendererValueFormatter(renderer: LineChartRenderer) -> NSNumberFormatter! - func lineChartRendererChartYMax(renderer: LineChartRenderer) -> Double - func lineChartRendererChartYMin(renderer: LineChartRenderer) -> Double - func lineChartRendererChartXMax(renderer: LineChartRenderer) -> Double - func lineChartRendererChartXMin(renderer: LineChartRenderer) -> Double - func lineChartRendererMaxVisibleValueCount(renderer: LineChartRenderer) -> Int -} - -public class LineChartRenderer: LineScatterCandleRadarChartRenderer -{ - public weak var delegate: LineChartRendererDelegate? - - public init(delegate: LineChartRendererDelegate?, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - self.delegate = delegate - } - - public override func drawData(context context: CGContext?) - { - let lineData = delegate!.lineChartRendererData(self) - - if (lineData === nil) - { - return - } - - for (var i = 0; i < lineData.dataSetCount; i++) - { - let set = lineData.getDataSetByIndex(i) - - if (set !== nil && set!.isVisible) - { - drawDataSet(context: context, dataSet: set as! LineChartDataSet) - } - } - } - - internal struct CGCPoint - { - internal var x: CGFloat = 0.0 - internal var y: CGFloat = 0.0 - - /// x-axis distance - internal var dx: CGFloat = 0.0 - /// y-axis distance - internal var dy: CGFloat = 0.0 - - internal init(x: CGFloat, y: CGFloat) - { - self.x = x - self.y = y - } - } - - internal func drawDataSet(context context: CGContext?, dataSet: LineChartDataSet) - { - let entries = dataSet.yVals - - if (entries.count < 1) - { - return - } - - CGContextSaveGState(context) - - CGContextSetLineWidth(context, dataSet.lineWidth) - if (dataSet.lineDashLengths != nil) - { - CGContextSetLineDash(context, dataSet.lineDashPhase, dataSet.lineDashLengths, dataSet.lineDashLengths.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - // if drawing cubic lines is enabled - if (dataSet.isDrawCubicEnabled) - { - drawCubic(context: context, dataSet: dataSet, entries: entries) - } - else - { // draw normal (straight) lines - drawLinear(context: context, dataSet: dataSet, entries: entries) - } - - CGContextRestoreGState(context) - } - - internal func drawCubic(context context: CGContext?, dataSet: LineChartDataSet, entries: [ChartDataEntry]) - { - let trans = delegate?.lineChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - let entryFrom = dataSet.entryForXIndex(_minX) - let entryTo = dataSet.entryForXIndex(_maxX) - - let minx = max(dataSet.entryIndex(entry: entryFrom!, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo!, isEqual: true) + 1, entries.count) - - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - // get the color that is specified for this position from the DataSet - let drawingColor = dataSet.colors.first! - - let intensity = dataSet.cubicIntensity - - // the path for the cubic-spline - let cubicPath = CGPathCreateMutable() - - var valueToPixelMatrix = trans!.valueToPixelMatrix - - let size = Int(ceil(CGFloat(maxx - minx) * phaseX + CGFloat(minx))) - - if (size - minx >= 2) - { - var prevDx: CGFloat = 0.0 - var prevDy: CGFloat = 0.0 - var curDx: CGFloat = 0.0 - var curDy: CGFloat = 0.0 - - var prevPrev = entries[minx] - var prev = entries[minx] - var cur = entries[minx] - var next = entries[minx + 1] - - // let the spline start - CGPathMoveToPoint(cubicPath, &valueToPixelMatrix, CGFloat(cur.xIndex), CGFloat(cur.value) * phaseY) - - prevDx = CGFloat(cur.xIndex - prev.xIndex) * intensity - prevDy = CGFloat(cur.value - prev.value) * intensity - - curDx = CGFloat(next.xIndex - cur.xIndex) * intensity - curDy = CGFloat(next.value - cur.value) * intensity - - // the first cubic - CGPathAddCurveToPoint(cubicPath, &valueToPixelMatrix, - CGFloat(prev.xIndex) + prevDx, (CGFloat(prev.value) + prevDy) * phaseY, - CGFloat(cur.xIndex) - curDx, (CGFloat(cur.value) - curDy) * phaseY, - CGFloat(cur.xIndex), CGFloat(cur.value) * phaseY) - - for (var j = minx + 1, count = min(size, entries.count - 1); j < count; j++) - { - prevPrev = entries[j == 1 ? 0 : j - 2] - prev = entries[j - 1] - cur = entries[j] - next = entries[j + 1] - - prevDx = CGFloat(cur.xIndex - prevPrev.xIndex) * intensity - prevDy = CGFloat(cur.value - prevPrev.value) * intensity - curDx = CGFloat(next.xIndex - prev.xIndex) * intensity - curDy = CGFloat(next.value - prev.value) * intensity - - CGPathAddCurveToPoint(cubicPath, &valueToPixelMatrix, CGFloat(prev.xIndex) + prevDx, (CGFloat(prev.value) + prevDy) * phaseY, - CGFloat(cur.xIndex) - curDx, - (CGFloat(cur.value) - curDy) * phaseY, CGFloat(cur.xIndex), CGFloat(cur.value) * phaseY) - } - - if (size > entries.count - 1) - { - prevPrev = entries[entries.count - (entries.count >= 3 ? 3 : 2)] - prev = entries[entries.count - 2] - cur = entries[entries.count - 1] - next = cur - - prevDx = CGFloat(cur.xIndex - prevPrev.xIndex) * intensity - prevDy = CGFloat(cur.value - prevPrev.value) * intensity - curDx = CGFloat(next.xIndex - prev.xIndex) * intensity - curDy = CGFloat(next.value - prev.value) * intensity - - // the last cubic - CGPathAddCurveToPoint(cubicPath, &valueToPixelMatrix, CGFloat(prev.xIndex) + prevDx, (CGFloat(prev.value) + prevDy) * phaseY, - CGFloat(cur.xIndex) - curDx, - (CGFloat(cur.value) - curDy) * phaseY, CGFloat(cur.xIndex), CGFloat(cur.value) * phaseY) - } - } - - CGContextSaveGState(context) - - if (dataSet.isDrawFilledEnabled) - { - drawCubicFill(context: context, dataSet: dataSet, spline: cubicPath, matrix: valueToPixelMatrix, from: minx, to: size) - } - - CGContextBeginPath(context) - CGContextAddPath(context, cubicPath) - CGContextSetStrokeColorWithColor(context, drawingColor.CGColor) - CGContextStrokePath(context) - - CGContextRestoreGState(context) - } - - internal func drawCubicFill(context context: CGContext?, dataSet: LineChartDataSet, spline: CGMutablePath, matrix: CGAffineTransform, from: Int, to: Int) - { - if to - from <= 1 - { - return - } - - CGContextSaveGState(context) - - let fillMin = delegate!.lineChartRendererFillFormatter(self).getFillLinePosition( - dataSet: dataSet, - data: delegate!.lineChartRendererData(self), - chartMaxY: delegate!.lineChartRendererChartYMax(self), - chartMinY: delegate!.lineChartRendererChartYMin(self)) - - var pt1 = CGPoint(x: CGFloat(to - 1), y: fillMin) - var pt2 = CGPoint(x: CGFloat(from), y: fillMin) - pt1 = CGPointApplyAffineTransform(pt1, matrix) - pt2 = CGPointApplyAffineTransform(pt2, matrix) - - CGContextBeginPath(context) - CGContextAddPath(context, spline) - CGContextAddLineToPoint(context, pt1.x, pt1.y) - CGContextAddLineToPoint(context, pt2.x, pt2.y) - CGContextClosePath(context) - - CGContextSetFillColorWithColor(context, dataSet.fillColor.CGColor) - CGContextSetAlpha(context, dataSet.fillAlpha) - CGContextFillPath(context) - - CGContextRestoreGState(context) - } - - private var _lineSegments = [CGPoint](count: 2, repeatedValue: CGPoint()) - - internal func drawLinear(context context: CGContext?, dataSet: LineChartDataSet, entries: [ChartDataEntry]) - { - let trans = delegate!.lineChartRenderer(self, transformerForAxis: dataSet.axisDependency) - let valueToPixelMatrix = trans.valueToPixelMatrix - - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - CGContextSaveGState(context) - - let entryFrom = dataSet.entryForXIndex(_minX) - let entryTo = dataSet.entryForXIndex(_maxX) - - let minx = max(dataSet.entryIndex(entry: entryFrom!, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo!, isEqual: true) + 1, entries.count) - - // more than 1 color - if (dataSet.colors.count > 1) - { - if (_lineSegments.count != 2) - { - _lineSegments = [CGPoint](count: 2, repeatedValue: CGPoint()) - } - - for (var j = minx, count = Int(ceil(CGFloat(maxx - minx) * phaseX + CGFloat(minx))); j < count; j++) - { - if (count > 1 && j == count - 1) - { // Last point, we have already drawn a line to this point - break - } - - var e = entries[j] - - _lineSegments[0].x = CGFloat(e.xIndex) - _lineSegments[0].y = CGFloat(e.value) * phaseY - _lineSegments[0] = CGPointApplyAffineTransform(_lineSegments[0], valueToPixelMatrix) - if (j + 1 < count) - { - e = entries[j + 1] - - _lineSegments[1].x = CGFloat(e.xIndex) - _lineSegments[1].y = CGFloat(e.value) * phaseY - _lineSegments[1] = CGPointApplyAffineTransform(_lineSegments[1], valueToPixelMatrix) - } - else - { - _lineSegments[1] = _lineSegments[0] - } - - if (!viewPortHandler.isInBoundsRight(_lineSegments[0].x)) - { - break - } - - // make sure the lines don't do shitty things outside bounds - if (!viewPortHandler.isInBoundsLeft(_lineSegments[1].x) - || (!viewPortHandler.isInBoundsTop(_lineSegments[0].y) && !viewPortHandler.isInBoundsBottom(_lineSegments[1].y)) - || (!viewPortHandler.isInBoundsTop(_lineSegments[0].y) && !viewPortHandler.isInBoundsBottom(_lineSegments[1].y))) - { - continue - } - - // get the color that is set for this line-segment - CGContextSetStrokeColorWithColor(context, dataSet.colorAt(j).CGColor) - CGContextStrokeLineSegments(context, _lineSegments, 2) - } - } - else - { // only one color per dataset - - var e1: ChartDataEntry! - var e2: ChartDataEntry! - - if (_lineSegments.count != max((entries.count - 1) * 2, 2)) - { - _lineSegments = [CGPoint](count: max((entries.count - 1) * 2, 2), repeatedValue: CGPoint()) - } - - e1 = entries[minx] - - let count = Int(ceil(CGFloat(maxx - minx) * phaseX + CGFloat(minx))) - - for (var x = count > 1 ? minx + 1 : minx, j = 0; x < count; x++) - { - e1 = entries[x == 0 ? 0 : (x - 1)] - e2 = entries[x] - - _lineSegments[j++] = CGPointApplyAffineTransform(CGPoint(x: CGFloat(e1.xIndex), y: CGFloat(e1.value) * phaseY), valueToPixelMatrix) - _lineSegments[j++] = CGPointApplyAffineTransform(CGPoint(x: CGFloat(e2.xIndex), y: CGFloat(e2.value) * phaseY), valueToPixelMatrix) - } - - let size = max((count - minx - 1) * 2, 2) - CGContextSetStrokeColorWithColor(context, dataSet.colorAt(0).CGColor) - CGContextStrokeLineSegments(context, _lineSegments, size) - } - - CGContextRestoreGState(context) - - // if drawing filled is enabled - if (dataSet.isDrawFilledEnabled && entries.count > 0) - { - drawLinearFill(context: context, dataSet: dataSet, entries: entries, minx: minx, maxx: maxx, trans: trans) - } - } - - internal func drawLinearFill(context context: CGContext?, dataSet: LineChartDataSet, entries: [ChartDataEntry], minx: Int, maxx: Int, trans: ChartTransformer) - { - CGContextSaveGState(context) - - CGContextSetFillColorWithColor(context, dataSet.fillColor.CGColor) - - // filled is usually drawn with less alpha - CGContextSetAlpha(context, dataSet.fillAlpha) - - let filled = generateFilledPath( - entries, - fillMin: delegate!.lineChartRendererFillFormatter(self).getFillLinePosition( - dataSet: dataSet, - data: delegate!.lineChartRendererData(self), - chartMaxY: delegate!.lineChartRendererChartYMax(self), - chartMinY: delegate!.lineChartRendererChartYMin(self)), - from: minx, - to: maxx, - matrix: trans.valueToPixelMatrix) - - CGContextBeginPath(context) - CGContextAddPath(context, filled) - CGContextFillPath(context) - - CGContextRestoreGState(context) - } - - /// Generates the path that is used for filled drawing. - private func generateFilledPath(entries: [ChartDataEntry], fillMin: CGFloat, from: Int, to: Int, var matrix: CGAffineTransform) -> CGPath - { - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - let filled = CGPathCreateMutable() - CGPathMoveToPoint(filled, &matrix, CGFloat(entries[from].xIndex), fillMin) - CGPathAddLineToPoint(filled, &matrix, CGFloat(entries[from].xIndex), CGFloat(entries[from].value) * phaseY) - - // create a new path - for (var x = from + 1, count = Int(ceil(CGFloat(to - from) * phaseX + CGFloat(from))); x < count; x++) - { - let e = entries[x] - CGPathAddLineToPoint(filled, &matrix, CGFloat(e.xIndex), CGFloat(e.value) * phaseY) - } - - // close up - CGPathAddLineToPoint(filled, &matrix, CGFloat(entries[max(min(Int(ceil(CGFloat(to - from) * phaseX + CGFloat(from))) - 1, entries.count - 1), 0)].xIndex), fillMin) - CGPathCloseSubpath(filled) - - return filled - } - - public override func drawValues(context context: CGContext?) - { - let lineData = delegate!.lineChartRendererData(self) - if (lineData === nil) - { - return - } - - let defaultValueFormatter = delegate!.lineChartDefaultRendererValueFormatter(self) - - if (CGFloat(lineData.yValCount) < CGFloat(delegate!.lineChartRendererMaxVisibleValueCount(self)) * viewPortHandler.scaleX) - { - var dataSets = lineData.dataSets - - for (var i = 0; i < dataSets.count; i++) - { - let dataSet = dataSets[i] as! LineChartDataSet - - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - let valueFont = dataSet.valueFont - let valueTextColor = dataSet.valueTextColor - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - let trans = delegate!.lineChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - // make sure the values do not interfear with the circles - var valOffset = Int(dataSet.circleRadius * 1.75) - - if (!dataSet.isDrawCirclesEnabled) - { - valOffset = valOffset / 2 - } - - var entries = dataSet.yVals - - let entryFrom = dataSet.entryForXIndex(_minX) - let entryTo = dataSet.entryForXIndex(_maxX) - - let minx = max(dataSet.entryIndex(entry: entryFrom!, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo!, isEqual: true) + 1, entries.count) - - var positions = trans.generateTransformedValuesLine( - entries, - phaseX: _animator.phaseX, - phaseY: _animator.phaseY, - from: minx, - to: maxx) - - for (var j = 0, count = positions.count; j < count; j++) - { - if (!viewPortHandler.isInBoundsRight(positions[j].x)) - { - break - } - - if (!viewPortHandler.isInBoundsLeft(positions[j].x) || !viewPortHandler.isInBoundsY(positions[j].y)) - { - continue - } - - let val = entries[j + minx].value - - ChartUtils.drawText(context: context, text: formatter!.stringFromNumber(val)!, point: CGPoint(x: positions[j].x, y: positions[j].y - CGFloat(valOffset) - valueFont.lineHeight), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - } - } - } - - public override func drawExtras(context context: CGContext?) - { - drawCircles(context: context) - } - - private func drawCircles(context context: CGContext?) - { - let phaseX = _animator.phaseX - let phaseY = _animator.phaseY - - let lineData = delegate!.lineChartRendererData(self) - - let dataSets = lineData.dataSets - - var pt = CGPoint() - var rect = CGRect() - - CGContextSaveGState(context) - - for (var i = 0, count = dataSets.count; i < count; i++) - { - let dataSet = lineData.getDataSetByIndex(i) as! LineChartDataSet! - - if (!dataSet.isVisible || !dataSet.isDrawCirclesEnabled) - { - continue - } - - let trans = delegate!.lineChartRenderer(self, transformerForAxis: dataSet.axisDependency) - let valueToPixelMatrix = trans.valueToPixelMatrix - - var entries = dataSet.yVals - - let circleRadius = dataSet.circleRadius - let circleDiameter = circleRadius * 2.0 - let circleHoleDiameter = circleRadius - let circleHoleRadius = circleHoleDiameter / 2.0 - let isDrawCircleHoleEnabled = dataSet.isDrawCircleHoleEnabled - - let entryFrom = dataSet.entryForXIndex(_minX)! - let entryTo = dataSet.entryForXIndex(_maxX)! - - let minx = max(dataSet.entryIndex(entry: entryFrom, isEqual: true), 0) - let maxx = min(dataSet.entryIndex(entry: entryTo, isEqual: true) + 1, entries.count) - - for (var j = minx, count = Int(ceil(CGFloat(maxx - minx) * phaseX + CGFloat(minx))); j < count; j++) - { - let e = entries[j] - pt.x = CGFloat(e.xIndex) - pt.y = CGFloat(e.value) * phaseY - pt = CGPointApplyAffineTransform(pt, valueToPixelMatrix) - - if (!viewPortHandler.isInBoundsRight(pt.x)) - { - break - } - - // make sure the circles don't do shitty things outside bounds - if (!viewPortHandler.isInBoundsLeft(pt.x) || !viewPortHandler.isInBoundsY(pt.y)) - { - continue - } - - CGContextSetFillColorWithColor(context, dataSet.getCircleColor(j)!.CGColor) - - rect.origin.x = pt.x - circleRadius - rect.origin.y = pt.y - circleRadius - rect.size.width = circleDiameter - rect.size.height = circleDiameter - CGContextFillEllipseInRect(context, rect) - - if (isDrawCircleHoleEnabled) - { - CGContextSetFillColorWithColor(context, dataSet.circleHoleColor.CGColor) - - rect.origin.x = pt.x - circleHoleRadius - rect.origin.y = pt.y - circleHoleRadius - rect.size.width = circleHoleDiameter - rect.size.height = circleHoleDiameter - CGContextFillEllipseInRect(context, rect) - } - } - } - - CGContextRestoreGState(context) - } - - private var _highlightPointBuffer = CGPoint() - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - let lineData = delegate!.lineChartRendererData(self) - let chartXMax = delegate!.lineChartRendererChartXMax(self) - CGContextSaveGState(context) - - for (var i = 0; i < indices.count; i++) - { - let set = lineData.getDataSetByIndex(indices[i].dataSetIndex) as! LineChartDataSet! - - if (set === nil || !set.isHighlightEnabled) - { - continue - } - - CGContextSetStrokeColorWithColor(context, set.highlightColor.CGColor) - CGContextSetLineWidth(context, set.highlightLineWidth) - if (set.highlightLineDashLengths != nil) - { - CGContextSetLineDash(context, set.highlightLineDashPhase, set.highlightLineDashLengths!, set.highlightLineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let xIndex = indices[i].xIndex; // get the x-position - - if (CGFloat(xIndex) > CGFloat(chartXMax) * _animator.phaseX) - { - continue - } - - let yValue = set.yValForXIndex(xIndex) - if (yValue.isNaN) - { - continue - } - - let y = CGFloat(yValue) * _animator.phaseY; // get the y-position - - _highlightPointBuffer.x = CGFloat(xIndex) - _highlightPointBuffer.y = y - - let trans = delegate!.lineChartRenderer(self, transformerForAxis: set.axisDependency) - - trans.pointValueToPixel(&_highlightPointBuffer) - - // draw the lines - drawHighlightLines(context: context, point: _highlightPointBuffer, set: set) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift deleted file mode 100644 index 3d9bcc40..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// LineScatterCandleRadarChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 29/7/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class LineScatterCandleRadarChartRenderer: ChartDataRendererBase -{ - public override init(animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - } - - /// Draws vertical & horizontal highlight-lines if enabled. - /// :param: context - /// :param: points - /// :param: horizontal - /// :param: vertical - public func drawHighlightLines(context context: CGContext?, point: CGPoint, set: LineScatterCandleChartDataSet) - { - // draw vertical highlight lines - if set.isVerticalHighlightIndicatorEnabled - { - CGContextBeginPath(context) - CGContextMoveToPoint(context, point.x, viewPortHandler.contentTop) - CGContextAddLineToPoint(context, point.x, viewPortHandler.contentBottom) - CGContextStrokePath(context) - } - - // draw horizontal highlight lines - if set.isHorizontalHighlightIndicatorEnabled - { - CGContextBeginPath(context) - CGContextMoveToPoint(context, viewPortHandler.contentLeft, point.y) - CGContextAddLineToPoint(context, viewPortHandler.contentRight, point.y) - CGContextStrokePath(context) - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/PieChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/PieChartRenderer.swift deleted file mode 100755 index 9bb71a53..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/PieChartRenderer.swift +++ /dev/null @@ -1,391 +0,0 @@ -// -// PieChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class PieChartRenderer: ChartDataRendererBase -{ - internal weak var _chart: PieChartView! - - public var drawHoleEnabled = true - public var holeTransparent = true - public var holeColor: UIColor? = UIColor.whiteColor() - public var holeRadiusPercent = CGFloat(0.5) - public var transparentCircleRadiusPercent = CGFloat(0.55) - public var centerTextColor = UIColor.blackColor() - public var centerTextFont = UIFont.systemFontOfSize(12.0) - public var drawXLabelsEnabled = true - public var usePercentValuesEnabled = false - public var centerText: String! - public var drawCenterTextEnabled = true - public var centerTextLineBreakMode = NSLineBreakMode.ByTruncatingTail - public var centerTextRadiusPercent: CGFloat = 1.0 - - public init(chart: PieChartView, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - _chart = chart - } - - public override func drawData(context context: CGContext?) - { - if (_chart !== nil) - { - let pieData = _chart.data - - if (pieData != nil) - { - for set in pieData!.dataSets as! [PieChartDataSet] - { - if set.isVisible && set.entryCount > 0 - { - drawDataSet(context: context, dataSet: set) - } - } - } - } - } - - internal func drawDataSet(context context: CGContext?, dataSet: PieChartDataSet) - { - var angle = _chart.rotationAngle - - var cnt = 0 - - var entries = dataSet.yVals - var drawAngles = _chart.drawAngles - let circleBox = _chart.circleBox - let radius = _chart.radius - let innerRadius = drawHoleEnabled && holeTransparent ? radius * holeRadiusPercent : 0.0 - - CGContextSaveGState(context) - - for (var j = 0; j < entries.count; j++) - { - let newangle = drawAngles[cnt] - let sliceSpace = dataSet.sliceSpace - - let e = entries[j] - - // draw only if the value is greater than zero - if ((abs(e.value) > 0.000001)) - { - if (!_chart.needsHighlight(xIndex: e.xIndex, - dataSetIndex: _chart.data!.indexOfDataSet(dataSet))) - { - let startAngle = angle + sliceSpace / 2.0 - var sweepAngle = newangle * _animator.phaseY - - sliceSpace / 2.0 - if (sweepAngle < 0.0) - { - sweepAngle = 0.0 - } - let endAngle = startAngle + sweepAngle - - let path = CGPathCreateMutable() - CGPathMoveToPoint(path, nil, circleBox.midX, circleBox.midY) - CGPathAddArc(path, nil, circleBox.midX, circleBox.midY, radius, startAngle * ChartUtils.Math.FDEG2RAD, endAngle * ChartUtils.Math.FDEG2RAD, false) - CGPathCloseSubpath(path) - - if (innerRadius > 0.0) - { - CGPathMoveToPoint(path, nil, circleBox.midX, circleBox.midY) - CGPathAddArc(path, nil, circleBox.midX, circleBox.midY, innerRadius, startAngle * ChartUtils.Math.FDEG2RAD, endAngle * ChartUtils.Math.FDEG2RAD, false) - CGPathCloseSubpath(path) - } - - CGContextBeginPath(context) - CGContextAddPath(context, path) - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - CGContextEOFillPath(context) - } - } - - angle += newangle * _animator.phaseX - cnt++ - } - - CGContextRestoreGState(context) - } - - public override func drawValues(context context: CGContext?) - { - let center = _chart.centerCircleBox - - // get whole the radius - var r = _chart.radius - let rotationAngle = _chart.rotationAngle - var drawAngles = _chart.drawAngles - var absoluteAngles = _chart.absoluteAngles - - var off = r / 10.0 * 3.0 - - if (drawHoleEnabled) - { - off = (r - (r * _chart.holeRadiusPercent)) / 2.0 - } - - r -= off; // offset to keep things inside the chart - - let data: ChartData! = _chart.data - if (data === nil) - { - return - } - - let defaultValueFormatter = _chart.valueFormatter - - var dataSets = data.dataSets - let drawXVals = drawXLabelsEnabled - - var cnt = 0 - - for (var i = 0; i < dataSets.count; i++) - { - let dataSet = dataSets[i] as! PieChartDataSet - - let drawYVals = dataSet.isDrawValuesEnabled - - if (!drawYVals && !drawXVals) - { - continue - } - - let valueFont = dataSet.valueFont - let valueTextColor = dataSet.valueTextColor - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - var entries = dataSet.yVals - - for (var j = 0, maxEntry = Int(min(ceil(CGFloat(entries.count) * _animator.phaseX), CGFloat(entries.count))); j < maxEntry; j++) - { - if (drawXVals && !drawYVals && (j >= data.xValCount || data.xVals[j] == nil)) - { - continue - } - - // offset needed to center the drawn text in the slice - let offset = drawAngles[cnt] / 2.0 - - // calculate the text position - let x = (r * cos(((rotationAngle + absoluteAngles[cnt] - offset) * _animator.phaseY) * ChartUtils.Math.FDEG2RAD) + center.x) - var y = (r * sin(((rotationAngle + absoluteAngles[cnt] - offset) * _animator.phaseY) * ChartUtils.Math.FDEG2RAD) + center.y) - - let value = usePercentValuesEnabled ? entries[j].value / data.yValueSum * 100.0 : entries[j].value - - let val = formatter!.stringFromNumber(value)! - - let lineHeight = valueFont.lineHeight - y -= lineHeight - - // draw everything, depending on settings - if (drawXVals && drawYVals) - { - ChartUtils.drawText(context: context, text: val, point: CGPoint(x: x, y: y), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - - if (j < data.xValCount && data.xVals[j] != nil) - { - ChartUtils.drawText(context: context, text: data.xVals[j]!, point: CGPoint(x: x, y: y + lineHeight), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - } - else if (drawXVals && !drawYVals) - { - ChartUtils.drawText(context: context, text: data.xVals[j]!, point: CGPoint(x: x, y: y + lineHeight / 2.0), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - else if (!drawXVals && drawYVals) - { - ChartUtils.drawText(context: context, text: val, point: CGPoint(x: x, y: y + lineHeight / 2.0), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - - cnt++ - } - } - } - - public override func drawExtras(context context: CGContext?) - { - drawHole(context: context) - drawCenterText(context: context) - } - - /// draws the hole in the center of the chart and the transparent circle / hole - private func drawHole(context context: CGContext?) - { - if (_chart.drawHoleEnabled) - { - CGContextSaveGState(context) - - let radius = _chart.radius - let holeRadius = radius * holeRadiusPercent - let center = _chart.centerCircleBox - - if (holeColor !== nil && holeColor != UIColor.clearColor()) - { - // draw the hole-circle - CGContextSetFillColorWithColor(context, holeColor!.CGColor) - CGContextFillEllipseInRect(context, CGRect(x: center.x - holeRadius, y: center.y - holeRadius, width: holeRadius * 2.0, height: holeRadius * 2.0)) - } - - if (transparentCircleRadiusPercent > holeRadiusPercent) - { - let secondHoleRadius = radius * transparentCircleRadiusPercent - - // make transparent - CGContextSetFillColorWithColor(context, holeColor!.colorWithAlphaComponent(CGFloat(0x60) / CGFloat(0xFF)).CGColor) - - // draw the transparent-circle - CGContextFillEllipseInRect(context, CGRect(x: center.x - secondHoleRadius, y: center.y - secondHoleRadius, width: secondHoleRadius * 2.0, height: secondHoleRadius * 2.0)) - } - - CGContextRestoreGState(context) - } - } - - /// draws the description text in the center of the pie chart makes most sense when center-hole is enabled - private func drawCenterText(context context: CGContext?) - { - if (drawCenterTextEnabled && centerText != nil && centerText.characters.count > 0) - { - let center = _chart.centerCircleBox - let innerRadius = drawHoleEnabled && holeTransparent ? _chart.radius * holeRadiusPercent : _chart.radius - let holeRect = CGRect(x: center.x - innerRadius, y: center.y - innerRadius, width: innerRadius * 2.0, height: innerRadius * 2.0) - var boundingRect = holeRect - - if (centerTextRadiusPercent > 0.0) - { - boundingRect = CGRectInset(boundingRect, (boundingRect.width - boundingRect.width * centerTextRadiusPercent) / 2.0, (boundingRect.height - boundingRect.height * centerTextRadiusPercent) / 2.0) - } - - let centerTextNs = self.centerText as NSString - - let paragraphStyle = NSParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle - paragraphStyle.lineBreakMode = centerTextLineBreakMode - paragraphStyle.alignment = .Center - - let drawingAttrs = [NSFontAttributeName: centerTextFont, NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName: centerTextColor] - - let textBounds = centerTextNs.boundingRectWithSize(boundingRect.size, options: [.UsesLineFragmentOrigin, .UsesFontLeading, .TruncatesLastVisibleLine], attributes: drawingAttrs, context: nil) - - var drawingRect = boundingRect - drawingRect.origin.x += (boundingRect.size.width - textBounds.size.width) / 2.0 - drawingRect.origin.y += (boundingRect.size.height - textBounds.size.height) / 2.0 - drawingRect.size = textBounds.size - - CGContextSaveGState(context) - - let clippingPath = CGPathCreateWithEllipseInRect(holeRect, nil) - CGContextBeginPath(context) - CGContextAddPath(context, clippingPath) - CGContextClip(context) - - centerTextNs.drawWithRect(drawingRect, options: [.UsesLineFragmentOrigin, .UsesFontLeading, .TruncatesLastVisibleLine], attributes: drawingAttrs, context: nil) - - CGContextRestoreGState(context) - } - } - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - if (_chart.data === nil) - { - return - } - - CGContextSaveGState(context) - - let rotationAngle = _chart.rotationAngle - var angle = CGFloat(0.0) - - var drawAngles = _chart.drawAngles - var absoluteAngles = _chart.absoluteAngles - - let innerRadius = drawHoleEnabled && holeTransparent ? _chart.radius * holeRadiusPercent : 0.0 - - for (var i = 0; i < indices.count; i++) - { - // get the index to highlight - let xIndex = indices[i].xIndex - if (xIndex >= drawAngles.count) - { - continue - } - - let set = _chart.data?.getDataSetByIndex(indices[i].dataSetIndex) as! PieChartDataSet! - - if (set === nil || !set.isHighlightEnabled) - { - continue - } - - if (xIndex == 0) - { - angle = rotationAngle - } - else - { - angle = rotationAngle + absoluteAngles[xIndex - 1] - } - - angle *= _animator.phaseY - - let sliceDegrees = drawAngles[xIndex] - - let shift = set.selectionShift - let circleBox = _chart.circleBox - - let highlighted = CGRect( - x: circleBox.origin.x - shift, - y: circleBox.origin.y - shift, - width: circleBox.size.width + shift * 2.0, - height: circleBox.size.height + shift * 2.0) - - CGContextSetFillColorWithColor(context, set.colorAt(xIndex).CGColor) - - // redefine the rect that contains the arc so that the highlighted pie is not cut off - - let startAngle = angle + set.sliceSpace / 2.0 - var sweepAngle = sliceDegrees * _animator.phaseY - set.sliceSpace / 2.0 - if (sweepAngle < 0.0) - { - sweepAngle = 0.0 - } - let endAngle = startAngle + sweepAngle - - let path = CGPathCreateMutable() - CGPathMoveToPoint(path, nil, highlighted.midX, highlighted.midY) - CGPathAddArc(path, nil, highlighted.midX, highlighted.midY, highlighted.size.width / 2.0, startAngle * ChartUtils.Math.FDEG2RAD, endAngle * ChartUtils.Math.FDEG2RAD, false) - CGPathCloseSubpath(path) - - if (innerRadius > 0.0) - { - CGPathMoveToPoint(path, nil, highlighted.midX, highlighted.midY) - CGPathAddArc(path, nil, highlighted.midX, highlighted.midY, innerRadius, startAngle * ChartUtils.Math.FDEG2RAD, endAngle * ChartUtils.Math.FDEG2RAD, false) - CGPathCloseSubpath(path) - } - - CGContextBeginPath(context) - CGContextAddPath(context, path) - CGContextEOFillPath(context) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/RadarChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/RadarChartRenderer.swift deleted file mode 100644 index 001415b9..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/RadarChartRenderer.swift +++ /dev/null @@ -1,294 +0,0 @@ -// -// RadarChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -public class RadarChartRenderer: LineScatterCandleRadarChartRenderer -{ - internal weak var _chart: RadarChartView! - - public init(chart: RadarChartView, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - _chart = chart - } - - public override func drawData(context context: CGContext?) - { - if (_chart !== nil) - { - let radarData = _chart.data - - if (radarData != nil) - { - for set in radarData!.dataSets as! [RadarChartDataSet] - { - if set.isVisible && set.entryCount > 0 - { - drawDataSet(context: context, dataSet: set) - } - } - } - } - } - - internal func drawDataSet(context context: CGContext?, dataSet: RadarChartDataSet) - { - CGContextSaveGState(context) - - let sliceangle = _chart.sliceAngle - - // calculate the factor that is needed for transforming the value to pixels - let factor = _chart.factor - - let center = _chart.centerOffsets - var entries = dataSet.yVals - let path = CGPathCreateMutable() - var hasMovedToPoint = false - - for (var j = 0; j < entries.count; j++) - { - let e = entries[j] - - let p = ChartUtils.getPosition(center: center, dist: CGFloat(e.value - _chart.chartYMin) * factor, angle: sliceangle * CGFloat(j) + _chart.rotationAngle) - - if (p.x.isNaN) - { - continue - } - - if (!hasMovedToPoint) - { - CGPathMoveToPoint(path, nil, p.x, p.y) - hasMovedToPoint = true - } - else - { - CGPathAddLineToPoint(path, nil, p.x, p.y) - } - } - - CGPathCloseSubpath(path) - - // draw filled - if (dataSet.isDrawFilledEnabled) - { - CGContextSetFillColorWithColor(context, dataSet.colorAt(0).CGColor) - CGContextSetAlpha(context, dataSet.fillAlpha) - - CGContextBeginPath(context) - CGContextAddPath(context, path) - CGContextFillPath(context) - } - - // draw the line (only if filled is disabled or alpha is below 255) - if (!dataSet.isDrawFilledEnabled || dataSet.fillAlpha < 1.0) - { - CGContextSetStrokeColorWithColor(context, dataSet.colorAt(0).CGColor) - CGContextSetLineWidth(context, dataSet.lineWidth) - CGContextSetAlpha(context, 1.0) - - CGContextBeginPath(context) - CGContextAddPath(context, path) - CGContextStrokePath(context) - } - - CGContextRestoreGState(context) - } - - public override func drawValues(context context: CGContext?) - { - if (_chart.data === nil) - { - return - } - - let data = _chart.data! - - let defaultValueFormatter = _chart.valueFormatter - - let sliceangle = _chart.sliceAngle - - // calculate the factor that is needed for transforming the value to pixels - let factor = _chart.factor - - let center = _chart.centerOffsets - - let yoffset = CGFloat(5.0) - - for (var i = 0, count = data.dataSetCount; i < count; i++) - { - let dataSet = data.getDataSetByIndex(i) as! RadarChartDataSet - - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - var entries = dataSet.yVals - - for (var j = 0; j < entries.count; j++) - { - let e = entries[j] - - let p = ChartUtils.getPosition(center: center, dist: CGFloat(e.value) * factor, angle: sliceangle * CGFloat(j) + _chart.rotationAngle) - - let valueFont = dataSet.valueFont - let valueTextColor = dataSet.valueTextColor - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - ChartUtils.drawText(context: context, text: formatter!.stringFromNumber(e.value)!, point: CGPoint(x: p.x, y: p.y - yoffset - valueFont.lineHeight), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - } - } - - public override func drawExtras(context context: CGContext?) - { - drawWeb(context: context) - } - - private var _webLineSegmentsBuffer = [CGPoint](count: 2, repeatedValue: CGPoint()) - - internal func drawWeb(context context: CGContext?) - { - let sliceangle = _chart.sliceAngle - - CGContextSaveGState(context) - - // calculate the factor that is needed for transforming the value to - // pixels - let factor = _chart.factor - let rotationangle = _chart.rotationAngle - - let center = _chart.centerOffsets - - // draw the web lines that come from the center - CGContextSetLineWidth(context, _chart.webLineWidth) - CGContextSetStrokeColorWithColor(context, _chart.webColor.CGColor) - CGContextSetAlpha(context, _chart.webAlpha) - - let xIncrements = 1 + _chart.skipWebLineCount - - for var i = 0, xValCount = _chart.data!.xValCount; i < xValCount; i += xIncrements - { - let p = ChartUtils.getPosition(center: center, dist: CGFloat(_chart.yRange) * factor, angle: sliceangle * CGFloat(i) + rotationangle) - - _webLineSegmentsBuffer[0].x = center.x - _webLineSegmentsBuffer[0].y = center.y - _webLineSegmentsBuffer[1].x = p.x - _webLineSegmentsBuffer[1].y = p.y - - CGContextStrokeLineSegments(context, _webLineSegmentsBuffer, 2) - } - - // draw the inner-web - CGContextSetLineWidth(context, _chart.innerWebLineWidth) - CGContextSetStrokeColorWithColor(context, _chart.innerWebColor.CGColor) - CGContextSetAlpha(context, _chart.webAlpha) - - let labelCount = _chart.yAxis.entryCount - - for (var j = 0; j < labelCount; j++) - { - for (var i = 0, xValCount = _chart.data!.xValCount; i < xValCount; i++) - { - let r = CGFloat(_chart.yAxis.entries[j] - _chart.chartYMin) * factor - - let p1 = ChartUtils.getPosition(center: center, dist: r, angle: sliceangle * CGFloat(i) + rotationangle) - let p2 = ChartUtils.getPosition(center: center, dist: r, angle: sliceangle * CGFloat(i + 1) + rotationangle) - - _webLineSegmentsBuffer[0].x = p1.x - _webLineSegmentsBuffer[0].y = p1.y - _webLineSegmentsBuffer[1].x = p2.x - _webLineSegmentsBuffer[1].y = p2.y - - CGContextStrokeLineSegments(context, _webLineSegmentsBuffer, 2) - } - } - - CGContextRestoreGState(context) - } - - private var _highlightPointBuffer = CGPoint() - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - if (_chart.data === nil) - { - return - } - - let data = _chart.data as! RadarChartData - - CGContextSaveGState(context) - CGContextSetLineWidth(context, data.highlightLineWidth) - if (data.highlightLineDashLengths != nil) - { - CGContextSetLineDash(context, data.highlightLineDashPhase, data.highlightLineDashLengths!, data.highlightLineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let sliceangle = _chart.sliceAngle - let factor = _chart.factor - - let center = _chart.centerOffsets - - for (var i = 0; i < indices.count; i++) - { - let set = _chart.data?.getDataSetByIndex(indices[i].dataSetIndex) as! RadarChartDataSet! - - if (set === nil || !set.isHighlightEnabled) - { - continue - } - - CGContextSetStrokeColorWithColor(context, set.highlightColor.CGColor) - - // get the index to highlight - let xIndex = indices[i].xIndex - - let e = set.entryForXIndex(xIndex) - if (e === nil || e!.xIndex != xIndex) - { - continue - } - - let j = set.entryIndex(entry: e!, isEqual: true) - let y = (e!.value - _chart.chartYMin) - - if (y.isNaN) - { - continue - } - - _highlightPointBuffer = ChartUtils.getPosition(center: center, dist: CGFloat(y) * factor, - angle: sliceangle * CGFloat(j) + _chart.rotationAngle) - - // draw the lines - drawHighlightLines(context: context, point: _highlightPointBuffer, set: set) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ScatterChartRenderer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ScatterChartRenderer.swift deleted file mode 100644 index bf0a8c65..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Renderers/ScatterChartRenderer.swift +++ /dev/null @@ -1,299 +0,0 @@ -// -// ScatterChartRenderer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 4/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics -import UIKit - -@objc -public protocol ScatterChartRendererDelegate -{ - func scatterChartRendererData(renderer: ScatterChartRenderer) -> ScatterChartData! - func scatterChartRenderer(renderer: ScatterChartRenderer, transformerForAxis which: ChartYAxis.AxisDependency) -> ChartTransformer! - func scatterChartDefaultRendererValueFormatter(renderer: ScatterChartRenderer) -> NSNumberFormatter! - func scatterChartRendererChartYMax(renderer: ScatterChartRenderer) -> Double - func scatterChartRendererChartYMin(renderer: ScatterChartRenderer) -> Double - func scatterChartRendererChartXMax(renderer: ScatterChartRenderer) -> Double - func scatterChartRendererChartXMin(renderer: ScatterChartRenderer) -> Double - func scatterChartRendererMaxVisibleValueCount(renderer: ScatterChartRenderer) -> Int -} - -public class ScatterChartRenderer: LineScatterCandleRadarChartRenderer -{ - public weak var delegate: ScatterChartRendererDelegate? - - public init(delegate: ScatterChartRendererDelegate?, animator: ChartAnimator?, viewPortHandler: ChartViewPortHandler) - { - super.init(animator: animator, viewPortHandler: viewPortHandler) - - self.delegate = delegate - } - - public override func drawData(context context: CGContext?) - { - let scatterData = delegate!.scatterChartRendererData(self) - - if (scatterData === nil) - { - return - } - - for (var i = 0; i < scatterData.dataSetCount; i++) - { - let set = scatterData.getDataSetByIndex(i) - - if (set !== nil && set!.isVisible) - { - drawDataSet(context: context, dataSet: set as! ScatterChartDataSet) - } - } - } - - private var _lineSegments = [CGPoint](count: 2, repeatedValue: CGPoint()) - - internal func drawDataSet(context context: CGContext?, dataSet: ScatterChartDataSet) - { - let trans = delegate!.scatterChartRenderer(self, transformerForAxis: dataSet.axisDependency) - - let phaseY = _animator.phaseY - - var entries = dataSet.yVals - - let shapeSize = dataSet.scatterShapeSize - let shapeHalf = shapeSize / 2.0 - - var point = CGPoint() - - let valueToPixelMatrix = trans.valueToPixelMatrix - - let shape = dataSet.scatterShape - - CGContextSaveGState(context) - - for (var j = 0, count = Int(min(ceil(CGFloat(entries.count) * _animator.phaseX), CGFloat(entries.count))); j < count; j++) - { - let e = entries[j] - point.x = CGFloat(e.xIndex) - point.y = CGFloat(e.value) * phaseY - point = CGPointApplyAffineTransform(point, valueToPixelMatrix); - - if (!viewPortHandler.isInBoundsRight(point.x)) - { - break - } - - if (!viewPortHandler.isInBoundsLeft(point.x) || !viewPortHandler.isInBoundsY(point.y)) - { - continue - } - - if (shape == .Square) - { - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - var rect = CGRect() - rect.origin.x = point.x - shapeHalf - rect.origin.y = point.y - shapeHalf - rect.size.width = shapeSize - rect.size.height = shapeSize - CGContextFillRect(context, rect) - } - else if (shape == .Circle) - { - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - var rect = CGRect() - rect.origin.x = point.x - shapeHalf - rect.origin.y = point.y - shapeHalf - rect.size.width = shapeSize - rect.size.height = shapeSize - CGContextFillEllipseInRect(context, rect) - } - else if (shape == .Cross) - { - CGContextSetStrokeColorWithColor(context, dataSet.colorAt(j).CGColor) - _lineSegments[0].x = point.x - shapeHalf - _lineSegments[0].y = point.y - _lineSegments[1].x = point.x + shapeHalf - _lineSegments[1].y = point.y - CGContextStrokeLineSegments(context, _lineSegments, 2) - - _lineSegments[0].x = point.x - _lineSegments[0].y = point.y - shapeHalf - _lineSegments[1].x = point.x - _lineSegments[1].y = point.y + shapeHalf - CGContextStrokeLineSegments(context, _lineSegments, 2) - } - else if (shape == .Triangle) - { - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - - // create a triangle path - CGContextBeginPath(context) - CGContextMoveToPoint(context, point.x, point.y - shapeHalf) - CGContextAddLineToPoint(context, point.x + shapeHalf, point.y + shapeHalf) - CGContextAddLineToPoint(context, point.x - shapeHalf, point.y + shapeHalf) - CGContextClosePath(context) - - CGContextFillPath(context) - } - else if (shape == .Custom) - { - CGContextSetFillColorWithColor(context, dataSet.colorAt(j).CGColor) - - let customShape = dataSet.customScatterShape - - if (customShape === nil) - { - return - } - - // transform the provided custom path - CGContextSaveGState(context) - CGContextTranslateCTM(context, point.x, point.y) - - CGContextBeginPath(context) - CGContextAddPath(context, customShape) - CGContextFillPath(context) - - CGContextRestoreGState(context) - } - } - - CGContextRestoreGState(context) - } - - public override func drawValues(context context: CGContext?) - { - let scatterData = delegate!.scatterChartRendererData(self) - if (scatterData === nil) - { - return - } - - let defaultValueFormatter = delegate!.scatterChartDefaultRendererValueFormatter(self) - - // if values are drawn - if (scatterData.yValCount < Int(ceil(CGFloat(delegate!.scatterChartRendererMaxVisibleValueCount(self)) * viewPortHandler.scaleX))) - { - var dataSets = scatterData.dataSets as! [ScatterChartDataSet] - - for (var i = 0; i < scatterData.dataSetCount; i++) - { - let dataSet = dataSets[i] - - if !dataSet.isDrawValuesEnabled || dataSet.entryCount == 0 - { - continue - } - - let valueFont = dataSet.valueFont - let valueTextColor = dataSet.valueTextColor - - var formatter = dataSet.valueFormatter - if (formatter === nil) - { - formatter = defaultValueFormatter - } - - var entries = dataSet.yVals - - var positions = delegate!.scatterChartRenderer(self, transformerForAxis: dataSet.axisDependency).generateTransformedValuesScatter(entries, phaseY: _animator.phaseY) - - let shapeSize = dataSet.scatterShapeSize - let lineHeight = valueFont.lineHeight - - for (var j = 0, count = Int(ceil(CGFloat(positions.count) * _animator.phaseX)); j < count; j++) - { - if (!viewPortHandler.isInBoundsRight(positions[j].x)) - { - break - } - - // make sure the lines don't do shitty things outside bounds - if ((!viewPortHandler.isInBoundsLeft(positions[j].x) - || !viewPortHandler.isInBoundsY(positions[j].y))) - { - continue - } - - let val = entries[j].value - - let text = formatter!.stringFromNumber(val) - - ChartUtils.drawText(context: context, text: text!, point: CGPoint(x: positions[j].x, y: positions[j].y - shapeSize - lineHeight), align: .Center, attributes: [NSFontAttributeName: valueFont, NSForegroundColorAttributeName: valueTextColor]) - } - } - } - } - - public override func drawExtras(context context: CGContext?) - { - - } - - private var _highlightPointBuffer = CGPoint() - - public override func drawHighlighted(context context: CGContext?, indices: [ChartHighlight]) - { - let scatterData = delegate!.scatterChartRendererData(self) - let chartXMax = delegate!.scatterChartRendererChartXMax(self) - CGContextSaveGState(context) - - for (var i = 0; i < indices.count; i++) - { - let set = scatterData.getDataSetByIndex(indices[i].dataSetIndex) as! ScatterChartDataSet! - - if (set === nil || !set.isHighlightEnabled) - { - continue - } - - CGContextSetStrokeColorWithColor(context, set.highlightColor.CGColor) - CGContextSetLineWidth(context, set.highlightLineWidth) - if (set.highlightLineDashLengths != nil) - { - CGContextSetLineDash(context, set.highlightLineDashPhase, set.highlightLineDashLengths!, set.highlightLineDashLengths!.count) - } - else - { - CGContextSetLineDash(context, 0.0, nil, 0) - } - - let xIndex = indices[i].xIndex; // get the x-position - - if (CGFloat(xIndex) > CGFloat(chartXMax) * _animator.phaseX) - { - continue - } - - let yVal = set.yValForXIndex(xIndex) - if (yVal.isNaN) - { - continue - } - - let y = CGFloat(yVal) * _animator.phaseY; // get the y-position - - _highlightPointBuffer.x = CGFloat(xIndex) - _highlightPointBuffer.y = y - - let trans = delegate!.scatterChartRenderer(self, transformerForAxis: set.axisDependency) - - trans.pointValueToPixel(&_highlightPointBuffer) - - // draw the lines - drawHighlightLines(context: context, point: _highlightPointBuffer, set: set) - } - - CGContextRestoreGState(context) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartColorTemplates.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartColorTemplates.swift deleted file mode 100644 index d6870875..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartColorTemplates.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// ChartColorTemplates.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit - -public class ChartColorTemplates: NSObject -{ - public class func liberty () -> [UIColor] - { - return [ - UIColor(red: 207/255.0, green: 248/255.0, blue: 246/255.0, alpha: 1.0), - UIColor(red: 148/255.0, green: 212/255.0, blue: 212/255.0, alpha: 1.0), - UIColor(red: 136/255.0, green: 180/255.0, blue: 187/255.0, alpha: 1.0), - UIColor(red: 118/255.0, green: 174/255.0, blue: 175/255.0, alpha: 1.0), - UIColor(red: 42/255.0, green: 109/255.0, blue: 130/255.0, alpha: 1.0) - ] - } - - public class func joyful () -> [UIColor] - { - return [ - UIColor(red: 217/255.0, green: 80/255.0, blue: 138/255.0, alpha: 1.0), - UIColor(red: 254/255.0, green: 149/255.0, blue: 7/255.0, alpha: 1.0), - UIColor(red: 254/255.0, green: 247/255.0, blue: 120/255.0, alpha: 1.0), - UIColor(red: 106/255.0, green: 167/255.0, blue: 134/255.0, alpha: 1.0), - UIColor(red: 53/255.0, green: 194/255.0, blue: 209/255.0, alpha: 1.0) - ] - } - - public class func pastel () -> [UIColor] - { - return [ - UIColor(red: 64/255.0, green: 89/255.0, blue: 128/255.0, alpha: 1.0), - UIColor(red: 149/255.0, green: 165/255.0, blue: 124/255.0, alpha: 1.0), - UIColor(red: 217/255.0, green: 184/255.0, blue: 162/255.0, alpha: 1.0), - UIColor(red: 191/255.0, green: 134/255.0, blue: 134/255.0, alpha: 1.0), - UIColor(red: 179/255.0, green: 48/255.0, blue: 80/255.0, alpha: 1.0) - ] - } - - public class func colorful () -> [UIColor] - { - return [ - UIColor(red: 193/255.0, green: 37/255.0, blue: 82/255.0, alpha: 1.0), - UIColor(red: 255/255.0, green: 102/255.0, blue: 0/255.0, alpha: 1.0), - UIColor(red: 245/255.0, green: 199/255.0, blue: 0/255.0, alpha: 1.0), - UIColor(red: 106/255.0, green: 150/255.0, blue: 31/255.0, alpha: 1.0), - UIColor(red: 179/255.0, green: 100/255.0, blue: 53/255.0, alpha: 1.0) - ] - } - - public class func vordiplom () -> [UIColor] - { - return [ - UIColor(red: 192/255.0, green: 255/255.0, blue: 140/255.0, alpha: 1.0), - UIColor(red: 255/255.0, green: 247/255.0, blue: 140/255.0, alpha: 1.0), - UIColor(red: 255/255.0, green: 208/255.0, blue: 140/255.0, alpha: 1.0), - UIColor(red: 140/255.0, green: 234/255.0, blue: 255/255.0, alpha: 1.0), - UIColor(red: 255/255.0, green: 140/255.0, blue: 157/255.0, alpha: 1.0) - ] - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartSelectionDetail.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartSelectionDetail.swift deleted file mode 100644 index 4374c753..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartSelectionDetail.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// ChartSelectionDetail.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation - -public class ChartSelectionDetail: NSObject -{ - private var _value = Double(0) - private var _dataSetIndex = Int(0) - private var _dataSet: ChartDataSet! - - public override init() - { - super.init() - } - - public init(value: Double, dataSetIndex: Int, dataSet: ChartDataSet) - { - super.init() - - _value = value - _dataSetIndex = dataSetIndex - _dataSet = dataSet - } - - public var value: Double - { - return _value - } - - public var dataSetIndex: Int - { - return _dataSetIndex - } - - public var dataSet: ChartDataSet? - { - return _dataSet - } - - // MARK: NSObject - - public override func isEqual(object: AnyObject?) -> Bool - { - if (object === nil) - { - return false - } - - if (!object!.isKindOfClass(self.dynamicType)) - { - return false - } - - if (object!.value != _value) - { - return false - } - - if (object!.dataSetIndex != _dataSetIndex) - { - return false - } - - if (object!.dataSet !== _dataSet) - { - return false - } - - return true - } -} - -public func ==(lhs: ChartSelectionDetail, rhs: ChartSelectionDetail) -> Bool -{ - if (lhs === rhs) - { - return true - } - - if (!lhs.isKindOfClass(rhs.dynamicType)) - { - return false - } - - if (lhs.value != rhs.value) - { - return false - } - - if (lhs.dataSetIndex != rhs.dataSetIndex) - { - return false - } - - if (lhs.dataSet !== rhs.dataSet) - { - return false - } - - return true -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformer.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformer.swift deleted file mode 100644 index e8028e1d..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformer.swift +++ /dev/null @@ -1,288 +0,0 @@ -// -// ChartTransformer.swift -// Charts -// -// Created by Daniel Cohen Gindi on 6/3/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -/// Transformer class that contains all matrices and is responsible for transforming values into pixels on the screen and backwards. -public class ChartTransformer: NSObject -{ - /// matrix to map the values to the screen pixels - internal var _matrixValueToPx = CGAffineTransformIdentity - - /// matrix for handling the different offsets of the chart - internal var _matrixOffset = CGAffineTransformIdentity - - internal var _viewPortHandler: ChartViewPortHandler - - public init(viewPortHandler: ChartViewPortHandler) - { - _viewPortHandler = viewPortHandler - } - - /// Prepares the matrix that transforms values to pixels. Calculates the scale factors from the charts size and offsets. - public func prepareMatrixValuePx(chartXMin chartXMin: Double, deltaX: CGFloat, deltaY: CGFloat, chartYMin: Double) - { - let scaleX = (_viewPortHandler.contentWidth / deltaX) - let scaleY = (_viewPortHandler.contentHeight / deltaY) - - // setup all matrices - _matrixValueToPx = CGAffineTransformIdentity - _matrixValueToPx = CGAffineTransformScale(_matrixValueToPx, scaleX, -scaleY) - _matrixValueToPx = CGAffineTransformTranslate(_matrixValueToPx, CGFloat(-chartXMin), CGFloat(-chartYMin)) - } - - /// Prepares the matrix that contains all offsets. - public func prepareMatrixOffset(inverted: Bool) - { - if (!inverted) - { - _matrixOffset = CGAffineTransformMakeTranslation(_viewPortHandler.offsetLeft, _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) - } - else - { - _matrixOffset = CGAffineTransformMakeScale(1.0, -1.0) - _matrixOffset = CGAffineTransformTranslate(_matrixOffset, _viewPortHandler.offsetLeft, -_viewPortHandler.offsetTop) - } - } - - /// Transforms an arraylist of Entry into a double array containing the x and y values transformed with all matrices for the SCATTERCHART. - public func generateTransformedValuesScatter(entries: [ChartDataEntry], phaseY: CGFloat) -> [CGPoint] - { - var valuePoints = [CGPoint]() - valuePoints.reserveCapacity(entries.count) - - for (var j = 0; j < entries.count; j++) - { - let e = entries[j] - valuePoints.append(CGPoint(x: CGFloat(e.xIndex), y: CGFloat(e.value) * phaseY)) - } - - pointValuesToPixel(&valuePoints) - - return valuePoints - } - - /// Transforms an arraylist of Entry into a double array containing the x and y values transformed with all matrices for the BUBBLECHART. - public func generateTransformedValuesBubble(entries: [ChartDataEntry], phaseX: CGFloat, phaseY: CGFloat, from: Int, to: Int) -> [CGPoint] - { - let count = to - from - - var valuePoints = [CGPoint]() - valuePoints.reserveCapacity(count) - - for (var j = 0; j < count; j++) - { - let e = entries[j + from] - valuePoints.append(CGPoint(x: CGFloat(e.xIndex - from) * phaseX + CGFloat(from), y: CGFloat(e.value) * phaseY)) - } - - pointValuesToPixel(&valuePoints) - - return valuePoints - } - - /// Transforms an arraylist of Entry into a double array containing the x and y values transformed with all matrices for the LINECHART. - public func generateTransformedValuesLine(entries: [ChartDataEntry], phaseX: CGFloat, phaseY: CGFloat, from: Int, to: Int) -> [CGPoint] - { - let count = Int(ceil(CGFloat(to - from) * phaseX)) - - var valuePoints = [CGPoint]() - valuePoints.reserveCapacity(count) - - for (var j = 0; j < count; j++) - { - let e = entries[j + from] - valuePoints.append(CGPoint(x: CGFloat(e.xIndex), y: CGFloat(e.value) * phaseY)) - } - - pointValuesToPixel(&valuePoints) - - return valuePoints - } - - /// Transforms an arraylist of Entry into a double array containing the x and y values transformed with all matrices for the CANDLESTICKCHART. - public func generateTransformedValuesCandle(entries: [CandleChartDataEntry], phaseY: CGFloat) -> [CGPoint] - { - var valuePoints = [CGPoint]() - valuePoints.reserveCapacity(entries.count) - - for (var j = 0; j < entries.count; j++) - { - let e = entries[j] - valuePoints.append(CGPoint(x: CGFloat(e.xIndex), y: CGFloat(e.high) * phaseY)) - } - - pointValuesToPixel(&valuePoints) - - return valuePoints - } - - /// Transforms an arraylist of Entry into a double array containing the x and y values transformed with all matrices for the BARCHART. - public func generateTransformedValuesBarChart(entries: [BarChartDataEntry], dataSet: Int, barData: BarChartData, phaseY: CGFloat) -> [CGPoint] - { - var valuePoints = [CGPoint]() - valuePoints.reserveCapacity(entries.count) - - let setCount = barData.dataSetCount - let space = barData.groupSpace - - for (var j = 0; j < entries.count; j++) - { - let e = entries[j] - - // calculate the x-position, depending on datasetcount - let x = CGFloat(e.xIndex + (e.xIndex * (setCount - 1)) + dataSet) + space * CGFloat(e.xIndex) + space / 2.0 - let y = e.value - - valuePoints.append(CGPoint(x: x, y: CGFloat(y) * phaseY)) - } - - pointValuesToPixel(&valuePoints) - - return valuePoints - } - - /// Transforms an arraylist of Entry into a double array containing the x and y values transformed with all matrices for the BARCHART. - public func generateTransformedValuesHorizontalBarChart(entries: [ChartDataEntry], dataSet: Int, barData: BarChartData, phaseY: CGFloat) -> [CGPoint] - { - var valuePoints = [CGPoint]() - valuePoints.reserveCapacity(entries.count) - - let setCount = barData.dataSetCount - let space = barData.groupSpace - - for (var j = 0; j < entries.count; j++) - { - let e = entries[j] - let i = e.xIndex - - // calculate the x-position, depending on datasetcount - let x = CGFloat(i + (i * (setCount - 1)) + dataSet) + space * CGFloat(i) + space / 2.0 - let y = e.value - - valuePoints.append(CGPoint(x: CGFloat(y) * phaseY, y: x)) - } - - pointValuesToPixel(&valuePoints) - - return valuePoints - } - - /// Transform an array of points with all matrices. - // VERY IMPORTANT: Keep matrix order "value-touch-offset" when transforming. - public func pointValuesToPixel(inout pts: [CGPoint]) - { - let trans = valueToPixelMatrix - for (var i = 0, count = pts.count; i < count; i++) - { - pts[i] = CGPointApplyAffineTransform(pts[i], trans) - } - } - - public func pointValueToPixel(inout point: CGPoint) - { - point = CGPointApplyAffineTransform(point, valueToPixelMatrix) - } - - /// Transform a rectangle with all matrices. - public func rectValueToPixel(inout r: CGRect) - { - r = CGRectApplyAffineTransform(r, valueToPixelMatrix) - } - - /// Transform a rectangle with all matrices with potential animation phases. - public func rectValueToPixel(inout r: CGRect, phaseY: CGFloat) - { - // multiply the height of the rect with the phase - var bottom = r.origin.y + r.size.height - bottom *= phaseY - let top = r.origin.y * phaseY - r.size.height = bottom - top - r.origin.y = top - - r = CGRectApplyAffineTransform(r, valueToPixelMatrix) - } - - /// Transform a rectangle with all matrices. - public func rectValueToPixelHorizontal(inout r: CGRect) - { - r = CGRectApplyAffineTransform(r, valueToPixelMatrix) - } - - /// Transform a rectangle with all matrices with potential animation phases. - public func rectValueToPixelHorizontal(inout r: CGRect, phaseY: CGFloat) - { - // multiply the height of the rect with the phase - var right = r.origin.x + r.size.width - right *= phaseY - let left = r.origin.x * phaseY - r.size.width = right - left - r.origin.x = left - - r = CGRectApplyAffineTransform(r, valueToPixelMatrix) - } - - /// transforms multiple rects with all matrices - public func rectValuesToPixel(inout rects: [CGRect]) - { - let trans = valueToPixelMatrix - - for (var i = 0; i < rects.count; i++) - { - rects[i] = CGRectApplyAffineTransform(rects[i], trans) - } - } - - /// Transforms the given array of touch points (pixels) into values on the chart. - public func pixelsToValue(inout pixels: [CGPoint]) - { - let trans = pixelToValueMatrix - - for (var i = 0; i < pixels.count; i++) - { - pixels[i] = CGPointApplyAffineTransform(pixels[i], trans) - } - } - - /// Transforms the given touch point (pixels) into a value on the chart. - public func pixelToValue(inout pixel: CGPoint) - { - pixel = CGPointApplyAffineTransform(pixel, pixelToValueMatrix) - } - - /// - returns: the x and y values in the chart at the given touch point - /// (encapsulated in a PointD). This method transforms pixel coordinates to - /// coordinates / values in the chart. - public func getValueByTouchPoint(point: CGPoint) -> CGPoint - { - return CGPointApplyAffineTransform(point, pixelToValueMatrix) - } - - public var valueToPixelMatrix: CGAffineTransform - { - return - CGAffineTransformConcat( - CGAffineTransformConcat( - _matrixValueToPx, - _viewPortHandler.touchMatrix - ), - _matrixOffset - ) - } - - public var pixelToValueMatrix: CGAffineTransform - { - return CGAffineTransformInvert(valueToPixelMatrix) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift deleted file mode 100644 index eeb02ed8..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// ChartTransformerHorizontalBarChart.swift -// Charts -// -// Created by Daniel Cohen Gindi on 1/4/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class ChartTransformerHorizontalBarChart: ChartTransformer -{ - /// Prepares the matrix that contains all offsets. - public override func prepareMatrixOffset(inverted: Bool) - { - if (!inverted) - { - _matrixOffset = CGAffineTransformMakeTranslation(_viewPortHandler.offsetLeft, _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) - } - else - { - _matrixOffset = CGAffineTransformMakeScale(-1.0, 1.0) - _matrixOffset = CGAffineTransformTranslate(_matrixOffset, - -(_viewPortHandler.chartWidth - _viewPortHandler.offsetRight), - _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartUtils.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartUtils.swift deleted file mode 100755 index 19acd44f..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartUtils.swift +++ /dev/null @@ -1,230 +0,0 @@ -// -// Utils.swift -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import UIKit -import Darwin - -internal class ChartUtils -{ - internal struct Math - { - internal static let FDEG2RAD = CGFloat(M_PI / 180.0) - internal static let FRAD2DEG = CGFloat(180.0 / M_PI) - internal static let DEG2RAD = M_PI / 180.0 - internal static let RAD2DEG = 180.0 / M_PI - } - - internal class func roundToNextSignificant(number number: Double) -> Double - { - if (isinf(number) || isnan(number) || number == 0) - { - return number - } - - let d = ceil(log10(number < 0.0 ? -number : number)) - let pw = 1 - Int(d) - let magnitude = pow(Double(10.0), Double(pw)) - let shifted = round(number * magnitude) - return shifted / magnitude - } - - internal class func decimals(number: Double) -> Int - { - if (number == 0.0) - { - return 0 - } - - let i = roundToNextSignificant(number: Double(number)) - return Int(ceil(-log10(i))) + 2 - } - - internal class func nextUp(number: Double) -> Double - { - if (isinf(number) || isnan(number)) - { - return number - } - else - { - return number + DBL_EPSILON - } - } - - /// - returns: the index of the DataSet that contains the closest value on the y-axis. This will return -Integer.MAX_VALUE if failure. - internal class func closestDataSetIndex(valsAtIndex: [ChartSelectionDetail], value: Double, axis: ChartYAxis.AxisDependency?) -> Int - { - var index = -Int.max - var distance = DBL_MAX - - for (var i = 0; i < valsAtIndex.count; i++) - { - let sel = valsAtIndex[i] - - if (axis == nil || sel.dataSet?.axisDependency == axis) - { - let cdistance = abs(sel.value - value) - if (cdistance < distance) - { - index = valsAtIndex[i].dataSetIndex - distance = cdistance - } - } - } - - return index - } - - /// - returns: the minimum distance from a touch-y-value (in pixels) to the closest y-value (in pixels) that is displayed in the chart. - internal class func getMinimumDistance(valsAtIndex: [ChartSelectionDetail], val: Double, axis: ChartYAxis.AxisDependency) -> Double - { - var distance = DBL_MAX - - for (var i = 0, count = valsAtIndex.count; i < count; i++) - { - let sel = valsAtIndex[i] - - if (sel.dataSet!.axisDependency == axis) - { - let cdistance = abs(sel.value - val) - if (cdistance < distance) - { - distance = cdistance - } - } - } - - return distance - } - - /// Calculates the position around a center point, depending on the distance from the center, and the angle of the position around the center. - internal class func getPosition(center center: CGPoint, dist: CGFloat, angle: CGFloat) -> CGPoint - { - return CGPoint( - x: center.x + dist * cos(angle * Math.FDEG2RAD), - y: center.y + dist * sin(angle * Math.FDEG2RAD) - ) - } - - internal class func drawText(context context: CGContext?, text: String, var point: CGPoint, align: NSTextAlignment, attributes: [String : AnyObject]?) - { - if (align == .Center) - { - point.x -= text.sizeWithAttributes(attributes).width / 2.0 - } - else if (align == .Right) - { - point.x -= text.sizeWithAttributes(attributes).width - } - - UIGraphicsPushContext(context) - (text as NSString).drawAtPoint(point, withAttributes: attributes) - UIGraphicsPopContext() - } - - internal class func drawMultilineText(context context: CGContext?, text: String, knownTextSize: CGSize, point: CGPoint, align: NSTextAlignment, attributes: [String : AnyObject]?, constrainedToSize: CGSize) - { - var rect = CGRect(origin: CGPoint(), size: knownTextSize) - rect.origin.x += point.x - rect.origin.y += point.y - - if (align == .Center) - { - rect.origin.x -= rect.size.width / 2.0 - } - else if (align == .Right) - { - rect.origin.x -= rect.size.width - } - - UIGraphicsPushContext(context) - (text as NSString).drawWithRect(rect, options: .UsesLineFragmentOrigin, attributes: attributes, context: nil) - UIGraphicsPopContext() - } - - internal class func drawMultilineText(context context: CGContext?, text: String, point: CGPoint, align: NSTextAlignment, attributes: [String : AnyObject]?, constrainedToSize: CGSize) - { - let rect = text.boundingRectWithSize(constrainedToSize, options: .UsesLineFragmentOrigin, attributes: attributes, context: nil) - drawMultilineText(context: context, text: text, knownTextSize: rect.size, point: point, align: align, attributes: attributes, constrainedToSize: constrainedToSize) - } - - /// - returns: an angle between 0.0 < 360.0 (not less than zero, less than 360) - internal class func normalizedAngleFromAngle(var angle: CGFloat) -> CGFloat - { - while (angle < 0.0) - { - angle += 360.0 - } - - return angle % 360.0 - } - - - /// MARK: - Bridging functions - - internal class func bridgedObjCGetUIColorArray (swift array: [UIColor?]) -> [NSObject] - { - var newArray = [NSObject]() - for val in array - { - if (val == nil) - { - newArray.append(NSNull()) - } - else - { - newArray.append(val!) - } - } - return newArray - } - - internal class func bridgedObjCGetUIColorArray (objc array: [NSObject]) -> [UIColor?] - { - var newArray = [UIColor?]() - for object in array - { - newArray.append(object as? UIColor) - } - return newArray - } - - internal class func bridgedObjCGetStringArray (swift array: [String?]) -> [NSObject] - { - var newArray = [NSObject]() - for val in array - { - if (val == nil) - { - newArray.append(NSNull()) - } - else - { - newArray.append(val!) - } - } - return newArray - } - - internal class func bridgedObjCGetStringArray (objc array: [NSObject]) -> [String?] - { - var newArray = [String?]() - for object in array - { - newArray.append(object as? String) - } - return newArray - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartViewPortHandler.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartViewPortHandler.swift deleted file mode 100755 index 7aa0d7aa..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/ChartViewPortHandler.swift +++ /dev/null @@ -1,460 +0,0 @@ -// -// ChartViewPortHandler.swift -// Charts -// -// Created by Daniel Cohen Gindi on 27/2/15. -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import Foundation -import CoreGraphics - -public class ChartViewPortHandler: NSObject -{ - /// matrix used for touch events - private var _touchMatrix = CGAffineTransformIdentity - - /// this rectangle defines the area in which graph values can be drawn - private var _contentRect = CGRect() - - private var _chartWidth = CGFloat(0.0) - private var _chartHeight = CGFloat(0.0) - - /// minimum scale value on the y-axis - private var _minScaleY = CGFloat(1.0) - - /// maximum scale value on the y-axis - private var _maxScaleY = CGFloat.max - - /// minimum scale value on the x-axis - private var _minScaleX = CGFloat(1.0) - - /// maximum scale value on the x-axis - private var _maxScaleX = CGFloat.max - - /// contains the current scale factor of the x-axis - private var _scaleX = CGFloat(1.0) - - /// contains the current scale factor of the y-axis - private var _scaleY = CGFloat(1.0) - - private var _transX = CGFloat(0.0) - private var _transY = CGFloat(0.0) - - /// offset that allows the chart to be dragged over its bounds on the x-axis - private var _transOffsetX = CGFloat(0.0) - - /// offset that allows the chart to be dragged over its bounds on the x-axis - private var _transOffsetY = CGFloat(0.0) - - public override init() - { - } - - public init(width: CGFloat, height: CGFloat) - { - super.init() - - setChartDimens(width: width, height: height) - } - - public func setChartDimens(width width: CGFloat, height: CGFloat) - { - let offsetLeft = self.offsetLeft - let offsetTop = self.offsetTop - let offsetRight = self.offsetRight - let offsetBottom = self.offsetBottom - - _chartHeight = height - _chartWidth = width - - restrainViewPort(offsetLeft: offsetLeft, offsetTop: offsetTop, offsetRight: offsetRight, offsetBottom: offsetBottom) - } - - public var hasChartDimens: Bool - { - if (_chartHeight > 0.0 && _chartWidth > 0.0) - { - return true - } - else - { - return false - } - } - - public func restrainViewPort(offsetLeft offsetLeft: CGFloat, offsetTop: CGFloat, offsetRight: CGFloat, offsetBottom: CGFloat) - { - _contentRect.origin.x = offsetLeft - _contentRect.origin.y = offsetTop - _contentRect.size.width = _chartWidth - offsetLeft - offsetRight - _contentRect.size.height = _chartHeight - offsetBottom - offsetTop - } - - public var offsetLeft: CGFloat - { - return _contentRect.origin.x - } - - public var offsetRight: CGFloat - { - return _chartWidth - _contentRect.size.width - _contentRect.origin.x - } - - public var offsetTop: CGFloat - { - return _contentRect.origin.y - } - - public var offsetBottom: CGFloat - { - return _chartHeight - _contentRect.size.height - _contentRect.origin.y - } - - public var contentTop: CGFloat - { - return _contentRect.origin.y - } - - public var contentLeft: CGFloat - { - return _contentRect.origin.x - } - - public var contentRight: CGFloat - { - return _contentRect.origin.x + _contentRect.size.width - } - - public var contentBottom: CGFloat - { - return _contentRect.origin.y + _contentRect.size.height - } - - public var contentWidth: CGFloat - { - return _contentRect.size.width - } - - public var contentHeight: CGFloat - { - return _contentRect.size.height - } - - public var contentRect: CGRect { return _contentRect; } - - public var contentCenter: CGPoint - { - return CGPoint(x: _contentRect.origin.x + _contentRect.size.width / 2.0, y: _contentRect.origin.y + _contentRect.size.height / 2.0) - } - - public var chartHeight: CGFloat { return _chartHeight; } - - public var chartWidth: CGFloat { return _chartWidth; } - - // MARK: - Scaling/Panning etc. - - /// Zooms around the specified center - public func zoom(scaleX scaleX: CGFloat, scaleY: CGFloat, x: CGFloat, y: CGFloat) -> CGAffineTransform - { - var matrix = CGAffineTransformTranslate(_touchMatrix, x, y) - matrix = CGAffineTransformScale(matrix, scaleX, scaleY) - matrix = CGAffineTransformTranslate(matrix, -x, -y) - return matrix - } - - /// Zooms in by 1.4, x and y are the coordinates (in pixels) of the zoom center. - public func zoomIn(x x: CGFloat, y: CGFloat) -> CGAffineTransform - { - return zoom(scaleX: 1.4, scaleY: 1.4, x: x, y: y) - } - - /// Zooms out by 0.7, x and y are the coordinates (in pixels) of the zoom center. - public func zoomOut(x x: CGFloat, y: CGFloat) -> CGAffineTransform - { - return zoom(scaleX: 0.7, scaleY: 0.7, x: x, y: y) - } - - /// Resets all zooming and dragging and makes the chart fit exactly it's bounds. - public func fitScreen() -> CGAffineTransform - { - _minScaleX = 1.0 - _minScaleY = 1.0 - - return CGAffineTransformIdentity - } - - /// Centers the viewport around the specified position (x-index and y-value) in the chart. - public func centerViewPort(pt pt: CGPoint, chart: ChartViewBase) - { - let translateX = pt.x - offsetLeft - let translateY = pt.y - offsetTop - - let matrix = CGAffineTransformConcat(_touchMatrix, CGAffineTransformMakeTranslation(-translateX, -translateY)) - - refresh(newMatrix: matrix, chart: chart, invalidate: true) - } - - /// call this method to refresh the graph with a given matrix - public func refresh(newMatrix newMatrix: CGAffineTransform, chart: ChartViewBase, invalidate: Bool) -> CGAffineTransform - { - _touchMatrix = newMatrix - - // make sure scale and translation are within their bounds - limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) - - chart.setNeedsDisplay() - - return _touchMatrix - } - - /// limits the maximum scale and X translation of the given matrix - private func limitTransAndScale(inout matrix matrix: CGAffineTransform, content: CGRect?) - { - // min scale-x is 1, max is the max CGFloat - _scaleX = min(max(_minScaleX, matrix.a), _maxScaleX) - - // min scale-y is 1 - _scaleY = min(max(_minScaleY, matrix.d), _maxScaleY) - - - var width: CGFloat = 0.0 - var height: CGFloat = 0.0 - - if (content != nil) - { - width = content!.width - height = content!.height - } - - let maxTransX = -width * (_scaleX - 1.0) - let newTransX = min(max(matrix.tx, maxTransX - _transOffsetX), _transOffsetX) - _transX = newTransX; - - let maxTransY = height * (_scaleY - 1.0) - let newTransY = max(min(matrix.ty, maxTransY + _transOffsetY), -_transOffsetY) - _transY = newTransY; - - matrix.tx = _transX - matrix.a = _scaleX - matrix.ty = _transY - matrix.d = _scaleY - } - - public func setMinimumScaleX(xScale: CGFloat) - { - var newValue = xScale - - if (newValue < 1.0) - { - newValue = 1.0 - } - - _minScaleX = newValue - - limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) - } - - public func setMaximumScaleX(xScale: CGFloat) - { - _maxScaleX = xScale - - limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) - } - - public func setMinMaxScaleX(minScaleX minScaleX: CGFloat, maxScaleX: CGFloat) - { - var newMin = minScaleX - - if (newMin < 1.0) - { - newMin = 1.0 - } - - _minScaleX = newMin - _maxScaleX = maxScaleX - - limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) - } - - - public func setMaximumScaleY(yScale: CGFloat) - { - _maxScaleY = yScale; - - limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) - } - - public func setMinimumScaleY(yScale: CGFloat) - { - var newValue = yScale - - if (newValue < 1.0) - { - newValue = 1.0 - } - - _minScaleY = newValue - - limitTransAndScale(matrix: &_touchMatrix, content: _contentRect) - } - - public var touchMatrix: CGAffineTransform - { - return _touchMatrix - } - - // MARK: - Boundaries Check - - public func isInBoundsX(x: CGFloat) -> Bool - { - if (isInBoundsLeft(x) && isInBoundsRight(x)) - { - return true - } - else - { - return false - } - } - - public func isInBoundsY(y: CGFloat) -> Bool - { - if (isInBoundsTop(y) && isInBoundsBottom(y)) - { - return true - } - else - { - return false - } - } - - public func isInBounds(x x: CGFloat, y: CGFloat) -> Bool - { - if (isInBoundsX(x) && isInBoundsY(y)) - { - return true - } - else - { - return false - } - } - - public func isInBoundsLeft(x: CGFloat) -> Bool - { - return _contentRect.origin.x <= x ? true : false - } - - public func isInBoundsRight(x: CGFloat) -> Bool - { - let normalizedX = CGFloat(Int(x * 100.0)) / 100.0 - return (_contentRect.origin.x + _contentRect.size.width) >= normalizedX ? true : false - } - - public func isInBoundsTop(y: CGFloat) -> Bool - { - return _contentRect.origin.y <= y ? true : false - } - - public func isInBoundsBottom(y: CGFloat) -> Bool - { - let normalizedY = CGFloat(Int(y * 100.0)) / 100.0 - return (_contentRect.origin.y + _contentRect.size.height) >= normalizedY ? true : false - } - - /// - returns: the current x-scale factor - public var scaleX: CGFloat - { - return _scaleX - } - - /// - returns: the current y-scale factor - public var scaleY: CGFloat - { - return _scaleY - } - - public var transX: CGFloat - { - return _transX - } - - public var transY: CGFloat - { - return _transY - } - - /// if the chart is fully zoomed out, return true - public var isFullyZoomedOut: Bool - { - if (isFullyZoomedOutX && isFullyZoomedOutY) - { - return true - } - else - { - return false - } - } - - /// - returns: true if the chart is fully zoomed out on it's y-axis (vertical). - public var isFullyZoomedOutY: Bool - { - if (_scaleY > _minScaleY || _minScaleY > 1.0) - { - return false - } - else - { - return true - } - } - - /// - returns: true if the chart is fully zoomed out on it's x-axis (horizontal). - public var isFullyZoomedOutX: Bool - { - if (_scaleX > _minScaleX || _minScaleX > 1.0) - { - return false - } - else - { - return true - } - } - - /// Set an offset in pixels that allows the user to drag the chart over it's bounds on the x-axis. - public func setDragOffsetX(offset: CGFloat) - { - _transOffsetX = offset - } - - /// Set an offset in pixels that allows the user to drag the chart over it's bounds on the y-axis. - public func setDragOffsetY(offset: CGFloat) - { - _transOffsetY = offset - } - - /// - returns: true if both drag offsets (x and y) are zero or smaller. - public var hasNoDragOffset: Bool - { - return _transOffsetX <= 0.0 && _transOffsetY <= 0.0 ? true : false - } - - public var canZoomOutMoreX: Bool - { - return (_scaleX > _minScaleX) - } - - public var canZoomInMoreX: Bool - { - return (_scaleX < _maxScaleX) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Charts/Charts/Classes/Utils/UIGraphics+Extensions.swift b/Carthage/Checkouts/Charts/Charts/Classes/Utils/UIGraphics+Extensions.swift deleted file mode 100644 index 0a3c699a..00000000 --- a/Carthage/Checkouts/Charts/Charts/Classes/Utils/UIGraphics+Extensions.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// UIGraphics+Extensions.swift -// Charts -// -// UIGraphics+Extensions implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -import UIKit - -public func UIGraphicsPushContext(context: CGContext?) { - - guard let context = context else { - return - } - - UIGraphicsPushContext(context) -} diff --git a/Carthage/Checkouts/Charts/Charts/Supporting Files/Charts.h b/Carthage/Checkouts/Charts/Charts/Supporting Files/Charts.h deleted file mode 100755 index eb089f68..00000000 --- a/Carthage/Checkouts/Charts/Charts/Supporting Files/Charts.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// Charts.h -// Charts -// -// Created by Daniel Cohen Gindi on 23/2/15. - -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/ios-charts -// - -#import - -//! Project version number for Charts. -FOUNDATION_EXPORT double ChartsVersionNumber; - -//! Project version string for Charts. -FOUNDATION_EXPORT const unsigned char ChartsVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - - diff --git a/Carthage/Checkouts/Charts/Charts/Supporting Files/Info.plist b/Carthage/Checkouts/Charts/Charts/Supporting Files/Info.plist deleted file mode 100644 index aab58c9e..00000000 --- a/Carthage/Checkouts/Charts/Charts/Supporting Files/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.1.4 - CFBundleSignature - ???? - CFBundleVersion - 14 - NSPrincipalClass - - - diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj/project.pbxproj b/Carthage/Checkouts/Charts/ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj/project.pbxproj deleted file mode 100644 index bf95f7b8..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/ChartsDemo-iOS.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1119 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0439A3541C9FF95F00496F83 /* PiePolylineChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0439A3521C9FF95F00496F83 /* PiePolylineChartViewController.m */; }; - 0471CBFC1CA1090A00E52DBC /* PiePolylineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0471CBFB1CA1090A00E52DBC /* PiePolylineChartViewController.xib */; }; - 0630AE511D81271B008859B0 /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0630AE411D8126C0008859B0 /* Charts.framework */; }; - 0630AE521D81271B008859B0 /* Charts.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0630AE411D8126C0008859B0 /* Charts.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 068A9B191FBBF351003CF1AD /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5B8EAF2F1AB32E15009697AA /* Images.xcassets */; }; - 068A9B1A1FBBF355003CF1AD /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B64D06EA1FB199130067418D /* Launch Screen.storyboard */; }; - 068A9B1B1FBBF366003CF1AD /* radar_marker@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5B613DA31D526AD5000F1E98 /* radar_marker@3x.png */; }; - 225B36201F6EB9A50005B3D5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B361F1F6EB9A50005B3D5 /* AppDelegate.swift */; }; - 225B36311F6EB9EE0005B3D5 /* DemoBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B362F1F6EB9EE0005B3D5 /* DemoBaseViewController.swift */; }; - 225B36321F6EB9EE0005B3D5 /* DemoListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36301F6EB9EE0005B3D5 /* DemoListViewController.swift */; }; - 225B36381F6EBA040005B3D5 /* IntAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36341F6EB9FE0005B3D5 /* IntAxisValueFormatter.swift */; }; - 225B36391F6EBA040005B3D5 /* DayAxisValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36351F6EB9FE0005B3D5 /* DayAxisValueFormatter.swift */; }; - 225B363A1F6EBA040005B3D5 /* DateValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36361F6EB9FE0005B3D5 /* DateValueFormatter.swift */; }; - 225B363B1F6EBA040005B3D5 /* LargeValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36371F6EB9FE0005B3D5 /* LargeValueFormatter.swift */; }; - 225B36401F6EBA1D0005B3D5 /* XYMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B363D1F6EBA180005B3D5 /* XYMarkerView.swift */; }; - 225B36411F6EBA1D0005B3D5 /* BalloonMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B363E1F6EBA180005B3D5 /* BalloonMarker.swift */; }; - 225B36421F6EBA1D0005B3D5 /* RadarMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B363F1F6EBA180005B3D5 /* RadarMarkerView.swift */; }; - 225B365B1F6EBA470005B3D5 /* MultipleLinesChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36441F6EBA410005B3D5 /* MultipleLinesChartViewController.swift */; }; - 225B365C1F6EBA470005B3D5 /* MultipleBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36451F6EBA410005B3D5 /* MultipleBarChartViewController.swift */; }; - 225B365D1F6EBA470005B3D5 /* HalfPieChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36461F6EBA410005B3D5 /* HalfPieChartViewController.swift */; }; - 225B365E1F6EBA470005B3D5 /* LineChartTimeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36471F6EBA410005B3D5 /* LineChartTimeViewController.swift */; }; - 225B365F1F6EBA470005B3D5 /* ColoredLineChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36481F6EBA410005B3D5 /* ColoredLineChartViewController.swift */; }; - 225B36601F6EBA470005B3D5 /* LineChart2ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36491F6EBA410005B3D5 /* LineChart2ViewController.swift */; }; - 225B36611F6EBA470005B3D5 /* LineChart1ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B364A1F6EBA410005B3D5 /* LineChart1ViewController.swift */; }; - 225B36621F6EBA470005B3D5 /* NegativeStackedBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B364B1F6EBA410005B3D5 /* NegativeStackedBarChartViewController.swift */; }; - 225B36631F6EBA470005B3D5 /* ScatterChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B364C1F6EBA410005B3D5 /* ScatterChartViewController.swift */; }; - 225B36641F6EBA470005B3D5 /* StackedBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B364D1F6EBA410005B3D5 /* StackedBarChartViewController.swift */; }; - 225B36651F6EBA470005B3D5 /* BubbleChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B364E1F6EBA410005B3D5 /* BubbleChartViewController.swift */; }; - 225B36661F6EBA470005B3D5 /* LineChartFilledViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B364F1F6EBA410005B3D5 /* LineChartFilledViewController.swift */; }; - 225B36671F6EBA470005B3D5 /* PositiveNegativeBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36501F6EBA410005B3D5 /* PositiveNegativeBarChartViewController.swift */; }; - 225B36681F6EBA470005B3D5 /* AnotherBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36511F6EBA410005B3D5 /* AnotherBarChartViewController.swift */; }; - 225B36691F6EBA470005B3D5 /* PieChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36521F6EBA410005B3D5 /* PieChartViewController.swift */; }; - 225B366A1F6EBA470005B3D5 /* CubicLineChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36531F6EBA410005B3D5 /* CubicLineChartViewController.swift */; }; - 225B366B1F6EBA470005B3D5 /* RadarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36541F6EBA410005B3D5 /* RadarChartViewController.swift */; }; - 225B366C1F6EBA470005B3D5 /* HorizontalBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36551F6EBA410005B3D5 /* HorizontalBarChartViewController.swift */; }; - 225B366D1F6EBA470005B3D5 /* PiePolylineChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36561F6EBA410005B3D5 /* PiePolylineChartViewController.swift */; }; - 225B366E1F6EBA470005B3D5 /* CombinedChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36571F6EBA410005B3D5 /* CombinedChartViewController.swift */; }; - 225B366F1F6EBA470005B3D5 /* BarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36581F6EBA410005B3D5 /* BarChartViewController.swift */; }; - 225B36701F6EBA470005B3D5 /* SinusBarChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B36591F6EBA410005B3D5 /* SinusBarChartViewController.swift */; }; - 225B36711F6EBA470005B3D5 /* CandleStickChartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225B365A1F6EBA410005B3D5 /* CandleStickChartViewController.swift */; }; - 225B36721F6EBA5E0005B3D5 /* DemoListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B8EAF231AB3271B009697AA /* DemoListViewController.xib */; }; - 225B36731F6EBA5E0005B3D5 /* RadarMarkerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B613DB41D526EA8000F1E98 /* RadarMarkerView.xib */; }; - 225B36741F6EBA640005B3D5 /* AnotherBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED111ABBFB2B0013F194 /* AnotherBarChartViewController.xib */; }; - 225B36751F6EBA640005B3D5 /* BarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD47E641ABB424E008FCEC6 /* BarChartViewController.xib */; }; - 225B36761F6EBA640005B3D5 /* BubbleChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55E3564D1ADC638F00A57971 /* BubbleChartViewController.xib */; }; - 225B36771F6EBA640005B3D5 /* CandleStickChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED2B1ABC160F0013F194 /* CandleStickChartViewController.xib */; }; - 225B36781F6EBA640005B3D5 /* ColoredLineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED3A1ABC199F0013F194 /* ColoredLineChartViewController.xib */; }; - 225B36791F6EBA640005B3D5 /* CombinedChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BDEDC461ABB871E007D3A60 /* CombinedChartViewController.xib */; }; - 225B367A1F6EBA640005B3D5 /* CubicLineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED301ABC18F00013F194 /* CubicLineChartViewController.xib */; }; - 225B367B1F6EBA640005B3D5 /* HalfPieChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE6737F1D5B496500A87BA2 /* HalfPieChartViewController.xib */; }; - 225B367C1F6EBA640005B3D5 /* HorizontalBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BDEDC401ABB7F73007D3A60 /* HorizontalBarChartViewController.xib */; }; - 225B367D1F6EBA640005B3D5 /* LineChart1ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD8F0731AB89CE500566E05 /* LineChart1ViewController.xib */; }; - 225B367E1F6EBA640005B3D5 /* LineChart2ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD47E5F1ABB3C91008FCEC6 /* LineChart2ViewController.xib */; }; - 225B367F1F6EBA640005B3D5 /* LineChartFilledViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE6738E1D5B4E0900A87BA2 /* LineChartFilledViewController.xib */; }; - 225B36801F6EBA640005B3D5 /* LineChartTimeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE673911D5B4E0900A87BA2 /* LineChartTimeViewController.xib */; }; - 225B36811F6EBA640005B3D5 /* MultipleBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED211ABC0BE20013F194 /* MultipleBarChartViewController.xib */; }; - 225B36821F6EBA640005B3D5 /* MultipleLinesChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED241ABC0BE20013F194 /* MultipleLinesChartViewController.xib */; }; - 225B36831F6EBA640005B3D5 /* NegativeStackedBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B9624401B38608C007763E2 /* NegativeStackedBarChartViewController.xib */; }; - 225B36841F6EBA640005B3D5 /* PieChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B0CC7841ABB875400665592 /* PieChartViewController.xib */; }; - 225B36851F6EBA640005B3D5 /* PiePolylineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0471CBFB1CA1090A00E52DBC /* PiePolylineChartViewController.xib */; }; - 225B36861F6EBA640005B3D5 /* PositiveNegativeBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE7E7611C693098000A0377 /* PositiveNegativeBarChartViewController.xib */; }; - 225B36871F6EBA640005B3D5 /* RadarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED351ABC192F0013F194 /* RadarChartViewController.xib */; }; - 225B36881F6EBA640005B3D5 /* RealmDemosViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B1B5DA91E911A15006D1375 /* RealmDemosViewController.xib */; }; - 225B36891F6EBA640005B3D5 /* ScatterChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED171ABBFB340013F194 /* ScatterChartViewController.xib */; }; - 225B368A1F6EBA640005B3D5 /* SinusBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED3F1ABC1AC60013F194 /* SinusBarChartViewController.xib */; }; - 225B368B1F6EBA640005B3D5 /* StackedBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED1A1ABBFB340013F194 /* StackedBarChartViewController.xib */; }; - 225B368C1F6EBBB00005B3D5 /* Charts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0630AE411D8126C0008859B0 /* Charts.framework */; }; - 225B368D1F6EBBB00005B3D5 /* Charts.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0630AE411D8126C0008859B0 /* Charts.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 55E356501ADC638F00A57971 /* BubbleChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55E3564D1ADC638F00A57971 /* BubbleChartViewController.xib */; }; - 55E356511ADC638F00A57971 /* BubbleChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 55E3564F1ADC638F00A57971 /* BubbleChartViewController.m */; }; - 5B0CC7851ABB875400665592 /* PieChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B0CC7831ABB875400665592 /* PieChartViewController.m */; }; - 5B0CC7861ABB875400665592 /* PieChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B0CC7841ABB875400665592 /* PieChartViewController.xib */; }; - 5B1B5DAB1E911A15006D1375 /* RealmDemosViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B1B5DA91E911A15006D1375 /* RealmDemosViewController.xib */; }; - 5B57BBB51A9B26AA0036A6CC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B57BBB41A9B26AA0036A6CC /* main.m */; }; - 5B57BBB81A9B26AA0036A6CC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B57BBB71A9B26AA0036A6CC /* AppDelegate.m */; }; - 5B57BBBB1A9B26AA0036A6CC /* DemoListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B57BBBA1A9B26AA0036A6CC /* DemoListViewController.m */; }; - 5B613DA41D526AD5000F1E98 /* radar_marker@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5B613DA31D526AD5000F1E98 /* radar_marker@3x.png */; }; - 5B613DB31D526DED000F1E98 /* RadarMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B613DB21D526DED000F1E98 /* RadarMarkerView.swift */; }; - 5B613DB51D526EA8000F1E98 /* RadarMarkerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B613DB41D526EA8000F1E98 /* RadarMarkerView.xib */; }; - 5B613DF01D5A50B6000F1E98 /* XYMarkerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B613DEF1D5A50B6000F1E98 /* XYMarkerView.swift */; }; - 5B613DF21D5A60DF000F1E98 /* LargeValueFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B613DF11D5A60DF000F1E98 /* LargeValueFormatter.swift */; }; - 5B8EAF241AB3271B009697AA /* DemoListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B8EAF231AB3271B009697AA /* DemoListViewController.xib */; }; - 5B8EAF281AB32CF5009697AA /* DemoBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B8EAF261AB32CF5009697AA /* DemoBaseViewController.m */; }; - 5B8EAF301AB32E15009697AA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5B8EAF2F1AB32E15009697AA /* Images.xcassets */; }; - 5B9624411B38608C007763E2 /* NegativeStackedBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B96243F1B38608C007763E2 /* NegativeStackedBarChartViewController.m */; }; - 5B9624421B38608C007763E2 /* NegativeStackedBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B9624401B38608C007763E2 /* NegativeStackedBarChartViewController.xib */; }; - 5BD47E5B1ABB0263008FCEC6 /* BalloonMarker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */; }; - 5BD47E601ABB3C91008FCEC6 /* LineChart2ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E5E1ABB3C91008FCEC6 /* LineChart2ViewController.m */; }; - 5BD47E611ABB3C91008FCEC6 /* LineChart2ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD47E5F1ABB3C91008FCEC6 /* LineChart2ViewController.xib */; }; - 5BD47E651ABB424E008FCEC6 /* BarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BD47E631ABB424E008FCEC6 /* BarChartViewController.m */; }; - 5BD47E661ABB424E008FCEC6 /* BarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD47E641ABB424E008FCEC6 /* BarChartViewController.xib */; }; - 5BD8F0741AB89CE500566E05 /* LineChart1ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BD8F0721AB89CE500566E05 /* LineChart1ViewController.m */; }; - 5BD8F0751AB89CE500566E05 /* LineChart1ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BD8F0731AB89CE500566E05 /* LineChart1ViewController.xib */; }; - 5BDEDC411ABB7F73007D3A60 /* HorizontalBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BDEDC3F1ABB7F73007D3A60 /* HorizontalBarChartViewController.m */; }; - 5BDEDC421ABB7F73007D3A60 /* HorizontalBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BDEDC401ABB7F73007D3A60 /* HorizontalBarChartViewController.xib */; }; - 5BDEDC471ABB871E007D3A60 /* CombinedChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BDEDC451ABB871E007D3A60 /* CombinedChartViewController.m */; }; - 5BDEDC481ABB871E007D3A60 /* CombinedChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BDEDC461ABB871E007D3A60 /* CombinedChartViewController.xib */; }; - 5BE377DE1D425151006EB34F /* DayAxisValueFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE377DD1D425151006EB34F /* DayAxisValueFormatter.m */; }; - 5BE377F21D47FDF1006EB34F /* IntAxisValueFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE377F11D47FDF1006EB34F /* IntAxisValueFormatter.m */; }; - 5BE673801D5B496500A87BA2 /* HalfPieChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE6737E1D5B496500A87BA2 /* HalfPieChartViewController.m */; }; - 5BE673811D5B496500A87BA2 /* HalfPieChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE6737F1D5B496500A87BA2 /* HalfPieChartViewController.xib */; }; - 5BE673921D5B4E0900A87BA2 /* LineChartFilledViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE6738D1D5B4E0900A87BA2 /* LineChartFilledViewController.m */; }; - 5BE673931D5B4E0900A87BA2 /* LineChartFilledViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE6738E1D5B4E0900A87BA2 /* LineChartFilledViewController.xib */; }; - 5BE673941D5B4E0900A87BA2 /* LineChartTimeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE673901D5B4E0900A87BA2 /* LineChartTimeViewController.m */; }; - 5BE673951D5B4E0900A87BA2 /* LineChartTimeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE673911D5B4E0900A87BA2 /* LineChartTimeViewController.xib */; }; - 5BE6739A1D5BAD7E00A87BA2 /* DateValueFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE673991D5BAD7E00A87BA2 /* DateValueFormatter.m */; }; - 5BE7E7621C693098000A0377 /* PositiveNegativeBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE7E7601C693098000A0377 /* PositiveNegativeBarChartViewController.m */; }; - 5BE7E7631C693098000A0377 /* PositiveNegativeBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BE7E7611C693098000A0377 /* PositiveNegativeBarChartViewController.xib */; }; - 5BEAED121ABBFB2B0013F194 /* AnotherBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED101ABBFB2B0013F194 /* AnotherBarChartViewController.m */; }; - 5BEAED131ABBFB2B0013F194 /* AnotherBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED111ABBFB2B0013F194 /* AnotherBarChartViewController.xib */; }; - 5BEAED1B1ABBFB340013F194 /* ScatterChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED161ABBFB340013F194 /* ScatterChartViewController.m */; }; - 5BEAED1C1ABBFB340013F194 /* ScatterChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED171ABBFB340013F194 /* ScatterChartViewController.xib */; }; - 5BEAED1D1ABBFB340013F194 /* StackedBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED191ABBFB340013F194 /* StackedBarChartViewController.m */; }; - 5BEAED1E1ABBFB340013F194 /* StackedBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED1A1ABBFB340013F194 /* StackedBarChartViewController.xib */; }; - 5BEAED251ABC0BE20013F194 /* MultipleBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED201ABC0BE20013F194 /* MultipleBarChartViewController.m */; }; - 5BEAED261ABC0BE20013F194 /* MultipleBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED211ABC0BE20013F194 /* MultipleBarChartViewController.xib */; }; - 5BEAED271ABC0BE20013F194 /* MultipleLinesChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED231ABC0BE20013F194 /* MultipleLinesChartViewController.m */; }; - 5BEAED281ABC0BE20013F194 /* MultipleLinesChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED241ABC0BE20013F194 /* MultipleLinesChartViewController.xib */; }; - 5BEAED2C1ABC160F0013F194 /* CandleStickChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED2A1ABC160F0013F194 /* CandleStickChartViewController.m */; }; - 5BEAED2D1ABC160F0013F194 /* CandleStickChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED2B1ABC160F0013F194 /* CandleStickChartViewController.xib */; }; - 5BEAED311ABC18F00013F194 /* CubicLineChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED2F1ABC18F00013F194 /* CubicLineChartViewController.m */; }; - 5BEAED321ABC18F00013F194 /* CubicLineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED301ABC18F00013F194 /* CubicLineChartViewController.xib */; }; - 5BEAED361ABC192F0013F194 /* RadarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED341ABC192F0013F194 /* RadarChartViewController.m */; }; - 5BEAED371ABC192F0013F194 /* RadarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED351ABC192F0013F194 /* RadarChartViewController.xib */; }; - 5BEAED3B1ABC199F0013F194 /* ColoredLineChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED391ABC199F0013F194 /* ColoredLineChartViewController.m */; }; - 5BEAED3C1ABC199F0013F194 /* ColoredLineChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED3A1ABC199F0013F194 /* ColoredLineChartViewController.xib */; }; - 5BEAED401ABC1AC60013F194 /* SinusBarChartViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BEAED3E1ABC1AC60013F194 /* SinusBarChartViewController.m */; }; - 5BEAED411ABC1AC60013F194 /* SinusBarChartViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5BEAED3F1ABC1AC60013F194 /* SinusBarChartViewController.xib */; }; - B64D06EB1FB199130067418D /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B64D06EA1FB199130067418D /* Launch Screen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 0630AE401D8126C0008859B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0630AE391D8126C0008859B0 /* Charts.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 06165F241D8110E600722320; - remoteInfo = Charts; - }; - 0630AE421D8126C0008859B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0630AE391D8126C0008859B0 /* Charts.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 06165F2E1D8110E600722320; - remoteInfo = ChartsTests; - }; - 0630AE531D81271B008859B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0630AE391D8126C0008859B0 /* Charts.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = A58A4ED274A941CA248EA921; - remoteInfo = Charts; - }; - 225B368E1F6EBBB00005B3D5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0630AE391D8126C0008859B0 /* Charts.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = A58A4ED274A941CA248EA921; - remoteInfo = Charts; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 225B36901F6EBBB10005B3D5 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 225B368D1F6EBBB00005B3D5 /* Charts.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; - 5BB4B0751ACA710D00E2EF4D /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 0630AE521D81271B008859B0 /* Charts.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 0439A3511C9FF95F00496F83 /* PiePolylineChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiePolylineChartViewController.h; sourceTree = ""; }; - 0439A3521C9FF95F00496F83 /* PiePolylineChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PiePolylineChartViewController.m; sourceTree = ""; }; - 0471CBFB1CA1090A00E52DBC /* PiePolylineChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PiePolylineChartViewController.xib; sourceTree = ""; }; - 0630AE391D8126C0008859B0 /* Charts.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Charts.xcodeproj; path = ../Charts.xcodeproj; sourceTree = ""; }; - 225B361D1F6EB9A50005B3D5 /* ChartsDemo-iOS-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ChartsDemo-iOS-Swift.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 225B361F1F6EB9A50005B3D5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 225B362F1F6EB9EE0005B3D5 /* DemoBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoBaseViewController.swift; sourceTree = ""; }; - 225B36301F6EB9EE0005B3D5 /* DemoListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DemoListViewController.swift; sourceTree = ""; }; - 225B36341F6EB9FE0005B3D5 /* IntAxisValueFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntAxisValueFormatter.swift; sourceTree = ""; }; - 225B36351F6EB9FE0005B3D5 /* DayAxisValueFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DayAxisValueFormatter.swift; sourceTree = ""; }; - 225B36361F6EB9FE0005B3D5 /* DateValueFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateValueFormatter.swift; sourceTree = ""; }; - 225B36371F6EB9FE0005B3D5 /* LargeValueFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LargeValueFormatter.swift; sourceTree = ""; }; - 225B363D1F6EBA180005B3D5 /* XYMarkerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XYMarkerView.swift; sourceTree = ""; }; - 225B363E1F6EBA180005B3D5 /* BalloonMarker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalloonMarker.swift; sourceTree = ""; }; - 225B363F1F6EBA180005B3D5 /* RadarMarkerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarMarkerView.swift; sourceTree = ""; }; - 225B36441F6EBA410005B3D5 /* MultipleLinesChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleLinesChartViewController.swift; sourceTree = ""; }; - 225B36451F6EBA410005B3D5 /* MultipleBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleBarChartViewController.swift; sourceTree = ""; }; - 225B36461F6EBA410005B3D5 /* HalfPieChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HalfPieChartViewController.swift; sourceTree = ""; }; - 225B36471F6EBA410005B3D5 /* LineChartTimeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChartTimeViewController.swift; sourceTree = ""; }; - 225B36481F6EBA410005B3D5 /* ColoredLineChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColoredLineChartViewController.swift; sourceTree = ""; }; - 225B36491F6EBA410005B3D5 /* LineChart2ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChart2ViewController.swift; sourceTree = ""; }; - 225B364A1F6EBA410005B3D5 /* LineChart1ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChart1ViewController.swift; sourceTree = ""; }; - 225B364B1F6EBA410005B3D5 /* NegativeStackedBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NegativeStackedBarChartViewController.swift; sourceTree = ""; }; - 225B364C1F6EBA410005B3D5 /* ScatterChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScatterChartViewController.swift; sourceTree = ""; }; - 225B364D1F6EBA410005B3D5 /* StackedBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackedBarChartViewController.swift; sourceTree = ""; }; - 225B364E1F6EBA410005B3D5 /* BubbleChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BubbleChartViewController.swift; sourceTree = ""; }; - 225B364F1F6EBA410005B3D5 /* LineChartFilledViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChartFilledViewController.swift; sourceTree = ""; }; - 225B36501F6EBA410005B3D5 /* PositiveNegativeBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PositiveNegativeBarChartViewController.swift; sourceTree = ""; }; - 225B36511F6EBA410005B3D5 /* AnotherBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnotherBarChartViewController.swift; sourceTree = ""; }; - 225B36521F6EBA410005B3D5 /* PieChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PieChartViewController.swift; sourceTree = ""; }; - 225B36531F6EBA410005B3D5 /* CubicLineChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CubicLineChartViewController.swift; sourceTree = ""; }; - 225B36541F6EBA410005B3D5 /* RadarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadarChartViewController.swift; sourceTree = ""; }; - 225B36551F6EBA410005B3D5 /* HorizontalBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HorizontalBarChartViewController.swift; sourceTree = ""; }; - 225B36561F6EBA410005B3D5 /* PiePolylineChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PiePolylineChartViewController.swift; sourceTree = ""; }; - 225B36571F6EBA410005B3D5 /* CombinedChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombinedChartViewController.swift; sourceTree = ""; }; - 225B36581F6EBA410005B3D5 /* BarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BarChartViewController.swift; sourceTree = ""; }; - 225B36591F6EBA410005B3D5 /* SinusBarChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SinusBarChartViewController.swift; sourceTree = ""; }; - 225B365A1F6EBA410005B3D5 /* CandleStickChartViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CandleStickChartViewController.swift; sourceTree = ""; }; - 55E3564D1ADC638F00A57971 /* BubbleChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BubbleChartViewController.xib; sourceTree = ""; }; - 55E3564E1ADC638F00A57971 /* BubbleChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BubbleChartViewController.h; sourceTree = ""; }; - 55E3564F1ADC638F00A57971 /* BubbleChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BubbleChartViewController.m; sourceTree = ""; }; - 5B0CC7821ABB875400665592 /* PieChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PieChartViewController.h; sourceTree = ""; }; - 5B0CC7831ABB875400665592 /* PieChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PieChartViewController.m; sourceTree = ""; }; - 5B0CC7841ABB875400665592 /* PieChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PieChartViewController.xib; sourceTree = ""; }; - 5B1B5DA91E911A15006D1375 /* RealmDemosViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = RealmDemosViewController.xib; path = XIBs/Demos/RealmDemosViewController.xib; sourceTree = SOURCE_ROOT; }; - 5B57BBAF1A9B26AA0036A6CC /* ChartsDemo-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ChartsDemo-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 5B57BBB31A9B26AA0036A6CC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5B57BBB41A9B26AA0036A6CC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5B57BBB61A9B26AA0036A6CC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5B57BBB71A9B26AA0036A6CC /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5B57BBB91A9B26AA0036A6CC /* DemoListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DemoListViewController.h; sourceTree = ""; }; - 5B57BBBA1A9B26AA0036A6CC /* DemoListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DemoListViewController.m; sourceTree = ""; }; - 5B613DA31D526AD5000F1E98 /* radar_marker@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "radar_marker@3x.png"; sourceTree = ""; }; - 5B613DB21D526DED000F1E98 /* RadarMarkerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadarMarkerView.swift; sourceTree = ""; }; - 5B613DB41D526EA8000F1E98 /* RadarMarkerView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RadarMarkerView.xib; sourceTree = ""; }; - 5B613DEF1D5A50B6000F1E98 /* XYMarkerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XYMarkerView.swift; sourceTree = ""; }; - 5B613DF11D5A60DF000F1E98 /* LargeValueFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LargeValueFormatter.swift; sourceTree = ""; }; - 5B8EAF231AB3271B009697AA /* DemoListViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DemoListViewController.xib; sourceTree = ""; }; - 5B8EAF251AB32CF5009697AA /* DemoBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoBaseViewController.h; sourceTree = ""; }; - 5B8EAF261AB32CF5009697AA /* DemoBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoBaseViewController.m; sourceTree = ""; }; - 5B8EAF2F1AB32E15009697AA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 5B96243E1B38608C007763E2 /* NegativeStackedBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NegativeStackedBarChartViewController.h; sourceTree = ""; }; - 5B96243F1B38608C007763E2 /* NegativeStackedBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NegativeStackedBarChartViewController.m; sourceTree = ""; }; - 5B9624401B38608C007763E2 /* NegativeStackedBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NegativeStackedBarChartViewController.xib; sourceTree = ""; }; - 5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalloonMarker.swift; sourceTree = ""; }; - 5BD47E5C1ABB0273008FCEC6 /* ChartsDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ChartsDemo-Bridging-Header.h"; sourceTree = ""; }; - 5BD47E5D1ABB3C91008FCEC6 /* LineChart2ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChart2ViewController.h; sourceTree = ""; }; - 5BD47E5E1ABB3C91008FCEC6 /* LineChart2ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LineChart2ViewController.m; sourceTree = ""; }; - 5BD47E5F1ABB3C91008FCEC6 /* LineChart2ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LineChart2ViewController.xib; sourceTree = ""; }; - 5BD47E621ABB424E008FCEC6 /* BarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BarChartViewController.h; sourceTree = ""; }; - 5BD47E631ABB424E008FCEC6 /* BarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BarChartViewController.m; sourceTree = ""; }; - 5BD47E641ABB424E008FCEC6 /* BarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BarChartViewController.xib; sourceTree = ""; }; - 5BD8F0711AB89CE500566E05 /* LineChart1ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChart1ViewController.h; sourceTree = ""; }; - 5BD8F0721AB89CE500566E05 /* LineChart1ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LineChart1ViewController.m; sourceTree = ""; }; - 5BD8F0731AB89CE500566E05 /* LineChart1ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LineChart1ViewController.xib; sourceTree = ""; }; - 5BDEDC3E1ABB7F73007D3A60 /* HorizontalBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HorizontalBarChartViewController.h; sourceTree = ""; }; - 5BDEDC3F1ABB7F73007D3A60 /* HorizontalBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HorizontalBarChartViewController.m; sourceTree = ""; }; - 5BDEDC401ABB7F73007D3A60 /* HorizontalBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HorizontalBarChartViewController.xib; sourceTree = ""; }; - 5BDEDC441ABB871E007D3A60 /* CombinedChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CombinedChartViewController.h; sourceTree = ""; }; - 5BDEDC451ABB871E007D3A60 /* CombinedChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CombinedChartViewController.m; sourceTree = ""; }; - 5BDEDC461ABB871E007D3A60 /* CombinedChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CombinedChartViewController.xib; sourceTree = ""; }; - 5BE377DC1D425151006EB34F /* DayAxisValueFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DayAxisValueFormatter.h; sourceTree = ""; }; - 5BE377DD1D425151006EB34F /* DayAxisValueFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DayAxisValueFormatter.m; sourceTree = ""; }; - 5BE377F01D47FDF1006EB34F /* IntAxisValueFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntAxisValueFormatter.h; sourceTree = ""; }; - 5BE377F11D47FDF1006EB34F /* IntAxisValueFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IntAxisValueFormatter.m; sourceTree = ""; }; - 5BE6737D1D5B496500A87BA2 /* HalfPieChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HalfPieChartViewController.h; sourceTree = ""; }; - 5BE6737E1D5B496500A87BA2 /* HalfPieChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HalfPieChartViewController.m; sourceTree = ""; }; - 5BE6737F1D5B496500A87BA2 /* HalfPieChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HalfPieChartViewController.xib; sourceTree = ""; }; - 5BE6738C1D5B4E0900A87BA2 /* LineChartFilledViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChartFilledViewController.h; sourceTree = ""; }; - 5BE6738D1D5B4E0900A87BA2 /* LineChartFilledViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LineChartFilledViewController.m; sourceTree = ""; }; - 5BE6738E1D5B4E0900A87BA2 /* LineChartFilledViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LineChartFilledViewController.xib; sourceTree = ""; }; - 5BE6738F1D5B4E0900A87BA2 /* LineChartTimeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineChartTimeViewController.h; sourceTree = ""; }; - 5BE673901D5B4E0900A87BA2 /* LineChartTimeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LineChartTimeViewController.m; sourceTree = ""; }; - 5BE673911D5B4E0900A87BA2 /* LineChartTimeViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LineChartTimeViewController.xib; sourceTree = ""; }; - 5BE673981D5BAD7E00A87BA2 /* DateValueFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DateValueFormatter.h; sourceTree = ""; }; - 5BE673991D5BAD7E00A87BA2 /* DateValueFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DateValueFormatter.m; sourceTree = ""; }; - 5BE7E75F1C693098000A0377 /* PositiveNegativeBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PositiveNegativeBarChartViewController.h; sourceTree = ""; }; - 5BE7E7601C693098000A0377 /* PositiveNegativeBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PositiveNegativeBarChartViewController.m; sourceTree = ""; }; - 5BE7E7611C693098000A0377 /* PositiveNegativeBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PositiveNegativeBarChartViewController.xib; sourceTree = ""; }; - 5BEAED0F1ABBFB2B0013F194 /* AnotherBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnotherBarChartViewController.h; sourceTree = ""; }; - 5BEAED101ABBFB2B0013F194 /* AnotherBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnotherBarChartViewController.m; sourceTree = ""; }; - 5BEAED111ABBFB2B0013F194 /* AnotherBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AnotherBarChartViewController.xib; sourceTree = ""; }; - 5BEAED151ABBFB340013F194 /* ScatterChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScatterChartViewController.h; sourceTree = ""; }; - 5BEAED161ABBFB340013F194 /* ScatterChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScatterChartViewController.m; sourceTree = ""; }; - 5BEAED171ABBFB340013F194 /* ScatterChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ScatterChartViewController.xib; sourceTree = ""; }; - 5BEAED181ABBFB340013F194 /* StackedBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StackedBarChartViewController.h; sourceTree = ""; }; - 5BEAED191ABBFB340013F194 /* StackedBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StackedBarChartViewController.m; sourceTree = ""; }; - 5BEAED1A1ABBFB340013F194 /* StackedBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StackedBarChartViewController.xib; sourceTree = ""; }; - 5BEAED1F1ABC0BE20013F194 /* MultipleBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultipleBarChartViewController.h; sourceTree = ""; }; - 5BEAED201ABC0BE20013F194 /* MultipleBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultipleBarChartViewController.m; sourceTree = ""; }; - 5BEAED211ABC0BE20013F194 /* MultipleBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultipleBarChartViewController.xib; sourceTree = ""; }; - 5BEAED221ABC0BE20013F194 /* MultipleLinesChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultipleLinesChartViewController.h; sourceTree = ""; }; - 5BEAED231ABC0BE20013F194 /* MultipleLinesChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultipleLinesChartViewController.m; sourceTree = ""; }; - 5BEAED241ABC0BE20013F194 /* MultipleLinesChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultipleLinesChartViewController.xib; sourceTree = ""; }; - 5BEAED291ABC160F0013F194 /* CandleStickChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CandleStickChartViewController.h; sourceTree = ""; }; - 5BEAED2A1ABC160F0013F194 /* CandleStickChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CandleStickChartViewController.m; sourceTree = ""; }; - 5BEAED2B1ABC160F0013F194 /* CandleStickChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CandleStickChartViewController.xib; sourceTree = ""; }; - 5BEAED2E1ABC18F00013F194 /* CubicLineChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CubicLineChartViewController.h; sourceTree = ""; }; - 5BEAED2F1ABC18F00013F194 /* CubicLineChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CubicLineChartViewController.m; sourceTree = ""; }; - 5BEAED301ABC18F00013F194 /* CubicLineChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CubicLineChartViewController.xib; sourceTree = ""; }; - 5BEAED331ABC192F0013F194 /* RadarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RadarChartViewController.h; sourceTree = ""; }; - 5BEAED341ABC192F0013F194 /* RadarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RadarChartViewController.m; sourceTree = ""; }; - 5BEAED351ABC192F0013F194 /* RadarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RadarChartViewController.xib; sourceTree = ""; }; - 5BEAED381ABC199F0013F194 /* ColoredLineChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColoredLineChartViewController.h; sourceTree = ""; }; - 5BEAED391ABC199F0013F194 /* ColoredLineChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ColoredLineChartViewController.m; sourceTree = ""; }; - 5BEAED3A1ABC199F0013F194 /* ColoredLineChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ColoredLineChartViewController.xib; sourceTree = ""; }; - 5BEAED3D1ABC1AC60013F194 /* SinusBarChartViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SinusBarChartViewController.h; sourceTree = ""; }; - 5BEAED3E1ABC1AC60013F194 /* SinusBarChartViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SinusBarChartViewController.m; sourceTree = ""; }; - 5BEAED3F1ABC1AC60013F194 /* SinusBarChartViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SinusBarChartViewController.xib; sourceTree = ""; }; - B64D06EA1FB199130067418D /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 225B361A1F6EB9A50005B3D5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 225B368C1F6EBBB00005B3D5 /* Charts.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B57BBAC1A9B26AA0036A6CC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0630AE511D81271B008859B0 /* Charts.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0630AE3A1D8126C0008859B0 /* Products */ = { - isa = PBXGroup; - children = ( - 0630AE411D8126C0008859B0 /* Charts.framework */, - 0630AE431D8126C0008859B0 /* ChartsTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 225B361E1F6EB9A50005B3D5 /* Swift */ = { - isa = PBXGroup; - children = ( - 225B361F1F6EB9A50005B3D5 /* AppDelegate.swift */, - 225B362F1F6EB9EE0005B3D5 /* DemoBaseViewController.swift */, - 225B36301F6EB9EE0005B3D5 /* DemoListViewController.swift */, - 225B363C1F6EBA180005B3D5 /* Components */, - 225B36331F6EB9FE0005B3D5 /* Formatters */, - 225B36431F6EBA410005B3D5 /* Demos */, - ); - path = Swift; - sourceTree = ""; - }; - 225B36331F6EB9FE0005B3D5 /* Formatters */ = { - isa = PBXGroup; - children = ( - 225B36351F6EB9FE0005B3D5 /* DayAxisValueFormatter.swift */, - 225B36361F6EB9FE0005B3D5 /* DateValueFormatter.swift */, - 225B36341F6EB9FE0005B3D5 /* IntAxisValueFormatter.swift */, - 225B36371F6EB9FE0005B3D5 /* LargeValueFormatter.swift */, - ); - path = Formatters; - sourceTree = ""; - }; - 225B363C1F6EBA180005B3D5 /* Components */ = { - isa = PBXGroup; - children = ( - 225B363E1F6EBA180005B3D5 /* BalloonMarker.swift */, - 225B363F1F6EBA180005B3D5 /* RadarMarkerView.swift */, - 225B363D1F6EBA180005B3D5 /* XYMarkerView.swift */, - ); - path = Components; - sourceTree = ""; - }; - 225B36431F6EBA410005B3D5 /* Demos */ = { - isa = PBXGroup; - children = ( - 225B36511F6EBA410005B3D5 /* AnotherBarChartViewController.swift */, - 225B36581F6EBA410005B3D5 /* BarChartViewController.swift */, - 225B364E1F6EBA410005B3D5 /* BubbleChartViewController.swift */, - 225B365A1F6EBA410005B3D5 /* CandleStickChartViewController.swift */, - 225B36481F6EBA410005B3D5 /* ColoredLineChartViewController.swift */, - 225B36571F6EBA410005B3D5 /* CombinedChartViewController.swift */, - 225B36531F6EBA410005B3D5 /* CubicLineChartViewController.swift */, - 225B36461F6EBA410005B3D5 /* HalfPieChartViewController.swift */, - 225B36551F6EBA410005B3D5 /* HorizontalBarChartViewController.swift */, - 225B364A1F6EBA410005B3D5 /* LineChart1ViewController.swift */, - 225B36491F6EBA410005B3D5 /* LineChart2ViewController.swift */, - 225B364F1F6EBA410005B3D5 /* LineChartFilledViewController.swift */, - 225B36471F6EBA410005B3D5 /* LineChartTimeViewController.swift */, - 225B36441F6EBA410005B3D5 /* MultipleLinesChartViewController.swift */, - 225B36451F6EBA410005B3D5 /* MultipleBarChartViewController.swift */, - 225B364B1F6EBA410005B3D5 /* NegativeStackedBarChartViewController.swift */, - 225B36521F6EBA410005B3D5 /* PieChartViewController.swift */, - 225B36561F6EBA410005B3D5 /* PiePolylineChartViewController.swift */, - 225B36501F6EBA410005B3D5 /* PositiveNegativeBarChartViewController.swift */, - 225B36541F6EBA410005B3D5 /* RadarChartViewController.swift */, - 225B364C1F6EBA410005B3D5 /* ScatterChartViewController.swift */, - 225B36591F6EBA410005B3D5 /* SinusBarChartViewController.swift */, - 225B364D1F6EBA410005B3D5 /* StackedBarChartViewController.swift */, - ); - path = Demos; - sourceTree = ""; - }; - 227136F41F6EB665006D2A11 /* XIBs */ = { - isa = PBXGroup; - children = ( - 5B8EAF231AB3271B009697AA /* DemoListViewController.xib */, - 5B613DB41D526EA8000F1E98 /* RadarMarkerView.xib */, - 227136F61F6EB69D006D2A11 /* Demos */, - ); - path = XIBs; - sourceTree = ""; - }; - 227136F61F6EB69D006D2A11 /* Demos */ = { - isa = PBXGroup; - children = ( - 5BEAED111ABBFB2B0013F194 /* AnotherBarChartViewController.xib */, - 5BD47E641ABB424E008FCEC6 /* BarChartViewController.xib */, - 55E3564D1ADC638F00A57971 /* BubbleChartViewController.xib */, - 5BEAED2B1ABC160F0013F194 /* CandleStickChartViewController.xib */, - 5BEAED3A1ABC199F0013F194 /* ColoredLineChartViewController.xib */, - 5BDEDC461ABB871E007D3A60 /* CombinedChartViewController.xib */, - 5BEAED301ABC18F00013F194 /* CubicLineChartViewController.xib */, - 5BE6737F1D5B496500A87BA2 /* HalfPieChartViewController.xib */, - 5BDEDC401ABB7F73007D3A60 /* HorizontalBarChartViewController.xib */, - 5BD8F0731AB89CE500566E05 /* LineChart1ViewController.xib */, - 5BD47E5F1ABB3C91008FCEC6 /* LineChart2ViewController.xib */, - 5BE6738E1D5B4E0900A87BA2 /* LineChartFilledViewController.xib */, - 5BE673911D5B4E0900A87BA2 /* LineChartTimeViewController.xib */, - 5BEAED211ABC0BE20013F194 /* MultipleBarChartViewController.xib */, - 5BEAED241ABC0BE20013F194 /* MultipleLinesChartViewController.xib */, - 5B9624401B38608C007763E2 /* NegativeStackedBarChartViewController.xib */, - 5B0CC7841ABB875400665592 /* PieChartViewController.xib */, - 0471CBFB1CA1090A00E52DBC /* PiePolylineChartViewController.xib */, - 5BE7E7611C693098000A0377 /* PositiveNegativeBarChartViewController.xib */, - 5BEAED351ABC192F0013F194 /* RadarChartViewController.xib */, - 5B1B5DA91E911A15006D1375 /* RealmDemosViewController.xib */, - 5BEAED171ABBFB340013F194 /* ScatterChartViewController.xib */, - 5BEAED3F1ABC1AC60013F194 /* SinusBarChartViewController.xib */, - 5BEAED1A1ABBFB340013F194 /* StackedBarChartViewController.xib */, - ); - path = Demos; - sourceTree = ""; - }; - 5B57BBA61A9B26AA0036A6CC = { - isa = PBXGroup; - children = ( - 5B57BBB11A9B26AA0036A6CC /* Objective-C */, - 225B361E1F6EB9A50005B3D5 /* Swift */, - 227136F41F6EB665006D2A11 /* XIBs */, - 5B8EAF2E1AB32E15009697AA /* Resources */, - 5B57BBB21A9B26AA0036A6CC /* Supporting Files */, - 5B57BBB01A9B26AA0036A6CC /* Products */, - 0630AE391D8126C0008859B0 /* Charts.xcodeproj */, - ); - sourceTree = ""; - }; - 5B57BBB01A9B26AA0036A6CC /* Products */ = { - isa = PBXGroup; - children = ( - 5B57BBAF1A9B26AA0036A6CC /* ChartsDemo-iOS.app */, - 225B361D1F6EB9A50005B3D5 /* ChartsDemo-iOS-Swift.app */, - ); - name = Products; - sourceTree = ""; - }; - 5B57BBB11A9B26AA0036A6CC /* Objective-C */ = { - isa = PBXGroup; - children = ( - 5B57BBB61A9B26AA0036A6CC /* AppDelegate.h */, - 5B57BBB71A9B26AA0036A6CC /* AppDelegate.m */, - 5B57BBB91A9B26AA0036A6CC /* DemoListViewController.h */, - 5B57BBBA1A9B26AA0036A6CC /* DemoListViewController.m */, - 5B8EAF251AB32CF5009697AA /* DemoBaseViewController.h */, - 5B8EAF261AB32CF5009697AA /* DemoBaseViewController.m */, - 5BE377D41D42511A006EB34F /* Formatters */, - 5BD47E541ABB0177008FCEC6 /* Components */, - 5BD8F06F1AB89C7100566E05 /* Demos */, - ); - path = "Objective-C"; - sourceTree = ""; - }; - 5B57BBB21A9B26AA0036A6CC /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 5B57BBB31A9B26AA0036A6CC /* Info.plist */, - 5B57BBB41A9B26AA0036A6CC /* main.m */, - 5BD47E5C1ABB0273008FCEC6 /* ChartsDemo-Bridging-Header.h */, - ); - path = "Supporting Files"; - sourceTree = ""; - }; - 5B613DA21D526AD5000F1E98 /* markers */ = { - isa = PBXGroup; - children = ( - 5B613DA31D526AD5000F1E98 /* radar_marker@3x.png */, - ); - path = markers; - sourceTree = ""; - }; - 5B8EAF2E1AB32E15009697AA /* Resources */ = { - isa = PBXGroup; - children = ( - B64D06EA1FB199130067418D /* Launch Screen.storyboard */, - 5B8EAF2F1AB32E15009697AA /* Images.xcassets */, - 5B613DA21D526AD5000F1E98 /* markers */, - ); - path = Resources; - sourceTree = ""; - }; - 5BD47E541ABB0177008FCEC6 /* Components */ = { - isa = PBXGroup; - children = ( - 5BD47E5A1ABB0263008FCEC6 /* BalloonMarker.swift */, - 5B613DB21D526DED000F1E98 /* RadarMarkerView.swift */, - 5B613DEF1D5A50B6000F1E98 /* XYMarkerView.swift */, - ); - path = Components; - sourceTree = ""; - }; - 5BD8F06F1AB89C7100566E05 /* Demos */ = { - isa = PBXGroup; - children = ( - 5BEAED0F1ABBFB2B0013F194 /* AnotherBarChartViewController.h */, - 5BEAED101ABBFB2B0013F194 /* AnotherBarChartViewController.m */, - 5BD47E621ABB424E008FCEC6 /* BarChartViewController.h */, - 5BD47E631ABB424E008FCEC6 /* BarChartViewController.m */, - 55E3564E1ADC638F00A57971 /* BubbleChartViewController.h */, - 55E3564F1ADC638F00A57971 /* BubbleChartViewController.m */, - 5BEAED291ABC160F0013F194 /* CandleStickChartViewController.h */, - 5BEAED2A1ABC160F0013F194 /* CandleStickChartViewController.m */, - 5BEAED381ABC199F0013F194 /* ColoredLineChartViewController.h */, - 5BEAED391ABC199F0013F194 /* ColoredLineChartViewController.m */, - 5BDEDC441ABB871E007D3A60 /* CombinedChartViewController.h */, - 5BDEDC451ABB871E007D3A60 /* CombinedChartViewController.m */, - 5BEAED2E1ABC18F00013F194 /* CubicLineChartViewController.h */, - 5BEAED2F1ABC18F00013F194 /* CubicLineChartViewController.m */, - 5BE6737D1D5B496500A87BA2 /* HalfPieChartViewController.h */, - 5BE6737E1D5B496500A87BA2 /* HalfPieChartViewController.m */, - 5BDEDC3E1ABB7F73007D3A60 /* HorizontalBarChartViewController.h */, - 5BDEDC3F1ABB7F73007D3A60 /* HorizontalBarChartViewController.m */, - 5BD8F0711AB89CE500566E05 /* LineChart1ViewController.h */, - 5BD8F0721AB89CE500566E05 /* LineChart1ViewController.m */, - 5BD47E5D1ABB3C91008FCEC6 /* LineChart2ViewController.h */, - 5BD47E5E1ABB3C91008FCEC6 /* LineChart2ViewController.m */, - 5BE6738C1D5B4E0900A87BA2 /* LineChartFilledViewController.h */, - 5BE6738D1D5B4E0900A87BA2 /* LineChartFilledViewController.m */, - 5BE6738F1D5B4E0900A87BA2 /* LineChartTimeViewController.h */, - 5BE673901D5B4E0900A87BA2 /* LineChartTimeViewController.m */, - 5BEAED1F1ABC0BE20013F194 /* MultipleBarChartViewController.h */, - 5BEAED201ABC0BE20013F194 /* MultipleBarChartViewController.m */, - 5BEAED221ABC0BE20013F194 /* MultipleLinesChartViewController.h */, - 5BEAED231ABC0BE20013F194 /* MultipleLinesChartViewController.m */, - 5B96243E1B38608C007763E2 /* NegativeStackedBarChartViewController.h */, - 5B96243F1B38608C007763E2 /* NegativeStackedBarChartViewController.m */, - 5B0CC7821ABB875400665592 /* PieChartViewController.h */, - 5B0CC7831ABB875400665592 /* PieChartViewController.m */, - 0439A3511C9FF95F00496F83 /* PiePolylineChartViewController.h */, - 0439A3521C9FF95F00496F83 /* PiePolylineChartViewController.m */, - 5BE7E75F1C693098000A0377 /* PositiveNegativeBarChartViewController.h */, - 5BE7E7601C693098000A0377 /* PositiveNegativeBarChartViewController.m */, - 5BEAED331ABC192F0013F194 /* RadarChartViewController.h */, - 5BEAED341ABC192F0013F194 /* RadarChartViewController.m */, - 5BEAED151ABBFB340013F194 /* ScatterChartViewController.h */, - 5BEAED161ABBFB340013F194 /* ScatterChartViewController.m */, - 5BEAED3D1ABC1AC60013F194 /* SinusBarChartViewController.h */, - 5BEAED3E1ABC1AC60013F194 /* SinusBarChartViewController.m */, - 5BEAED181ABBFB340013F194 /* StackedBarChartViewController.h */, - 5BEAED191ABBFB340013F194 /* StackedBarChartViewController.m */, - ); - path = Demos; - sourceTree = ""; - }; - 5BE377D41D42511A006EB34F /* Formatters */ = { - isa = PBXGroup; - children = ( - 5BE377DC1D425151006EB34F /* DayAxisValueFormatter.h */, - 5BE377DD1D425151006EB34F /* DayAxisValueFormatter.m */, - 5BE377F01D47FDF1006EB34F /* IntAxisValueFormatter.h */, - 5BE377F11D47FDF1006EB34F /* IntAxisValueFormatter.m */, - 5B613DF11D5A60DF000F1E98 /* LargeValueFormatter.swift */, - 5BE673981D5BAD7E00A87BA2 /* DateValueFormatter.h */, - 5BE673991D5BAD7E00A87BA2 /* DateValueFormatter.m */, - ); - path = Formatters; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 225B361C1F6EB9A50005B3D5 /* ChartsDemo-iOS-Swift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 225B362C1F6EB9A50005B3D5 /* Build configuration list for PBXNativeTarget "ChartsDemo-iOS-Swift" */; - buildPhases = ( - 225B36191F6EB9A50005B3D5 /* Sources */, - 225B361A1F6EB9A50005B3D5 /* Frameworks */, - 225B361B1F6EB9A50005B3D5 /* Resources */, - 225B36901F6EBBB10005B3D5 /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 225B368F1F6EBBB00005B3D5 /* PBXTargetDependency */, - ); - name = "ChartsDemo-iOS-Swift"; - productName = "ChartsDemo-Swift"; - productReference = 225B361D1F6EB9A50005B3D5 /* ChartsDemo-iOS-Swift.app */; - productType = "com.apple.product-type.application"; - }; - 5B57BBAE1A9B26AA0036A6CC /* ChartsDemo-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5B57BBD21A9B26AA0036A6CC /* Build configuration list for PBXNativeTarget "ChartsDemo-iOS" */; - buildPhases = ( - 5B57BBAB1A9B26AA0036A6CC /* Sources */, - 5B57BBAC1A9B26AA0036A6CC /* Frameworks */, - 5B57BBAD1A9B26AA0036A6CC /* Resources */, - 5BB4B0751ACA710D00E2EF4D /* Embed Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 0630AE541D81271B008859B0 /* PBXTargetDependency */, - ); - name = "ChartsDemo-iOS"; - productName = chartstest; - productReference = 5B57BBAF1A9B26AA0036A6CC /* ChartsDemo-iOS.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5B57BBA71A9B26AA0036A6CC /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftMigration = 0700; - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = dcg; - TargetAttributes = { - 225B361C1F6EB9A50005B3D5 = { - CreatedOnToolsVersion = 9.0; - LastSwiftMigration = 1000; - }; - 5B57BBAE1A9B26AA0036A6CC = { - CreatedOnToolsVersion = 6.1.1; - LastSwiftMigration = 0900; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 5B57BBAA1A9B26AA0036A6CC /* Build configuration list for PBXProject "ChartsDemo-iOS" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - Base, - ); - mainGroup = 5B57BBA61A9B26AA0036A6CC; - productRefGroup = 5B57BBB01A9B26AA0036A6CC /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 0630AE3A1D8126C0008859B0 /* Products */; - ProjectRef = 0630AE391D8126C0008859B0 /* Charts.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 5B57BBAE1A9B26AA0036A6CC /* ChartsDemo-iOS */, - 225B361C1F6EB9A50005B3D5 /* ChartsDemo-iOS-Swift */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 0630AE411D8126C0008859B0 /* Charts.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Charts.framework; - remoteRef = 0630AE401D8126C0008859B0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 0630AE431D8126C0008859B0 /* ChartsTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = ChartsTests.xctest; - remoteRef = 0630AE421D8126C0008859B0 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 225B361B1F6EB9A50005B3D5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 225B367C1F6EBA640005B3D5 /* HorizontalBarChartViewController.xib in Resources */, - 225B36841F6EBA640005B3D5 /* PieChartViewController.xib in Resources */, - 225B36741F6EBA640005B3D5 /* AnotherBarChartViewController.xib in Resources */, - 225B36781F6EBA640005B3D5 /* ColoredLineChartViewController.xib in Resources */, - 225B36791F6EBA640005B3D5 /* CombinedChartViewController.xib in Resources */, - 225B367B1F6EBA640005B3D5 /* HalfPieChartViewController.xib in Resources */, - 068A9B1A1FBBF355003CF1AD /* Launch Screen.storyboard in Resources */, - 225B367A1F6EBA640005B3D5 /* CubicLineChartViewController.xib in Resources */, - 225B368B1F6EBA640005B3D5 /* StackedBarChartViewController.xib in Resources */, - 225B36821F6EBA640005B3D5 /* MultipleLinesChartViewController.xib in Resources */, - 068A9B191FBBF351003CF1AD /* Images.xcassets in Resources */, - 225B36751F6EBA640005B3D5 /* BarChartViewController.xib in Resources */, - 225B367F1F6EBA640005B3D5 /* LineChartFilledViewController.xib in Resources */, - 225B36801F6EBA640005B3D5 /* LineChartTimeViewController.xib in Resources */, - 225B36811F6EBA640005B3D5 /* MultipleBarChartViewController.xib in Resources */, - 225B367D1F6EBA640005B3D5 /* LineChart1ViewController.xib in Resources */, - 068A9B1B1FBBF366003CF1AD /* radar_marker@3x.png in Resources */, - 225B36721F6EBA5E0005B3D5 /* DemoListViewController.xib in Resources */, - 225B36891F6EBA640005B3D5 /* ScatterChartViewController.xib in Resources */, - 225B36851F6EBA640005B3D5 /* PiePolylineChartViewController.xib in Resources */, - 225B36771F6EBA640005B3D5 /* CandleStickChartViewController.xib in Resources */, - 225B36871F6EBA640005B3D5 /* RadarChartViewController.xib in Resources */, - 225B368A1F6EBA640005B3D5 /* SinusBarChartViewController.xib in Resources */, - 225B36731F6EBA5E0005B3D5 /* RadarMarkerView.xib in Resources */, - 225B367E1F6EBA640005B3D5 /* LineChart2ViewController.xib in Resources */, - 225B36881F6EBA640005B3D5 /* RealmDemosViewController.xib in Resources */, - 225B36861F6EBA640005B3D5 /* PositiveNegativeBarChartViewController.xib in Resources */, - 225B36831F6EBA640005B3D5 /* NegativeStackedBarChartViewController.xib in Resources */, - 225B36761F6EBA640005B3D5 /* BubbleChartViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B57BBAD1A9B26AA0036A6CC /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B8EAF301AB32E15009697AA /* Images.xcassets in Resources */, - 5BE673931D5B4E0900A87BA2 /* LineChartFilledViewController.xib in Resources */, - 5BEAED2D1ABC160F0013F194 /* CandleStickChartViewController.xib in Resources */, - 5B613DB51D526EA8000F1E98 /* RadarMarkerView.xib in Resources */, - 5BD47E611ABB3C91008FCEC6 /* LineChart2ViewController.xib in Resources */, - 5BEAED131ABBFB2B0013F194 /* AnotherBarChartViewController.xib in Resources */, - 5BEAED411ABC1AC60013F194 /* SinusBarChartViewController.xib in Resources */, - 5BEAED371ABC192F0013F194 /* RadarChartViewController.xib in Resources */, - 5B8EAF241AB3271B009697AA /* DemoListViewController.xib in Resources */, - 5BEAED261ABC0BE20013F194 /* MultipleBarChartViewController.xib in Resources */, - 5BEAED3C1ABC199F0013F194 /* ColoredLineChartViewController.xib in Resources */, - 5BEAED321ABC18F00013F194 /* CubicLineChartViewController.xib in Resources */, - 5BEAED281ABC0BE20013F194 /* MultipleLinesChartViewController.xib in Resources */, - 5B9624421B38608C007763E2 /* NegativeStackedBarChartViewController.xib in Resources */, - 5B613DA41D526AD5000F1E98 /* radar_marker@3x.png in Resources */, - 5BE7E7631C693098000A0377 /* PositiveNegativeBarChartViewController.xib in Resources */, - 5B0CC7861ABB875400665592 /* PieChartViewController.xib in Resources */, - 5BEAED1C1ABBFB340013F194 /* ScatterChartViewController.xib in Resources */, - 0471CBFC1CA1090A00E52DBC /* PiePolylineChartViewController.xib in Resources */, - 5BD8F0751AB89CE500566E05 /* LineChart1ViewController.xib in Resources */, - 5BE673811D5B496500A87BA2 /* HalfPieChartViewController.xib in Resources */, - B64D06EB1FB199130067418D /* Launch Screen.storyboard in Resources */, - 5BD47E661ABB424E008FCEC6 /* BarChartViewController.xib in Resources */, - 5BDEDC421ABB7F73007D3A60 /* HorizontalBarChartViewController.xib in Resources */, - 5BDEDC481ABB871E007D3A60 /* CombinedChartViewController.xib in Resources */, - 5BE673951D5B4E0900A87BA2 /* LineChartTimeViewController.xib in Resources */, - 5BEAED1E1ABBFB340013F194 /* StackedBarChartViewController.xib in Resources */, - 5B1B5DAB1E911A15006D1375 /* RealmDemosViewController.xib in Resources */, - 55E356501ADC638F00A57971 /* BubbleChartViewController.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 225B36191F6EB9A50005B3D5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 225B365E1F6EBA470005B3D5 /* LineChartTimeViewController.swift in Sources */, - 225B36311F6EB9EE0005B3D5 /* DemoBaseViewController.swift in Sources */, - 225B36391F6EBA040005B3D5 /* DayAxisValueFormatter.swift in Sources */, - 225B36661F6EBA470005B3D5 /* LineChartFilledViewController.swift in Sources */, - 225B366A1F6EBA470005B3D5 /* CubicLineChartViewController.swift in Sources */, - 225B36671F6EBA470005B3D5 /* PositiveNegativeBarChartViewController.swift in Sources */, - 225B363A1F6EBA040005B3D5 /* DateValueFormatter.swift in Sources */, - 225B366D1F6EBA470005B3D5 /* PiePolylineChartViewController.swift in Sources */, - 225B366F1F6EBA470005B3D5 /* BarChartViewController.swift in Sources */, - 225B36601F6EBA470005B3D5 /* LineChart2ViewController.swift in Sources */, - 225B36411F6EBA1D0005B3D5 /* BalloonMarker.swift in Sources */, - 225B366C1F6EBA470005B3D5 /* HorizontalBarChartViewController.swift in Sources */, - 225B36401F6EBA1D0005B3D5 /* XYMarkerView.swift in Sources */, - 225B36421F6EBA1D0005B3D5 /* RadarMarkerView.swift in Sources */, - 225B366B1F6EBA470005B3D5 /* RadarChartViewController.swift in Sources */, - 225B36611F6EBA470005B3D5 /* LineChart1ViewController.swift in Sources */, - 225B36691F6EBA470005B3D5 /* PieChartViewController.swift in Sources */, - 225B365B1F6EBA470005B3D5 /* MultipleLinesChartViewController.swift in Sources */, - 225B365F1F6EBA470005B3D5 /* ColoredLineChartViewController.swift in Sources */, - 225B36201F6EB9A50005B3D5 /* AppDelegate.swift in Sources */, - 225B36321F6EB9EE0005B3D5 /* DemoListViewController.swift in Sources */, - 225B36711F6EBA470005B3D5 /* CandleStickChartViewController.swift in Sources */, - 225B36631F6EBA470005B3D5 /* ScatterChartViewController.swift in Sources */, - 225B365C1F6EBA470005B3D5 /* MultipleBarChartViewController.swift in Sources */, - 225B366E1F6EBA470005B3D5 /* CombinedChartViewController.swift in Sources */, - 225B36641F6EBA470005B3D5 /* StackedBarChartViewController.swift in Sources */, - 225B36651F6EBA470005B3D5 /* BubbleChartViewController.swift in Sources */, - 225B36381F6EBA040005B3D5 /* IntAxisValueFormatter.swift in Sources */, - 225B365D1F6EBA470005B3D5 /* HalfPieChartViewController.swift in Sources */, - 225B36701F6EBA470005B3D5 /* SinusBarChartViewController.swift in Sources */, - 225B36681F6EBA470005B3D5 /* AnotherBarChartViewController.swift in Sources */, - 225B36621F6EBA470005B3D5 /* NegativeStackedBarChartViewController.swift in Sources */, - 225B363B1F6EBA040005B3D5 /* LargeValueFormatter.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B57BBAB1A9B26AA0036A6CC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B613DF21D5A60DF000F1E98 /* LargeValueFormatter.swift in Sources */, - 5BEAED1B1ABBFB340013F194 /* ScatterChartViewController.m in Sources */, - 5B0CC7851ABB875400665592 /* PieChartViewController.m in Sources */, - 0439A3541C9FF95F00496F83 /* PiePolylineChartViewController.m in Sources */, - 5B57BBBB1A9B26AA0036A6CC /* DemoListViewController.m in Sources */, - 5BD47E651ABB424E008FCEC6 /* BarChartViewController.m in Sources */, - 5BDEDC471ABB871E007D3A60 /* CombinedChartViewController.m in Sources */, - 5BE377F21D47FDF1006EB34F /* IntAxisValueFormatter.m in Sources */, - 5BD8F0741AB89CE500566E05 /* LineChart1ViewController.m in Sources */, - 5BE377DE1D425151006EB34F /* DayAxisValueFormatter.m in Sources */, - 5BEAED401ABC1AC60013F194 /* SinusBarChartViewController.m in Sources */, - 5BE7E7621C693098000A0377 /* PositiveNegativeBarChartViewController.m in Sources */, - 5B613DB31D526DED000F1E98 /* RadarMarkerView.swift in Sources */, - 5BEAED251ABC0BE20013F194 /* MultipleBarChartViewController.m in Sources */, - 5B57BBB81A9B26AA0036A6CC /* AppDelegate.m in Sources */, - 55E356511ADC638F00A57971 /* BubbleChartViewController.m in Sources */, - 5BD47E5B1ABB0263008FCEC6 /* BalloonMarker.swift in Sources */, - 5BEAED2C1ABC160F0013F194 /* CandleStickChartViewController.m in Sources */, - 5BEAED271ABC0BE20013F194 /* MultipleLinesChartViewController.m in Sources */, - 5BE6739A1D5BAD7E00A87BA2 /* DateValueFormatter.m in Sources */, - 5BE673801D5B496500A87BA2 /* HalfPieChartViewController.m in Sources */, - 5BE673921D5B4E0900A87BA2 /* LineChartFilledViewController.m in Sources */, - 5B8EAF281AB32CF5009697AA /* DemoBaseViewController.m in Sources */, - 5BE673941D5B4E0900A87BA2 /* LineChartTimeViewController.m in Sources */, - 5B613DF01D5A50B6000F1E98 /* XYMarkerView.swift in Sources */, - 5BEAED3B1ABC199F0013F194 /* ColoredLineChartViewController.m in Sources */, - 5BDEDC411ABB7F73007D3A60 /* HorizontalBarChartViewController.m in Sources */, - 5BEAED121ABBFB2B0013F194 /* AnotherBarChartViewController.m in Sources */, - 5BEAED311ABC18F00013F194 /* CubicLineChartViewController.m in Sources */, - 5BEAED1D1ABBFB340013F194 /* StackedBarChartViewController.m in Sources */, - 5BD47E601ABB3C91008FCEC6 /* LineChart2ViewController.m in Sources */, - 5B57BBB51A9B26AA0036A6CC /* main.m in Sources */, - 5BEAED361ABC192F0013F194 /* RadarChartViewController.m in Sources */, - 5B9624411B38608C007763E2 /* NegativeStackedBarChartViewController.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 0630AE541D81271B008859B0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Charts; - targetProxy = 0630AE531D81271B008859B0 /* PBXContainerItemProxy */; - }; - 225B368F1F6EBBB00005B3D5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Charts; - targetProxy = 225B368E1F6EBBB00005B3D5 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 225B362D1F6EB9A50005B3D5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "$(SRCROOT)/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.dcg.ChartsDemo-Swift"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Debug; - }; - 225B362E1F6EB9A50005B3D5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = "$(SRCROOT)/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.dcg.ChartsDemo-Swift"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; - }; - name = Release; - }; - 5B57BBD01A9B26AA0036A6CC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5B57BBD11A9B26AA0036A6CC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5B57BBD31A9B26AA0036A6CC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = "$(SOURCE_ROOT)/../Carthage/Build/iOS"; - INFOPLIST_FILE = "Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.dcg.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "ChartsDemo-iOS"; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos appletvsimulator appletvos"; - SWIFT_OBJC_BRIDGING_HEADER = "Supporting Files/ChartsDemo-Bridging-Header.h"; - SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(SWIFT_MODULE_NAME)-Swift.h"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5B57BBD41A9B26AA0036A6CC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = "$(SOURCE_ROOT)/../Carthage/Build/iOS"; - INFOPLIST_FILE = "Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "com.dcg.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "ChartsDemo-iOS"; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos appletvsimulator appletvos"; - SWIFT_OBJC_BRIDGING_HEADER = "Supporting Files/ChartsDemo-Bridging-Header.h"; - SWIFT_OBJC_INTERFACE_HEADER_NAME = "$(SWIFT_MODULE_NAME)-Swift.h"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 225B362C1F6EB9A50005B3D5 /* Build configuration list for PBXNativeTarget "ChartsDemo-iOS-Swift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 225B362D1F6EB9A50005B3D5 /* Debug */, - 225B362E1F6EB9A50005B3D5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B57BBAA1A9B26AA0036A6CC /* Build configuration list for PBXProject "ChartsDemo-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B57BBD01A9B26AA0036A6CC /* Debug */, - 5B57BBD11A9B26AA0036A6CC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5B57BBD21A9B26AA0036A6CC /* Build configuration list for PBXNativeTarget "ChartsDemo-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5B57BBD31A9B26AA0036A6CC /* Debug */, - 5B57BBD41A9B26AA0036A6CC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5B57BBA71A9B26AA0036A6CC /* Project object */; -} diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.h deleted file mode 100644 index f519086a..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// AppDelegate.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - - -@end - diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.m deleted file mode 100644 index 35ffcc3c..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/AppDelegate.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// AppDelegate.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "AppDelegate.h" -#import "DemoListViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - - DemoListViewController *vc = [[DemoListViewController alloc] init]; - UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:vc]; - - _window.rootViewController = nvc; - [_window makeKeyAndVisible]; - - return YES; -} - -- (void)applicationWillResignActive:(UIApplication *)application { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. -} - -- (void)applicationDidEnterBackground:(UIApplication *)application { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - -- (void)applicationWillEnterForeground:(UIApplication *)application { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. -} - -- (void)applicationDidBecomeActive:(UIApplication *)application { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - -- (void)applicationWillTerminate:(UIApplication *)application { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/BalloonMarker.swift b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/BalloonMarker.swift deleted file mode 100644 index b36c3fe0..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/BalloonMarker.swift +++ /dev/null @@ -1,209 +0,0 @@ -// -// BalloonMarker.swift -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import Charts -#if canImport(UIKit) - import UIKit -#endif - -open class BalloonMarker: MarkerImage -{ - @objc open var color: UIColor - @objc open var arrowSize = CGSize(width: 15, height: 11) - @objc open var font: UIFont - @objc open var textColor: UIColor - @objc open var insets: UIEdgeInsets - @objc open var minimumSize = CGSize() - - fileprivate var label: String? - fileprivate var _labelSize: CGSize = CGSize() - fileprivate var _paragraphStyle: NSMutableParagraphStyle? - fileprivate var _drawAttributes = [NSAttributedString.Key : Any]() - - @objc public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets) - { - self.color = color - self.font = font - self.textColor = textColor - self.insets = insets - - _paragraphStyle = NSParagraphStyle.default.mutableCopy() as? NSMutableParagraphStyle - _paragraphStyle?.alignment = .center - super.init() - } - - open override func offsetForDrawing(atPoint point: CGPoint) -> CGPoint - { - var offset = self.offset - var size = self.size - - if size.width == 0.0 && image != nil - { - size.width = image!.size.width - } - if size.height == 0.0 && image != nil - { - size.height = image!.size.height - } - - let width = size.width - let height = size.height - let padding: CGFloat = 8.0 - - var origin = point - origin.x -= width / 2 - origin.y -= height - - if origin.x + offset.x < 0.0 - { - offset.x = -origin.x + padding - } - else if let chart = chartView, - origin.x + width + offset.x > chart.bounds.size.width - { - offset.x = chart.bounds.size.width - origin.x - width - padding - } - - if origin.y + offset.y < 0 - { - offset.y = height + padding; - } - else if let chart = chartView, - origin.y + height + offset.y > chart.bounds.size.height - { - offset.y = chart.bounds.size.height - origin.y - height - padding - } - - return offset - } - - open override func draw(context: CGContext, point: CGPoint) - { - guard let label = label else { return } - - let offset = self.offsetForDrawing(atPoint: point) - let size = self.size - - var rect = CGRect( - origin: CGPoint( - x: point.x + offset.x, - y: point.y + offset.y), - size: size) - rect.origin.x -= size.width / 2.0 - rect.origin.y -= size.height - - context.saveGState() - - context.setFillColor(color.cgColor) - - if offset.y > 0 - { - context.beginPath() - context.move(to: CGPoint( - x: rect.origin.x, - y: rect.origin.y + arrowSize.height)) - context.addLine(to: CGPoint( - x: rect.origin.x + (rect.size.width - arrowSize.width) / 2.0, - y: rect.origin.y + arrowSize.height)) - //arrow vertex - context.addLine(to: CGPoint( - x: point.x, - y: point.y)) - context.addLine(to: CGPoint( - x: rect.origin.x + (rect.size.width + arrowSize.width) / 2.0, - y: rect.origin.y + arrowSize.height)) - context.addLine(to: CGPoint( - x: rect.origin.x + rect.size.width, - y: rect.origin.y + arrowSize.height)) - context.addLine(to: CGPoint( - x: rect.origin.x + rect.size.width, - y: rect.origin.y + rect.size.height)) - context.addLine(to: CGPoint( - x: rect.origin.x, - y: rect.origin.y + rect.size.height)) - context.addLine(to: CGPoint( - x: rect.origin.x, - y: rect.origin.y + arrowSize.height)) - context.fillPath() - } - else - { - context.beginPath() - context.move(to: CGPoint( - x: rect.origin.x, - y: rect.origin.y)) - context.addLine(to: CGPoint( - x: rect.origin.x + rect.size.width, - y: rect.origin.y)) - context.addLine(to: CGPoint( - x: rect.origin.x + rect.size.width, - y: rect.origin.y + rect.size.height - arrowSize.height)) - context.addLine(to: CGPoint( - x: rect.origin.x + (rect.size.width + arrowSize.width) / 2.0, - y: rect.origin.y + rect.size.height - arrowSize.height)) - //arrow vertex - context.addLine(to: CGPoint( - x: point.x, - y: point.y)) - context.addLine(to: CGPoint( - x: rect.origin.x + (rect.size.width - arrowSize.width) / 2.0, - y: rect.origin.y + rect.size.height - arrowSize.height)) - context.addLine(to: CGPoint( - x: rect.origin.x, - y: rect.origin.y + rect.size.height - arrowSize.height)) - context.addLine(to: CGPoint( - x: rect.origin.x, - y: rect.origin.y)) - context.fillPath() - } - - if offset.y > 0 { - rect.origin.y += self.insets.top + arrowSize.height - } else { - rect.origin.y += self.insets.top - } - - rect.size.height -= self.insets.top + self.insets.bottom - - UIGraphicsPushContext(context) - - label.draw(in: rect, withAttributes: _drawAttributes) - - UIGraphicsPopContext() - - context.restoreGState() - } - - open override func refreshContent(entry: ChartDataEntry, highlight: Highlight) - { - setLabel(String(entry.y)) - } - - @objc open func setLabel(_ newLabel: String) - { - label = newLabel - - _drawAttributes.removeAll() - _drawAttributes[.font] = self.font - _drawAttributes[.paragraphStyle] = _paragraphStyle - _drawAttributes[.foregroundColor] = self.textColor - - _labelSize = label?.size(withAttributes: _drawAttributes) ?? CGSize.zero - - var size = CGSize() - size.width = _labelSize.width + self.insets.left + self.insets.right - size.height = _labelSize.height + self.insets.top + self.insets.bottom - size.width = max(minimumSize.width, size.width) - size.height = max(minimumSize.height, size.height) - self.size = size - } -} diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/RadarMarkerView.swift b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/RadarMarkerView.swift deleted file mode 100644 index c0d62a3d..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/RadarMarkerView.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// RadarMarkerView.swift -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -import Foundation -import Charts -#if canImport(UIKit) - import UIKit -#endif - -open class RadarMarkerView: MarkerView -{ - @IBOutlet var label: UILabel? - - open override func awakeFromNib() - { - self.offset.x = -self.frame.size.width / 2.0 - self.offset.y = -self.frame.size.height - 7.0 - } - - open override func refreshContent(entry: ChartDataEntry, highlight: Highlight) - { - label?.text = String.init(format: "%d %%", Int(round(entry.y))) - layoutIfNeeded() - } -} diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/XYMarkerView.swift b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/XYMarkerView.swift deleted file mode 100644 index f985bd50..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Components/XYMarkerView.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// XYMarkerView.swift -// ChartsDemo -// Copyright © 2016 dcg. All rights reserved. -// - -import Foundation -import Charts -#if canImport(UIKit) - import UIKit -#endif - -open class XYMarkerView: BalloonMarker -{ - @objc open var xAxisValueFormatter: IAxisValueFormatter? - fileprivate var yFormatter = NumberFormatter() - - @objc public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets, - xAxisValueFormatter: IAxisValueFormatter) - { - super.init(color: color, font: font, textColor: textColor, insets: insets) - self.xAxisValueFormatter = xAxisValueFormatter - yFormatter.minimumFractionDigits = 1 - yFormatter.maximumFractionDigits = 1 - } - - open override func refreshContent(entry: ChartDataEntry, highlight: Highlight) - { - setLabel("x: " + xAxisValueFormatter!.stringForValue(entry.x, axis: nil) + ", y: " + yFormatter.string(from: NSNumber(floatLiteral: entry.y))!) - } - -} diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.h deleted file mode 100644 index fd31bfd7..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// DemoBaseViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "ChartsDemo_iOS-Swift.h" - -@interface DemoBaseViewController : UIViewController -{ -@protected - NSArray *parties; -} - -@property (nonatomic, strong) IBOutlet UIButton *optionsButton; -@property (nonatomic, strong) IBOutlet NSArray *options; - -@property (nonatomic, assign) BOOL shouldHideData; - -- (void)handleOption:(NSString *)key forChartView:(ChartViewBase *)chartView; - -- (void)updateChartData; - -- (void)setupPieChartView:(PieChartView *)chartView; -- (void)setupRadarChartView:(RadarChartView *)chartView; -- (void)setupBarLineChartView:(BarLineChartViewBase *)chartView; - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.m deleted file mode 100644 index 4e6392a9..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoBaseViewController.m +++ /dev/null @@ -1,329 +0,0 @@ -// -// DemoBaseViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "DemoBaseViewController.h" - -@interface DemoBaseViewController () - -@property (nonatomic, strong) UITableView *optionsTableView; - -@end - -@implementation DemoBaseViewController - -- (id)initWithCoder:(NSCoder *)aDecoder -{ - self = [super initWithCoder:aDecoder]; - if (self) - { - [self initialize]; - } - return self; -} - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) - { - [self initialize]; - } - return self; -} - -- (void)initialize -{ - self.edgesForExtendedLayout = UIRectEdgeNone; - - parties = @[ - @"Party A", @"Party B", @"Party C", @"Party D", @"Party E", @"Party F", - @"Party G", @"Party H", @"Party I", @"Party J", @"Party K", @"Party L", - @"Party M", @"Party N", @"Party O", @"Party P", @"Party Q", @"Party R", - @"Party S", @"Party T", @"Party U", @"Party V", @"Party W", @"Party X", - @"Party Y", @"Party Z" - ]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view from its nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)optionTapped:(NSString *)key -{ - -} - -#pragma mark - Common option actions - -- (void)handleOption:(NSString *)key forChartView:(ChartViewBase *)chartView -{ - if ([key isEqualToString:@"toggleValues"]) - { - for (id set in chartView.data.dataSets) - { - set.drawValuesEnabled = !set.isDrawValuesEnabled; - } - - [chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleIcons"]) - { - for (id set in chartView.data.dataSets) - { - set.drawIconsEnabled = !set.isDrawIconsEnabled; - } - - [chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleHighlight"]) - { - chartView.data.highlightEnabled = !chartView.data.isHighlightEnabled; - [chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"animateX"]) - { - [chartView animateWithXAxisDuration:3.0]; - } - - if ([key isEqualToString:@"animateY"]) - { - [chartView animateWithYAxisDuration:3.0]; - } - - if ([key isEqualToString:@"animateXY"]) - { - [chartView animateWithXAxisDuration:3.0 yAxisDuration:3.0]; - } - - if ([key isEqualToString:@"saveToGallery"]) - { - UIImageWriteToSavedPhotosAlbum([chartView getChartImageWithTransparent:NO], nil, nil, nil); - } - - if ([key isEqualToString:@"togglePinchZoom"]) - { - BarLineChartViewBase *barLineChart = (BarLineChartViewBase *)chartView; - barLineChart.pinchZoomEnabled = !barLineChart.isPinchZoomEnabled; - - [chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleAutoScaleMinMax"]) - { - BarLineChartViewBase *barLineChart = (BarLineChartViewBase *)chartView; - barLineChart.autoScaleMinMaxEnabled = !barLineChart.isAutoScaleMinMaxEnabled; - - [chartView notifyDataSetChanged]; - } - - if ([key isEqualToString:@"toggleData"]) - { - _shouldHideData = !_shouldHideData; - [self updateChartData]; - } - - if ([key isEqualToString:@"toggleBarBorders"]) - { - for (id set in chartView.data.dataSets) - { - if ([set conformsToProtocol:@protocol(IBarChartDataSet)]) - { - set.barBorderWidth = set.barBorderWidth == 1.0 ? 0.0 : 1.0; - } - } - - [chartView setNeedsDisplay]; - } -} - -#pragma mark - Actions - -- (IBAction)optionsButtonTapped:(id)sender -{ - if (_optionsTableView) - { - [_optionsTableView removeFromSuperview]; - self.optionsTableView = nil; - return; - } - - self.optionsTableView = [[UITableView alloc] init]; - _optionsTableView.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.9f]; - _optionsTableView.delegate = self; - _optionsTableView.dataSource = self; - [_optionsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"]; - - _optionsTableView.translatesAutoresizingMaskIntoConstraints = NO; - - NSMutableArray *constraints = [[NSMutableArray alloc] init]; - - [constraints addObject:[NSLayoutConstraint constraintWithItem:_optionsTableView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.f constant:40.f]]; - - [constraints addObject:[NSLayoutConstraint constraintWithItem:_optionsTableView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:sender attribute:NSLayoutAttributeTrailing multiplier:1.f constant:0]]; - - [constraints addObject:[NSLayoutConstraint constraintWithItem:_optionsTableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:sender attribute:NSLayoutAttributeBottom multiplier:1.f constant:5.f]]; - - [self.view addSubview:_optionsTableView]; - - [self.view addConstraints:constraints]; - - [_optionsTableView addConstraints:@[ - [NSLayoutConstraint constraintWithItem:_optionsTableView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.f constant:220.f] - ]]; -} - -#pragma mark - UITableViewDelegate, UITableViewDataSource - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - if (tableView == _optionsTableView) - { - return 1; - } - - return 0; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - if (tableView == _optionsTableView) - { - return self.options.count; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (tableView == _optionsTableView) - { - return 40.0; - } - - return 44.0; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; - cell.backgroundView = nil; - cell.backgroundColor = UIColor.clearColor; - cell.textLabel.textColor = UIColor.whiteColor; - - cell.textLabel.text = self.options[indexPath.row][@"label"]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if (tableView == _optionsTableView) - { - [tableView deselectRowAtIndexPath:indexPath animated:YES]; - - if (_optionsTableView) - { - [_optionsTableView removeFromSuperview]; - self.optionsTableView = nil; - } - - [self optionTapped:self.options[indexPath.row][@"key"]]; - } -} - -#pragma mark - Stubs for chart view - -- (void)updateChartData -{ - // Override this -} - -- (void)setupPieChartView:(PieChartView *)chartView -{ - chartView.usePercentValuesEnabled = YES; - chartView.drawSlicesUnderHoleEnabled = NO; - chartView.holeRadiusPercent = 0.58; - chartView.transparentCircleRadiusPercent = 0.61; - chartView.chartDescription.enabled = NO; - [chartView setExtraOffsetsWithLeft:5.f top:10.f right:5.f bottom:5.f]; - - chartView.drawCenterTextEnabled = YES; - - NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; - paragraphStyle.alignment = NSTextAlignmentCenter; - - NSMutableAttributedString *centerText = [[NSMutableAttributedString alloc] initWithString:@"Charts\nby Daniel Cohen Gindi"]; - [centerText setAttributes:@{ - NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:13.f], - NSParagraphStyleAttributeName: paragraphStyle - } range:NSMakeRange(0, centerText.length)]; - [centerText addAttributes:@{ - NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:11.f], - NSForegroundColorAttributeName: UIColor.grayColor - } range:NSMakeRange(10, centerText.length - 10)]; - [centerText addAttributes:@{ - NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:11.f], - NSForegroundColorAttributeName: [UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f] - } range:NSMakeRange(centerText.length - 19, 19)]; - chartView.centerAttributedText = centerText; - - chartView.drawHoleEnabled = YES; - chartView.rotationAngle = 0.0; - chartView.rotationEnabled = YES; - chartView.highlightPerTapEnabled = YES; - - ChartLegend *l = chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationVertical; - l.drawInside = NO; - l.xEntrySpace = 7.0; - l.yEntrySpace = 0.0; - l.yOffset = 0.0; -} - -- (void)setupRadarChartView:(RadarChartView *)chartView -{ - chartView.chartDescription.enabled = NO; -} - -- (void)setupBarLineChartView:(BarLineChartViewBase *)chartView -{ - chartView.chartDescription.enabled = NO; - - chartView.drawGridBackgroundEnabled = NO; - - chartView.dragEnabled = YES; - [chartView setScaleEnabled:YES]; - chartView.pinchZoomEnabled = NO; - - // ChartYAxis *leftAxis = chartView.leftAxis; - - ChartXAxis *xAxis = chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - - chartView.rightAxis.enabled = NO; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.h deleted file mode 100644 index 3f119de0..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// DemoListViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import - -@interface DemoListViewController : UIViewController - - -@end - diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.m deleted file mode 100644 index 77576d03..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/DemoListViewController.m +++ /dev/null @@ -1,227 +0,0 @@ -// -// DemoListViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "DemoListViewController.h" -#import "LineChart1ViewController.h" -#import "LineChart2ViewController.h" -#import "BarChartViewController.h" -#import "HorizontalBarChartViewController.h" -#import "CombinedChartViewController.h" -#import "PieChartViewController.h" -#import "PiePolylineChartViewController.h" -#import "ScatterChartViewController.h" -#import "StackedBarChartViewController.h" -#import "NegativeStackedBarChartViewController.h" -#import "AnotherBarChartViewController.h" -#import "MultipleLinesChartViewController.h" -#import "MultipleBarChartViewController.h" -#import "CandleStickChartViewController.h" -#import "CubicLineChartViewController.h" -#import "RadarChartViewController.h" -#import "ColoredLineChartViewController.h" -#import "SinusBarChartViewController.h" -#import "PositiveNegativeBarChartViewController.h" -#import "BubbleChartViewController.h" -#import "LineChartTimeViewController.h" -#import "LineChartFilledViewController.h" -#import "HalfPieChartViewController.h" - -@interface DemoListViewController () - -@property (nonatomic, strong) IBOutlet UITableView *tableView; -@property (nonatomic, strong) NSArray *itemDefs; -@end - -@implementation DemoListViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Charts Demonstration"; - - self.itemDefs = @[ - @{ - @"title": @"Line Chart", - @"subtitle": @"A simple demonstration of the linechart.", - @"class": LineChart1ViewController.class - }, - @{ - @"title": @"Line Chart (Dual YAxis)", - @"subtitle": @"Demonstration of the linechart with dual y-axis.", - @"class": LineChart2ViewController.class - }, - @{ - @"title": @"Bar Chart", - @"subtitle": @"A simple demonstration of the bar chart.", - @"class": BarChartViewController.class - }, - @{ - @"title": @"Horizontal Bar Chart", - @"subtitle": @"A simple demonstration of the horizontal bar chart.", - @"class": HorizontalBarChartViewController.class - }, - @{ - @"title": @"Combined Chart", - @"subtitle": @"Demonstrates how to create a combined chart (bar and line in this case).", - @"class": CombinedChartViewController.class - }, - @{ - @"title": @"Pie Chart", - @"subtitle": @"A simple demonstration of the pie chart.", - @"class": PieChartViewController.class - }, - @{ - @"title": @"Pie Chart with value lines", - @"subtitle": @"A simple demonstration of the pie chart with polyline notes.", - @"class": PiePolylineChartViewController.class - }, - @{ - @"title": @"Scatter Chart", - @"subtitle": @"A simple demonstration of the scatter chart.", - @"class": ScatterChartViewController.class - }, - @{ - @"title": @"Bubble Chart", - @"subtitle": @"A simple demonstration of the bubble chart.", - @"class": BubbleChartViewController.class - }, - @{ - @"title": @"Stacked Bar Chart", - @"subtitle": @"A simple demonstration of a bar chart with stacked bars.", - @"class": StackedBarChartViewController.class - }, - @{ - @"title": @"Stacked Bar Chart Negative", - @"subtitle": @"A simple demonstration of stacked bars with negative and positive values.", - @"class": NegativeStackedBarChartViewController.class - }, - @{ - @"title": @"Another Bar Chart", - @"subtitle": @"Implementation of a BarChart that only shows values at the bottom.", - @"class": AnotherBarChartViewController.class - }, - @{ - @"title": @"Multiple Lines Chart", - @"subtitle": @"A line chart with multiple DataSet objects. One color per DataSet.", - @"class": MultipleLinesChartViewController.class - }, - @{ - @"title": @"Multiple Bars Chart", - @"subtitle": @"A bar chart with multiple DataSet objects. One multiple colors per DataSet.", - @"class": MultipleBarChartViewController.class - }, - @{ - @"title": @"Candle Stick Chart", - @"subtitle": @"Demonstrates usage of the CandleStickChart.", - @"class": CandleStickChartViewController.class - }, - @{ - @"title": @"Cubic Line Chart", - @"subtitle": @"Demonstrates cubic lines in a LineChart.", - @"class": CubicLineChartViewController.class - }, - @{ - @"title": @"Radar Chart", - @"subtitle": @"Demonstrates the use of a spider-web like (net) chart.", - @"class": RadarChartViewController.class - }, - @{ - @"title": @"Colored Line Chart", - @"subtitle": @"Shows a LineChart with different background and line color.", - @"class": ColoredLineChartViewController.class - }, - @{ - @"title": @"Sinus Bar Chart", - @"subtitle": @"A Bar Chart plotting the sinus function with 8.000 values.", - @"class": SinusBarChartViewController.class - }, - @{ - - @"title": @"BarChart positive / negative", - @"subtitle": @"This demonstrates how to create a BarChart with positive and negative values in different colors.", - @"class": PositiveNegativeBarChartViewController.class - }, - @{ - - @"title": @"Time Line Chart", - @"subtitle": @"Simple demonstration of a time-chart. This chart draws one line entry per hour originating from the current time in milliseconds.", - @"class": LineChartTimeViewController.class - }, - @{ - - @"title": @"Filled Line Chart", - @"subtitle": @"This demonstrates how to fill an area between two LineDataSets.", - @"class": LineChartFilledViewController.class - }, - @{ - - @"title": @"Half Pie Chart", - @"subtitle": @"This demonstrates how to create a 180 degree PieChart.", - @"class": HalfPieChartViewController.class - } - ]; - //FIXME: Add TimeLineChart -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -#pragma mark - UITableViewDataSource, UITableViewDelegate - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - return self.itemDefs.count; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - return 70.f; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSDictionary *def = self.itemDefs[indexPath.row]; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; - if (!cell) - { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"]; - } - - cell.textLabel.text = def[@"title"]; - cell.detailTextLabel.text = def[@"subtitle"]; - cell.detailTextLabel.numberOfLines = 0; - - return cell; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSDictionary *def = self.itemDefs[indexPath.row]; - - Class vcClass = def[@"class"]; - UIViewController *vc = [[vcClass alloc] init]; - - [self.navigationController pushViewController:vc animated:YES]; - - [tableView deselectRowAtIndexPath:indexPath animated:YES]; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.h deleted file mode 100644 index cc5374f6..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AnotherBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface AnotherBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.m deleted file mode 100644 index 65439bc9..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.m +++ /dev/null @@ -1,149 +0,0 @@ -// -// AnotherBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "AnotherBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface AnotherBarChartViewController () - -@property (nonatomic, strong) IBOutlet BarChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation AnotherBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Another Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.maxVisibleCount = 60; - _chartView.pinchZoomEnabled = NO; - _chartView.drawBarShadowEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - xAxis.drawGridLinesEnabled = NO; - - _chartView.leftAxis.drawGridLinesEnabled = NO; - _chartView.rightAxis.drawGridLinesEnabled = NO; - - _chartView.legend.enabled = NO; - - _sliderX.value = 10.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double mult = (range + 1); - double val = (double) (arc4random_uniform(mult)) + mult / 3.0; - [yVals addObject:[[BarChartDataEntry alloc] initWithX:i y:val]]; - } - - BarChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (BarChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries:yVals]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[BarChartDataSet alloc] initWithEntries:yVals label:@"DataSet"]; - set1.colors = ChartColorTemplates.vordiplom; - set1.drawValuesEnabled = NO; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - - BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; - - _chartView.data = data; - _chartView.fitBars = YES; - } - - [_chartView setNeedsDisplay]; -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.h deleted file mode 100644 index 05b7c8c9..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// BarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface BarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.m deleted file mode 100644 index 5e1567c0..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.m +++ /dev/null @@ -1,200 +0,0 @@ -// -// BarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "BarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" -#import "DayAxisValueFormatter.h" - -@interface BarChartViewController () - -@property (nonatomic, strong) IBOutlet BarChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation BarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - [self setupBarLineChartView:_chartView]; - - _chartView.delegate = self; - - _chartView.drawBarShadowEnabled = NO; - _chartView.drawValueAboveBarEnabled = YES; - - _chartView.maxVisibleCount = 60; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - xAxis.labelFont = [UIFont systemFontOfSize:10.f]; - xAxis.drawGridLinesEnabled = NO; - xAxis.granularity = 1.0; // only intervals of 1 day - xAxis.labelCount = 7; - xAxis.valueFormatter = [[DayAxisValueFormatter alloc] initForChart:_chartView]; - - NSNumberFormatter *leftAxisFormatter = [[NSNumberFormatter alloc] init]; - leftAxisFormatter.minimumFractionDigits = 0; - leftAxisFormatter.maximumFractionDigits = 1; - leftAxisFormatter.negativeSuffix = @" $"; - leftAxisFormatter.positiveSuffix = @" $"; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelFont = [UIFont systemFontOfSize:10.f]; - leftAxis.labelCount = 8; - leftAxis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:leftAxisFormatter]; - leftAxis.labelPosition = YAxisLabelPositionOutsideChart; - leftAxis.spaceTop = 0.15; - leftAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - ChartYAxis *rightAxis = _chartView.rightAxis; - rightAxis.enabled = YES; - rightAxis.drawGridLinesEnabled = NO; - rightAxis.labelFont = [UIFont systemFontOfSize:10.f]; - rightAxis.labelCount = 8; - rightAxis.valueFormatter = leftAxis.valueFormatter; - rightAxis.spaceTop = 0.15; - rightAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentLeft; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.form = ChartLegendFormSquare; - l.formSize = 9.0; - l.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:11.f]; - l.xEntrySpace = 4.0; - - XYMarkerView *marker = [[XYMarkerView alloc] - initWithColor: [UIColor colorWithWhite:180/255. alpha:1.0] - font: [UIFont systemFontOfSize:12.0] - textColor: UIColor.whiteColor - insets: UIEdgeInsetsMake(8.0, 8.0, 20.0, 8.0) - xAxisValueFormatter: _chartView.xAxis.valueFormatter]; - marker.chartView = _chartView; - marker.minimumSize = CGSizeMake(80.f, 40.f); - _chartView.marker = marker; - - _sliderX.value = 12.0; - _sliderY.value = 50.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - double start = 1.0; - - NSMutableArray *yVals = [[NSMutableArray alloc] init]; - - for (int i = start; i < start + count + 1; i++) - { - double mult = (range + 1); - double val = (double) (arc4random_uniform(mult)); - if (arc4random_uniform(100) < 25) { - [yVals addObject:[[BarChartDataEntry alloc] initWithX:i y:val icon: [UIImage imageNamed:@"icon"]]]; - } else { - [yVals addObject:[[BarChartDataEntry alloc] initWithX:i y:val]]; - } - } - - BarChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (BarChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries: yVals]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[BarChartDataSet alloc] initWithEntries:yVals label:@"The year 2017"]; - [set1 setColors:ChartColorTemplates.material]; - set1.drawIconsEnabled = NO; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - - BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]]; - - data.barWidth = 0.9f; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value + 2) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.h deleted file mode 100644 index e09eef79..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// BubbleChartViewController.h -// ChartsDemo -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface BubbleChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.m deleted file mode 100644 index 9d325966..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.m +++ /dev/null @@ -1,173 +0,0 @@ -// -// BubbleChartViewController.m -// ChartsDemo -// -// Bubble chart implementation: -// Copyright 2015 Pierre-Marc Airoldi -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "BubbleChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface BubbleChartViewController () - -@property (nonatomic, strong) IBOutlet BubbleChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation BubbleChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Bubble Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.drawGridBackgroundEnabled = NO; - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.maxVisibleCount = 200; - _chartView.pinchZoomEnabled = YES; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationVertical; - l.drawInside = NO; - l.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - - ChartYAxis *yl = _chartView.leftAxis; - yl.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - yl.spaceTop = 0.3; - yl.spaceBottom = 0.3; - yl.axisMinimum = 0.0; // this replaces startAtZero = YES - - _chartView.rightAxis.enabled = NO; - - ChartXAxis *xl = _chartView.xAxis; - xl.labelPosition = XAxisLabelPositionBottom; - xl.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - - _sliderX.value = 10.0; - _sliderY.value = 50.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals1 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals2 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals3 = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double val = (double) (arc4random_uniform(range)); - double size = (double) (arc4random_uniform(range)); - [yVals1 addObject:[[BubbleChartDataEntry alloc] initWithX:i y:val size:size icon: [UIImage imageNamed:@"icon"]]]; - - val = (double) (arc4random_uniform(range)); - size = (double) (arc4random_uniform(range)); - [yVals2 addObject:[[BubbleChartDataEntry alloc] initWithX:i y:val size:size icon: [UIImage imageNamed:@"icon"]]]; - - val = (double) (arc4random_uniform(range)); - size = (double) (arc4random_uniform(range)); - [yVals3 addObject:[[BubbleChartDataEntry alloc] initWithX:i y:val size:size]]; - } - - BubbleChartDataSet *set1 = [[BubbleChartDataSet alloc] initWithEntries:yVals1 label:@"DS 1"]; - set1.drawIconsEnabled = NO; - [set1 setColor:ChartColorTemplates.colorful[0] alpha:0.50f]; - [set1 setDrawValuesEnabled:YES]; - - BubbleChartDataSet *set2 = [[BubbleChartDataSet alloc] initWithEntries:yVals2 label:@"DS 2"]; - set2.iconsOffset = CGPointMake(0, 15); - [set2 setColor:ChartColorTemplates.colorful[1] alpha:0.50f]; - [set2 setDrawValuesEnabled:YES]; - - BubbleChartDataSet *set3 = [[BubbleChartDataSet alloc] initWithEntries:yVals3 label:@"DS 3"]; - [set3 setColor:ChartColorTemplates.colorful[2] alpha:0.50f]; - [set3 setDrawValuesEnabled:YES]; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - [dataSets addObject:set2]; - [dataSets addObject:set3]; - - BubbleChartData *data = [[BubbleChartData alloc] initWithDataSets:dataSets]; - [data setDrawValues:NO]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]]; - [data setHighlightCircleWidth: 1.5]; - [data setValueTextColor:UIColor.whiteColor]; - - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull )entry dataSetIndex:(NSInteger)dataSetIndex highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.h deleted file mode 100644 index fc3d2f66..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// CandleStickChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface CandleStickChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.m deleted file mode 100644 index 25a0e73c..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.m +++ /dev/null @@ -1,174 +0,0 @@ -// -// CandleStickChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "CandleStickChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface CandleStickChartViewController () - -@property (nonatomic, strong) IBOutlet CandleStickChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation CandleStickChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Candle Stick Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleShadowColorSameAsCandle", @"label": @"Toggle shadow same color"}, - @{@"key": @"toggleShowCandleBar", @"label": @"Toggle show candle bar"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.maxVisibleCount = 60; - _chartView.pinchZoomEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - xAxis.drawGridLinesEnabled = NO; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelCount = 7; - leftAxis.drawGridLinesEnabled = NO; - leftAxis.drawAxisLineEnabled = NO; - - ChartYAxis *rightAxis = _chartView.rightAxis; - rightAxis.enabled = NO; - - _chartView.legend.enabled = NO; - - _sliderX.value = 40.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals1 = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double mult = (range + 1); - double val = (double) (arc4random_uniform(40)) + mult; - double high = (double) (arc4random_uniform(9)) + 8.0; - double low = (double) (arc4random_uniform(9)) + 8.0; - double open = (double) (arc4random_uniform(6)) + 1.0; - double close = (double) (arc4random_uniform(6)) + 1.0; - BOOL even = i % 2 == 0; - [yVals1 addObject:[[CandleChartDataEntry alloc] initWithX:i shadowH:val + high shadowL:val - low open:even ? val + open : val - open close:even ? val - close : val + close icon: [UIImage imageNamed:@"icon"]]]; - } - - CandleChartDataSet *set1 = [[CandleChartDataSet alloc] initWithEntries:yVals1 label:@"Data Set"]; - set1.axisDependency = AxisDependencyLeft; - [set1 setColor:[UIColor colorWithWhite:80/255.f alpha:1.f]]; - - set1.drawIconsEnabled = NO; - - set1.shadowColor = UIColor.darkGrayColor; - set1.shadowWidth = 0.7; - set1.decreasingColor = UIColor.redColor; - set1.decreasingFilled = YES; - set1.increasingColor = [UIColor colorWithRed:122/255.f green:242/255.f blue:84/255.f alpha:1.f]; - set1.increasingFilled = NO; - set1.neutralColor = UIColor.blueColor; - - CandleChartData *data = [[CandleChartData alloc] initWithDataSet:set1]; - - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleShadowColorSameAsCandle"]) - { - for (id set in _chartView.data.dataSets) - { - set.shadowColorSameAsCandle = !set.shadowColorSameAsCandle; - } - - [_chartView notifyDataSetChanged]; - return; - } else if ([key isEqualToString:@"toggleShowCandleBar"]) - { - for (id set in _chartView.data.dataSets) - { - set.showCandleBar = !set.showCandleBar; - } - - [_chartView notifyDataSetChanged]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.h deleted file mode 100644 index c79e3cf3..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// ColoredLineChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface ColoredLineChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.m deleted file mode 100644 index 520770f2..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.m +++ /dev/null @@ -1,114 +0,0 @@ -// -// ColoredLineChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "ColoredLineChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface ColoredLineChartViewController () - -@property (nonatomic, strong) IBOutletCollection(LineChartView) NSArray *chartViews; - -@end - -@implementation ColoredLineChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Colored Line Chart"; - - for (int i = 0; i < _chartViews.count; i++) - { - LineChartData *data = [self dataWithCount:36 range:100]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]]; - - NSArray *colors = @[ - [UIColor colorWithRed:137/255.f green:230/255.f blue:81/255.f alpha:1.f], - [UIColor colorWithRed:240/255.f green:240/255.f blue:30/255.f alpha:1.f], - [UIColor colorWithRed:89/255.f green:199/255.f blue:250/255.f alpha:1.f], - [UIColor colorWithRed:250/255.f green:104/255.f blue:104/255.f alpha:1.f], - ]; - - [self setupChart:_chartViews[i] data:data color:colors[i % colors.count]]; - } -} - -- (void)setupChart:(LineChartView *)chart data:(LineChartData *)data color:(UIColor *)color -{ - [(LineChartDataSet *)[data getDataSetByIndex:0] setCircleHoleColor:color]; - - chart.delegate = self; - chart.backgroundColor = color; - - chart.chartDescription.enabled = NO; - - chart.drawGridBackgroundEnabled = NO; - chart.dragEnabled = YES; - [chart setScaleEnabled:YES]; - chart.pinchZoomEnabled = NO; - [chart setViewPortOffsetsWithLeft:10.0 top:0.0 right:10.0 bottom:0.0]; - - chart.legend.enabled = NO; - - chart.leftAxis.enabled = NO; - chart.leftAxis.spaceTop = 0.4; - chart.leftAxis.spaceBottom = 0.4; - chart.rightAxis.enabled = NO; - chart.xAxis.enabled = NO; - - chart.data = data; - - [chart animateWithXAxisDuration:2.5]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (LineChartData *)dataWithCount:(int)count range:(double)range -{ - NSMutableArray *yVals = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double val = (double) (arc4random_uniform(range)) + 3; - [yVals addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - LineChartDataSet *set1 = [[LineChartDataSet alloc] initWithEntries:yVals label:@"DataSet 1"]; - - set1.lineWidth = 1.75; - set1.circleRadius = 5.0; - set1.circleHoleRadius = 2.5f; - [set1 setColor:UIColor.whiteColor]; - [set1 setCircleColor:UIColor.whiteColor]; - set1.highlightColor = UIColor.whiteColor; - set1.drawValuesEnabled = NO; - - return [[LineChartData alloc] initWithDataSet:set1]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.h deleted file mode 100644 index c6de2899..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// CombinedChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface CombinedChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.m deleted file mode 100644 index 995c4192..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.m +++ /dev/null @@ -1,324 +0,0 @@ -// -// CombinedChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "CombinedChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -#define ITEM_COUNT 12 - -@interface CombinedChartViewController () -{ - NSArray *months; -} - -@property (nonatomic, strong) IBOutlet CombinedChartView *chartView; - -@end - -@implementation CombinedChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Combined Chart"; - - self.options = @[ - @{@"key": @"toggleLineValues", @"label": @"Toggle Line Values"}, - @{@"key": @"toggleBarValues", @"label": @"Toggle Bar Values"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - @{@"key": @"removeDataSet", @"label": @"Remove random set"}, - ]; - - months = @[ - @"Jan", @"Feb", @"Mar", - @"Apr", @"May", @"Jun", - @"Jul", @"Aug", @"Sep", - @"Oct", @"Nov", @"Dec" - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.drawGridBackgroundEnabled = NO; - _chartView.drawBarShadowEnabled = NO; - _chartView.highlightFullBarEnabled = NO; - - _chartView.drawOrder = @[ - @(CombinedChartDrawOrderBar), - @(CombinedChartDrawOrderBubble), - @(CombinedChartDrawOrderCandle), - @(CombinedChartDrawOrderLine), - @(CombinedChartDrawOrderScatter) - ]; - - ChartLegend *l = _chartView.legend; - l.wordWrapEnabled = YES; - l.horizontalAlignment = ChartLegendHorizontalAlignmentCenter; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - - ChartYAxis *rightAxis = _chartView.rightAxis; - rightAxis.drawGridLinesEnabled = NO; - rightAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.drawGridLinesEnabled = NO; - leftAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBothSided; - xAxis.axisMinimum = 0.0; - xAxis.granularity = 1.0; - xAxis.valueFormatter = self; - - [self updateChartData]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setChartData]; -} - -- (void)setChartData -{ - CombinedChartData *data = [[CombinedChartData alloc] init]; - data.lineData = [self generateLineData]; - data.barData = [self generateBarData]; - data.bubbleData = [self generateBubbleData]; - data.scatterData = [self generateScatterData]; - data.candleData = [self generateCandleData]; - - _chartView.xAxis.axisMaximum = data.xMax + 0.25; - - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleLineValues"]) - { - for (NSObject *set in _chartView.data.dataSets) - { - if ([set isKindOfClass:LineChartDataSet.class]) - { - set.drawValuesEnabled = !set.isDrawValuesEnabled; - } - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleBarValues"]) - { - for (NSObject *set in _chartView.data.dataSets) - { - if ([set isKindOfClass:BarChartDataSet.class]) - { - set.drawValuesEnabled = !set.isDrawValuesEnabled; - } - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"removeDataSet"]) - { - int rnd = (int)arc4random_uniform((float)_chartView.data.dataSetCount); - [_chartView.data removeDataSet:[_chartView.data getDataSetByIndex:rnd]]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - - [super handleOption:key forChartView:_chartView]; -} - -- (LineChartData *)generateLineData -{ - LineChartData *d = [[LineChartData alloc] init]; - - NSMutableArray *entries = [[NSMutableArray alloc] init]; - - for (int index = 0; index < ITEM_COUNT; index++) - { - [entries addObject:[[ChartDataEntry alloc] initWithX:index + 0.5 y:(arc4random_uniform(15) + 5)]]; - } - - LineChartDataSet *set = [[LineChartDataSet alloc] initWithEntries:entries label:@"Line DataSet"]; - [set setColor:[UIColor colorWithRed:240/255.f green:238/255.f blue:70/255.f alpha:1.f]]; - set.lineWidth = 2.5; - [set setCircleColor:[UIColor colorWithRed:240/255.f green:238/255.f blue:70/255.f alpha:1.f]]; - set.circleRadius = 5.0; - set.circleHoleRadius = 2.5; - set.fillColor = [UIColor colorWithRed:240/255.f green:238/255.f blue:70/255.f alpha:1.f]; - set.mode = LineChartModeCubicBezier; - set.drawValuesEnabled = YES; - set.valueFont = [UIFont systemFontOfSize:10.f]; - set.valueTextColor = [UIColor colorWithRed:240/255.f green:238/255.f blue:70/255.f alpha:1.f]; - - set.axisDependency = AxisDependencyLeft; - - [d addDataSet:set]; - - return d; -} - -- (BarChartData *)generateBarData -{ - NSMutableArray *entries1 = [[NSMutableArray alloc] init]; - NSMutableArray *entries2 = [[NSMutableArray alloc] init]; - - for (int index = 0; index < ITEM_COUNT; index++) - { - [entries1 addObject:[[BarChartDataEntry alloc] initWithX:0.0 y:(arc4random_uniform(25) + 25)]]; - - // stacked - [entries2 addObject:[[BarChartDataEntry alloc] initWithX:0.0 yValues:@[@(arc4random_uniform(13) + 12), @(arc4random_uniform(13) + 12)]]]; - } - - BarChartDataSet *set1 = [[BarChartDataSet alloc] initWithEntries:entries1 label:@"Bar 1"]; - [set1 setColor:[UIColor colorWithRed:60/255.f green:220/255.f blue:78/255.f alpha:1.f]]; - set1.valueTextColor = [UIColor colorWithRed:60/255.f green:220/255.f blue:78/255.f alpha:1.f]; - set1.valueFont = [UIFont systemFontOfSize:10.f]; - set1.axisDependency = AxisDependencyRight; - - BarChartDataSet *set2 = [[BarChartDataSet alloc] initWithEntries:entries2 label:@""]; - set2.stackLabels = @[@"Stack 1", @"Stack 2"]; - set2.colors = @[ - [UIColor colorWithRed:61/255.f green:165/255.f blue:255/255.f alpha:1.f], - [UIColor colorWithRed:23/255.f green:197/255.f blue:255/255.f alpha:1.f] - ]; - set2.valueTextColor = [UIColor colorWithRed:61/255.f green:165/255.f blue:255/255.f alpha:1.f]; - set2.valueFont = [UIFont systemFontOfSize:10.f]; - set2.axisDependency = AxisDependencyRight; - - float groupSpace = 0.06f; - float barSpace = 0.02f; // x2 dataset - float barWidth = 0.45f; // x2 dataset - // (0.45 + 0.02) * 2 + 0.06 = 1.00 -> interval per "group" - - BarChartData *d = [[BarChartData alloc] initWithDataSets:@[set1, set2]]; - d.barWidth = barWidth; - - // make this BarData object grouped - [d groupBarsFromX:0.0 groupSpace:groupSpace barSpace:barSpace]; // start at x = 0 - - return d; -} - -- (ScatterChartData *)generateScatterData -{ - ScatterChartData *d = [[ScatterChartData alloc] init]; - - NSMutableArray *entries = [[NSMutableArray alloc] init]; - - for (double index = 0; index < ITEM_COUNT; index += 0.5) - { - [entries addObject:[[ChartDataEntry alloc] initWithX:index + 0.25 y:(arc4random_uniform(10) + 55)]]; - } - - ScatterChartDataSet *set = [[ScatterChartDataSet alloc] initWithEntries:entries label:@"Scatter DataSet"]; - set.colors = ChartColorTemplates.material; - set.scatterShapeSize = 4.5; - [set setDrawValuesEnabled:NO]; - set.valueFont = [UIFont systemFontOfSize:10.f]; - - [d addDataSet:set]; - - return d; -} - -- (CandleChartData *)generateCandleData -{ - CandleChartData *d = [[CandleChartData alloc] init]; - - NSMutableArray *entries = [[NSMutableArray alloc] init]; - - for (int index = 0; index < ITEM_COUNT; index += 2) - { - [entries addObject:[[CandleChartDataEntry alloc] initWithX:index + 1 shadowH:90.0 shadowL:70.0 open:85.0 close:75.0]]; - } - - CandleChartDataSet *set = [[CandleChartDataSet alloc] initWithEntries:entries label:@"Candle DataSet"]; - [set setColor:[UIColor colorWithRed:80/255.f green:80/255.f blue:80/255.f alpha:1.f]]; - set.decreasingColor = [UIColor colorWithRed:142/255.0 green:150/255.0 blue:175/255.0 alpha:1.0]; - set.shadowColor = UIColor.darkGrayColor; - set.valueFont = [UIFont systemFontOfSize:10.f]; - [set setDrawValuesEnabled:NO]; - - [d addDataSet:set]; - - return d; -} - -- (BubbleChartData *)generateBubbleData -{ - BubbleChartData *bd = [[BubbleChartData alloc] init]; - - NSMutableArray *entries = [[NSMutableArray alloc] init]; - - for (int index = 0; index < ITEM_COUNT; index++) - { - double y = arc4random_uniform(10) + 105.0; - double size = arc4random_uniform(50) + 105.0; - [entries addObject:[[BubbleChartDataEntry alloc] initWithX:index + 0.5 y:y size:size]]; - } - - BubbleChartDataSet *set = [[BubbleChartDataSet alloc] initWithEntries:entries label:@"Bubble DataSet"]; - [set setColors:ChartColorTemplates.vordiplom]; - set.valueTextColor = UIColor.whiteColor; - set.valueFont = [UIFont systemFontOfSize:10.f]; - [set setDrawValuesEnabled:YES]; - - [bd addDataSet:set]; - - return bd; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -#pragma mark - IAxisValueFormatter - -- (NSString *)stringForValue:(double)value - axis:(ChartAxisBase *)axis -{ - return months[(int)value % months.count]; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.h deleted file mode 100644 index 658570aa..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// CubicLineChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface CubicLineChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.m deleted file mode 100644 index 0d590fbf..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.m +++ /dev/null @@ -1,238 +0,0 @@ -// -// CubicLineChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "CubicLineChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface CubicLineSampleFillFormatter : NSObject -{ -} -@end - -@implementation CubicLineSampleFillFormatter - -- (CGFloat)getFillLinePositionWithDataSet:(LineChartDataSet *)dataSet dataProvider:(id)dataProvider -{ - return -10.f; -} - -@end - -@interface CubicLineChartViewController () - -@property (nonatomic, strong) IBOutlet LineChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation CubicLineChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Cubic Line Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleFilled", @"label": @"Toggle Filled"}, - @{@"key": @"toggleCircles", @"label": @"Toggle Circles"}, - @{@"key": @"toggleCubic", @"label": @"Toggle Cubic"}, - @{@"key": @"toggleHorizontalCubic", @"label": @"Toggle Horizontal Cubic"}, - @{@"key": @"toggleStepped", @"label": @"Toggle Stepped"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - [_chartView setViewPortOffsetsWithLeft:0.f top:20.f right:0.f bottom:0.f]; - _chartView.backgroundColor = [UIColor colorWithRed:104/255.f green:241/255.f blue:175/255.f alpha:1.f]; - - _chartView.chartDescription.enabled = NO; - - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.pinchZoomEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - _chartView.maxHighlightDistance = 300.0; - - _chartView.xAxis.enabled = NO; - - ChartYAxis *yAxis = _chartView.leftAxis; - yAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:12.f]; - [yAxis setLabelCount:6 force:NO]; - yAxis.labelTextColor = UIColor.whiteColor; - yAxis.labelPosition = YAxisLabelPositionInsideChart; - yAxis.drawGridLinesEnabled = NO; - yAxis.axisLineColor = UIColor.whiteColor; - - _chartView.rightAxis.enabled = NO; - _chartView.legend.enabled = NO; - - _sliderX.value = 45.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithXAxisDuration:2.0 yAxisDuration:2.0]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals1 = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double mult = (range + 1); - double val = (double) (arc4random_uniform(mult)) + 20; - [yVals1 addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - LineChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (LineChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries:yVals1]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[LineChartDataSet alloc] initWithEntries:yVals1 label:@"DataSet 1"]; - set1.mode = LineChartModeCubicBezier; - set1.cubicIntensity = 0.2; - set1.drawCirclesEnabled = NO; - set1.lineWidth = 1.8; - set1.circleRadius = 4.0; - [set1 setCircleColor:UIColor.whiteColor]; - set1.highlightColor = [UIColor colorWithRed:244/255.f green:117/255.f blue:117/255.f alpha:1.f]; - [set1 setColor:UIColor.whiteColor]; - set1.fillColor = UIColor.whiteColor; - set1.fillAlpha = 1.f; - set1.drawHorizontalHighlightIndicatorEnabled = NO; - set1.fillFormatter = [[CubicLineSampleFillFormatter alloc] init]; - - LineChartData *data = [[LineChartData alloc] initWithDataSet:set1]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:9.f]]; - [data setDrawValues:NO]; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleFilled"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawFilledEnabled = !set.isDrawFilledEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCircles"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawCirclesEnabled = !set.isDrawCirclesEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeLinear : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleStepped"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeStepped ? LineChartModeLinear : LineChartModeStepped; - } - - [_chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleHorizontalCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeHorizontalBezier : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.h deleted file mode 100644 index 5f3ab1b1..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// HalfPieChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface HalfPieChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.m deleted file mode 100644 index e66840c4..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.m +++ /dev/null @@ -1,202 +0,0 @@ -// -// HalfPieChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "HalfPieChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface HalfPieChartViewController () - -@property (nonatomic, strong) IBOutlet PieChartView *chartView; - -@end - -@implementation HalfPieChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Half Pie Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Y-Values"}, - @{@"key": @"toggleXValues", @"label": @"Toggle X-Values"}, - @{@"key": @"togglePercent", @"label": @"Toggle Percent"}, - @{@"key": @"toggleHole", @"label": @"Toggle Hole"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"spin", @"label": @"Spin"}, - @{@"key": @"drawCenter", @"label": @"Draw CenterText"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - [self setupPieChartView:_chartView]; - - _chartView.delegate = self; - - _chartView.holeColor = UIColor.whiteColor; - _chartView.transparentCircleColor = [UIColor.whiteColor colorWithAlphaComponent:0.43]; - _chartView.holeRadiusPercent = 0.58; - _chartView.rotationEnabled = NO; - _chartView.highlightPerTapEnabled = YES; - - _chartView.maxAngle = 180.0; // Half chart - _chartView.rotationAngle = 180.0; // Rotate to make the half on the upper side - _chartView.centerTextOffset = CGPointMake(0.0, -20.0); - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentCenter; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.xEntrySpace = 7.0; - l.yEntrySpace = 0.0; - l.yOffset = 0.0; - - // entry label styling - _chartView.entryLabelColor = UIColor.whiteColor; - _chartView.entryLabelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:12.f]; - - [self updateChartData]; - - [_chartView animateWithXAxisDuration:1.4 easingOption:ChartEasingOptionEaseOutBack]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:4 range:100]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - double mult = range; - - NSMutableArray *values = [[NSMutableArray alloc] init]; - - // IMPORTANT: In a PieChart, no values (Entry) should have the same xIndex (even if from different DataSets), since no values can be drawn above each other. - for (int i = 0; i < count; i++) - { - [values addObject:[[PieChartDataEntry alloc] initWithValue:(arc4random_uniform(mult) + mult / 5) label:parties[i % parties.count]]]; - } - - PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithEntries:values label:@"Election Results"]; - dataSet.sliceSpace = 3.0; - dataSet.selectionShift = 5.0; - - dataSet.colors = ChartColorTemplates.material; - - PieChartData *data = [[PieChartData alloc] initWithDataSet:dataSet]; - - NSNumberFormatter *pFormatter = [[NSNumberFormatter alloc] init]; - pFormatter.numberStyle = NSNumberFormatterPercentStyle; - pFormatter.maximumFractionDigits = 1; - pFormatter.multiplier = @1.f; - pFormatter.percentSymbol = @" %"; - [data setValueFormatter:[[ChartDefaultValueFormatter alloc] initWithFormatter:pFormatter]]; - - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:11.f]]; - [data setValueTextColor:UIColor.whiteColor]; - - _chartView.data = data; - - [_chartView setNeedsDisplay]; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleXValues"]) - { - _chartView.drawEntryLabelsEnabled = !_chartView.drawEntryLabelsEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"togglePercent"]) - { - _chartView.usePercentValuesEnabled = !_chartView.isUsePercentValuesEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleHole"]) - { - _chartView.drawHoleEnabled = !_chartView.isDrawHoleEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"drawCenter"]) - { - _chartView.drawCenterTextEnabled = !_chartView.isDrawCenterTextEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"animateX"]) - { - [_chartView animateWithXAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateY"]) - { - [_chartView animateWithYAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateXY"]) - { - [_chartView animateWithXAxisDuration:1.4 yAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"spin"]) - { - [_chartView spinWithDuration:2.0 fromAngle:_chartView.rotationAngle toAngle:_chartView.rotationAngle + 360.f easingOption:ChartEasingOptionEaseInCubic]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Action - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.h deleted file mode 100644 index 4db77ab9..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// HorizontalBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface HorizontalBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.m deleted file mode 100644 index 54899281..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.m +++ /dev/null @@ -1,178 +0,0 @@ -// -// HorizontalBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "HorizontalBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface HorizontalBarChartViewController () - -@property (nonatomic, strong) IBOutlet HorizontalBarChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation HorizontalBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Horizontal Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - [self setupBarLineChartView:_chartView]; - - _chartView.delegate = self; - - _chartView.drawBarShadowEnabled = NO; - _chartView.drawValueAboveBarEnabled = YES; - - _chartView.maxVisibleCount = 60; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - xAxis.labelFont = [UIFont systemFontOfSize:10.f]; - xAxis.drawAxisLineEnabled = YES; - xAxis.drawGridLinesEnabled = NO; - xAxis.granularity = 10.0; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelFont = [UIFont systemFontOfSize:10.f]; - leftAxis.drawAxisLineEnabled = YES; - leftAxis.drawGridLinesEnabled = YES; - leftAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - ChartYAxis *rightAxis = _chartView.rightAxis; - rightAxis.enabled = YES; - rightAxis.labelFont = [UIFont systemFontOfSize:10.f]; - rightAxis.drawAxisLineEnabled = YES; - rightAxis.drawGridLinesEnabled = NO; - rightAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentLeft; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.form = ChartLegendFormSquare; - l.formSize = 8.0; - l.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:11.f]; - l.xEntrySpace = 4.0; - - _chartView.fitBars = YES; - - _sliderX.value = 12.0; - _sliderY.value = 50.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithYAxisDuration:2.5]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - double barWidth = 9.0; - double spaceForBar = 10.0; - - NSMutableArray *yVals = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double mult = (range + 1); - double val = (double) (arc4random_uniform(mult)); - [yVals addObject:[[BarChartDataEntry alloc] initWithX:i * spaceForBar y:val icon: [UIImage imageNamed:@"icon"]]]; - } - - BarChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (BarChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries:yVals]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[BarChartDataSet alloc] initWithEntries:yVals label:@"DataSet"]; - - set1.drawIconsEnabled = NO; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - - BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]]; - data.barWidth = barWidth; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.h deleted file mode 100644 index 3519fd40..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// LineChart1ViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface LineChart1ViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.m deleted file mode 100644 index 40297feb..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.m +++ /dev/null @@ -1,279 +0,0 @@ -// -// LineChart1ViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "LineChart1ViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface LineChart1ViewController () - -@property (nonatomic, strong) IBOutlet LineChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation LineChart1ViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Line Chart 1"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleFilled", @"label": @"Toggle Filled"}, - @{@"key": @"toggleCircles", @"label": @"Toggle Circles"}, - @{@"key": @"toggleCubic", @"label": @"Toggle Cubic"}, - @{@"key": @"toggleHorizontalCubic", @"label": @"Toggle Horizontal Cubic"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleStepped", @"label": @"Toggle Stepped"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.pinchZoomEnabled = YES; - _chartView.drawGridBackgroundEnabled = NO; - - // x-axis limit line - ChartLimitLine *llXAxis = [[ChartLimitLine alloc] initWithLimit:10.0 label:@"Index 10"]; - llXAxis.lineWidth = 4.0; - llXAxis.lineDashLengths = @[@(10.f), @(10.f), @(0.f)]; - llXAxis.labelPosition = ChartLimitLabelPositionBottomRight; - llXAxis.valueFont = [UIFont systemFontOfSize:10.f]; - - //[_chartView.xAxis addLimitLine:llXAxis]; - - _chartView.xAxis.gridLineDashLengths = @[@10.0, @10.0]; - _chartView.xAxis.gridLineDashPhase = 0.f; - - ChartLimitLine *ll1 = [[ChartLimitLine alloc] initWithLimit:150.0 label:@"Upper Limit"]; - ll1.lineWidth = 4.0; - ll1.lineDashLengths = @[@5.f, @5.f]; - ll1.labelPosition = ChartLimitLabelPositionTopRight; - ll1.valueFont = [UIFont systemFontOfSize:10.0]; - - ChartLimitLine *ll2 = [[ChartLimitLine alloc] initWithLimit:-30.0 label:@"Lower Limit"]; - ll2.lineWidth = 4.0; - ll2.lineDashLengths = @[@5.f, @5.f]; - ll2.labelPosition = ChartLimitLabelPositionBottomRight; - ll2.valueFont = [UIFont systemFontOfSize:10.0]; - - ChartYAxis *leftAxis = _chartView.leftAxis; - [leftAxis removeAllLimitLines]; - [leftAxis addLimitLine:ll1]; - [leftAxis addLimitLine:ll2]; - leftAxis.axisMaximum = 200.0; - leftAxis.axisMinimum = -50.0; - leftAxis.gridLineDashLengths = @[@5.f, @5.f]; - leftAxis.drawZeroLineEnabled = NO; - leftAxis.drawLimitLinesBehindDataEnabled = YES; - - _chartView.rightAxis.enabled = NO; - - //[_chartView.viewPortHandler setMaximumScaleY: 2.f]; - //[_chartView.viewPortHandler setMaximumScaleX: 2.f]; - - BalloonMarker *marker = [[BalloonMarker alloc] - initWithColor: [UIColor colorWithWhite:180/255. alpha:1.0] - font: [UIFont systemFontOfSize:12.0] - textColor: UIColor.whiteColor - insets: UIEdgeInsetsMake(8.0, 8.0, 20.0, 8.0)]; - marker.chartView = _chartView; - marker.minimumSize = CGSizeMake(80.f, 40.f); - _chartView.marker = marker; - - _chartView.legend.form = ChartLegendFormLine; - - _sliderX.value = 45.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithXAxisDuration:2.5]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *values = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double val = arc4random_uniform(range) + 3; - [values addObject:[[ChartDataEntry alloc] initWithX:i y:val icon: [UIImage imageNamed:@"icon"]]]; - } - - LineChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (LineChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries: values]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[LineChartDataSet alloc] initWithEntries:values label:@"DataSet 1"]; - - set1.drawIconsEnabled = NO; - - set1.lineDashLengths = @[@5.f, @2.5f]; - set1.highlightLineDashLengths = @[@5.f, @2.5f]; - [set1 setColor:UIColor.blackColor]; - [set1 setCircleColor:UIColor.blackColor]; - set1.lineWidth = 1.0; - set1.circleRadius = 3.0; - set1.drawCircleHoleEnabled = NO; - set1.valueFont = [UIFont systemFontOfSize:9.f]; - set1.formLineDashLengths = @[@5.f, @2.5f]; - set1.formLineWidth = 1.0; - set1.formSize = 15.0; - - NSArray *gradientColors = @[ - (id)[ChartColorTemplates colorFromString:@"#00ff0000"].CGColor, - (id)[ChartColorTemplates colorFromString:@"#ffff0000"].CGColor - ]; - CGGradientRef gradient = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil); - - set1.fillAlpha = 1.f; - set1.fill = [ChartFill fillWithLinearGradient:gradient angle:90.f]; - set1.drawFilledEnabled = YES; - - CGGradientRelease(gradient); - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - - LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets]; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleFilled"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawFilledEnabled = !set.isDrawFilledEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCircles"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawCirclesEnabled = !set.isDrawCirclesEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeLinear : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleStepped"]) - { - for (id set in _chartView.data.dataSets) - { - switch (set.mode) { - case LineChartModeLinear: - case LineChartModeCubicBezier: - case LineChartModeHorizontalBezier: - set.mode = LineChartModeStepped; - break; - case LineChartModeStepped: set.mode = LineChartModeLinear; - } - } - - [_chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleHorizontalCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeHorizontalBezier ? LineChartModeCubicBezier : LineChartModeHorizontalBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.h deleted file mode 100644 index 0c8e6d37..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// LineChart2ViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface LineChart2ViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.m deleted file mode 100644 index 75eceade..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.m +++ /dev/null @@ -1,296 +0,0 @@ -// -// LineChart2ViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "LineChart2ViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface LineChart2ViewController () - -@property (nonatomic, strong) IBOutlet LineChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation LineChart2ViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Line Chart 2"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleFilled", @"label": @"Toggle Filled"}, - @{@"key": @"toggleCircles", @"label": @"Toggle Circles"}, - @{@"key": @"toggleCubic", @"label": @"Toggle Cubic"}, - @{@"key": @"toggleHorizontalCubic", @"label": @"Toggle Horizontal Cubic"}, - @{@"key": @"toggleStepped", @"label": @"Toggle Stepped"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.drawGridBackgroundEnabled = NO; - _chartView.pinchZoomEnabled = YES; - - _chartView.backgroundColor = [UIColor colorWithWhite:204/255.f alpha:1.f]; - - ChartLegend *l = _chartView.legend; - l.form = ChartLegendFormLine; - l.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:11.f]; - l.textColor = UIColor.whiteColor; - l.horizontalAlignment = ChartLegendHorizontalAlignmentLeft; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelFont = [UIFont systemFontOfSize:11.f]; - xAxis.labelTextColor = UIColor.whiteColor; - xAxis.drawGridLinesEnabled = NO; - xAxis.drawAxisLineEnabled = NO; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelTextColor = [UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]; - leftAxis.axisMaximum = 200.0; - leftAxis.axisMinimum = 0.0; - leftAxis.drawGridLinesEnabled = YES; - leftAxis.drawZeroLineEnabled = NO; - leftAxis.granularityEnabled = YES; - - ChartYAxis *rightAxis = _chartView.rightAxis; - rightAxis.labelTextColor = UIColor.redColor; - rightAxis.axisMaximum = 900.0; - rightAxis.axisMinimum = -200.0; - rightAxis.drawGridLinesEnabled = NO; - rightAxis.granularityEnabled = NO; - - _sliderX.value = 20.0; - _sliderY.value = 30.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithXAxisDuration:2.5]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals1 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals2 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals3 = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double mult = range / 2.0; - double val = (double) (arc4random_uniform(mult)) + 50; - [yVals1 addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - for (int i = 0; i < count - 1; i++) - { - double mult = range; - double val = (double) (arc4random_uniform(mult)) + 450; - [yVals2 addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - for (int i = 0; i < count; i++) - { - double mult = range; - double val = (double) (arc4random_uniform(mult)) + 500; - [yVals3 addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - LineChartDataSet *set1 = nil, *set2 = nil, *set3 = nil; - - if (_chartView.data.dataSetCount > 0) - { - set1 = (LineChartDataSet *)_chartView.data.dataSets[0]; - set2 = (LineChartDataSet *)_chartView.data.dataSets[1]; - set3 = (LineChartDataSet *)_chartView.data.dataSets[2]; - [set1 replaceEntries:yVals1]; - [set2 replaceEntries:yVals2]; - [set3 replaceEntries:yVals3]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[LineChartDataSet alloc] initWithEntries:yVals1 label:@"DataSet 1"]; - set1.axisDependency = AxisDependencyLeft; - [set1 setColor:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]]; - [set1 setCircleColor:UIColor.whiteColor]; - set1.lineWidth = 2.0; - set1.circleRadius = 3.0; - set1.fillAlpha = 65/255.0; - set1.fillColor = [UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]; - set1.highlightColor = [UIColor colorWithRed:244/255.f green:117/255.f blue:117/255.f alpha:1.f]; - set1.drawCircleHoleEnabled = NO; - - set2 = [[LineChartDataSet alloc] initWithEntries:yVals2 label:@"DataSet 2"]; - set2.axisDependency = AxisDependencyRight; - [set2 setColor:UIColor.redColor]; - [set2 setCircleColor:UIColor.whiteColor]; - set2.lineWidth = 2.0; - set2.circleRadius = 3.0; - set2.fillAlpha = 65/255.0; - set2.fillColor = UIColor.redColor; - set2.highlightColor = [UIColor colorWithRed:244/255.f green:117/255.f blue:117/255.f alpha:1.f]; - set2.drawCircleHoleEnabled = NO; - - set3 = [[LineChartDataSet alloc] initWithEntries:yVals3 label:@"DataSet 3"]; - set3.axisDependency = AxisDependencyRight; - [set3 setColor:UIColor.yellowColor]; - [set3 setCircleColor:UIColor.whiteColor]; - set3.lineWidth = 2.0; - set3.circleRadius = 3.0; - set3.fillAlpha = 65/255.0; - set3.fillColor = [UIColor.yellowColor colorWithAlphaComponent:200/255.f]; - set3.highlightColor = [UIColor colorWithRed:244/255.f green:117/255.f blue:117/255.f alpha:1.f]; - set3.drawCircleHoleEnabled = NO; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - [dataSets addObject:set2]; - [dataSets addObject:set3]; - - LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets]; - [data setValueTextColor:UIColor.whiteColor]; - [data setValueFont:[UIFont systemFontOfSize:9.f]]; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleFilled"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawFilledEnabled = !set.isDrawFilledEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCircles"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawCirclesEnabled = !set.isDrawCirclesEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeLinear : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleStepped"]) - { - for (id set in _chartView.data.dataSets) - { - switch (set.mode) { - case LineChartModeLinear: - case LineChartModeCubicBezier: - case LineChartModeHorizontalBezier: - set.mode = LineChartModeStepped; - break; - case LineChartModeStepped: set.mode = LineChartModeLinear; - } - } - - [_chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleHorizontalCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeHorizontalBezier : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); - - [_chartView centerViewToAnimatedWithXValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:highlight.dataSetIndex].axisDependency duration:1.0]; - //[_chartView moveViewToAnimatedWithXValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:dataSetIndex].axisDependency duration:1.0]; - //[_chartView zoomAndCenterViewAnimatedWithScaleX:1.8 scaleY:1.8 xValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:dataSetIndex].axisDependency duration:1.0]; - -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.h deleted file mode 100644 index d62d9443..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// LineChartFilledViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface LineChartFilledViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.m deleted file mode 100644 index f6ec7934..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.m +++ /dev/null @@ -1,178 +0,0 @@ -// -// LineChartFilledViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "LineChartFilledViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface LineChartFilledViewController () - -@property (nonatomic, strong) IBOutlet LineChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation LineChartFilledViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Filled Line Chart"; - - _chartView.delegate = self; - - _chartView.backgroundColor = UIColor.whiteColor; - _chartView.gridBackgroundColor = [UIColor colorWithRed:51/255.0 green:181/255.0 blue:229/255.0 alpha:150/255.0]; - _chartView.drawGridBackgroundEnabled = YES; - - _chartView.drawBordersEnabled = YES; - - _chartView.chartDescription.enabled = NO; - - _chartView.pinchZoomEnabled = NO; - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - - ChartLegend *l = _chartView.legend; - l.enabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.enabled = NO; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.axisMaximum = 900.0; - leftAxis.axisMinimum = -250.0; - leftAxis.drawAxisLineEnabled = NO; - leftAxis.drawZeroLineEnabled = NO; - leftAxis.drawGridLinesEnabled = NO; - - _chartView.rightAxis.enabled = NO; - - _sliderX.value = 100.0; - _sliderY.value = 60.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals1 = [NSMutableArray array]; - NSMutableArray *yVals2 = [NSMutableArray array]; - - for (int i = 0; i < count; i++) - { - double val = arc4random_uniform(range) + 50; - [yVals1 addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - for (int i = 0; i < count; i++) - { - double val = arc4random_uniform(range) + 450; - [yVals2 addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - LineChartDataSet *set1 = nil; - LineChartDataSet *set2 = nil; - - if (_chartView.data.dataSetCount > 0) - { - set1 = (LineChartDataSet *)_chartView.data.dataSets[0]; - set2 = (LineChartDataSet *)_chartView.data.dataSets[1]; - [set1 replaceEntries:yVals1]; - [set2 replaceEntries:yVals2]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[LineChartDataSet alloc] initWithEntries:yVals1 label:@"DataSet 1"]; - set1.axisDependency = AxisDependencyLeft; - [set1 setColor:[UIColor colorWithRed:255/255.0 green:241/255.0 blue:46/255.0 alpha:1.0]]; - set1.drawCirclesEnabled = NO; - set1.lineWidth = 2.0; - set1.circleRadius = 3.0; - set1.fillAlpha = 1.0; - set1.drawFilledEnabled = YES; - set1.fillColor = UIColor.whiteColor; - set1.highlightColor = [UIColor colorWithRed:244/255.0 green:117/255.0 blue:117/255.0 alpha:1.0]; - set1.drawCircleHoleEnabled = NO; - set1.fillFormatter = [ChartDefaultFillFormatter withBlock:^CGFloat(id _Nonnull dataSet, id _Nonnull dataProvider) { - return self.chartView.leftAxis.axisMinimum; - }]; - - set2 = [[LineChartDataSet alloc] initWithEntries:yVals2 label:@"DataSet 2"]; - set2.axisDependency = AxisDependencyLeft; - [set2 setColor:[UIColor colorWithRed:255/255.0 green:241/255.0 blue:46/255.0 alpha:1.0]]; - set2.drawCirclesEnabled = NO; - set2.lineWidth = 2.0; - set2.circleRadius = 3.0; - set2.fillAlpha = 1.0; - set2.drawFilledEnabled = YES; - set2.fillColor = UIColor.whiteColor; - set2.highlightColor = [UIColor colorWithRed:244/255.0 green:117/255.0 blue:117/255.0 alpha:1.0]; - set2.drawCircleHoleEnabled = NO; - set2.fillFormatter = [ChartDefaultFillFormatter withBlock:^CGFloat(id _Nonnull dataSet, id _Nonnull dataProvider) { - return self.chartView.leftAxis.axisMaximum; - }]; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - [dataSets addObject:set2]; - - LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets]; - [data setDrawValues:NO]; - - _chartView.data = data; - } -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.h deleted file mode 100644 index 6edfb1ff..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// LineChartTimeViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface LineChartTimeViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.m deleted file mode 100644 index 06e6808f..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.m +++ /dev/null @@ -1,244 +0,0 @@ -// -// LineChartTimeViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "LineChartTimeViewController.h" -#import "ChartsDemo_iOS-Swift.h" -#import "DateValueFormatter.h" - -@interface LineChartTimeViewController () - -@property (nonatomic, strong) IBOutlet LineChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; - -@end - -@implementation LineChartTimeViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Time Line Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleFilled", @"label": @"Toggle Filled"}, - @{@"key": @"toggleCircles", @"label": @"Toggle Circles"}, - @{@"key": @"toggleCubic", @"label": @"Toggle Cubic"}, - @{@"key": @"toggleHorizontalCubic", @"label": @"Toggle Horizontal Cubic"}, - @{@"key": @"toggleStepped", @"label": @"Toggle Stepped"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.pinchZoomEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - _chartView.highlightPerDragEnabled = YES; - - _chartView.backgroundColor = UIColor.whiteColor; - - _chartView.legend.enabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionTopInside; - xAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - xAxis.labelTextColor = [UIColor colorWithRed:255/255.0 green:192/255.0 blue:56/255.0 alpha:1.0]; - xAxis.drawAxisLineEnabled = NO; - xAxis.drawGridLinesEnabled = YES; - xAxis.centerAxisLabelsEnabled = YES; - xAxis.granularity = 3600.0; - xAxis.valueFormatter = [[DateValueFormatter alloc] init]; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelPosition = YAxisLabelPositionInsideChart; - leftAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:12.f]; - leftAxis.labelTextColor = [UIColor colorWithRed:51/255.0 green:181/255.0 blue:229/255.0 alpha:1.0]; - leftAxis.drawGridLinesEnabled = YES; - leftAxis.granularityEnabled = YES; - leftAxis.axisMinimum = 0.0; - leftAxis.axisMaximum = 170.0; - leftAxis.yOffset = -9.0; - leftAxis.labelTextColor = [UIColor colorWithRed:255/255.0 green:192/255.0 blue:56/255.0 alpha:1.0]; - - _chartView.rightAxis.enabled = NO; - - _chartView.legend.form = ChartLegendFormLine; - - _sliderX.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:30.0]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSTimeInterval now = [[NSDate date] timeIntervalSince1970]; - NSTimeInterval hourSeconds = 3600.0; - - NSMutableArray *values = [[NSMutableArray alloc] init]; - - NSTimeInterval from = now - (count / 2.0) * hourSeconds; - NSTimeInterval to = now + (count / 2.0) * hourSeconds; - - for (NSTimeInterval x = from; x < to; x += hourSeconds) - { - double y = arc4random_uniform(range) + 50; - [values addObject:[[ChartDataEntry alloc] initWithX:x y:y]]; - } - - LineChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (LineChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries: values]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[LineChartDataSet alloc] initWithEntries:values label:@"DataSet 1"]; - set1.axisDependency = AxisDependencyLeft; - set1.valueTextColor = [UIColor colorWithRed:51/255.0 green:181/255.0 blue:229/255.0 alpha:1.0]; - set1.lineWidth = 1.5; - set1.drawCirclesEnabled = NO; - set1.drawValuesEnabled = NO; - set1.fillAlpha = 0.26; - set1.fillColor = [UIColor colorWithRed:51/255.0 green:181/255.0 blue:229/255.0 alpha:1.0]; - set1.highlightColor = [UIColor colorWithRed:224/255.0 green:117/255.0 blue:117/255.0 alpha:1.0]; - set1.drawCircleHoleEnabled = NO; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - - LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets]; - [data setValueTextColor:UIColor.whiteColor]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:9.0]]; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleFilled"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawFilledEnabled = !set.isDrawFilledEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCircles"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawCirclesEnabled = !set.isDrawCirclesEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeLinear : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleStepped"]) - { - for (id set in _chartView.data.dataSets) - { - switch (set.mode) { - case LineChartModeLinear: - case LineChartModeCubicBezier: - case LineChartModeHorizontalBezier: - set.mode = LineChartModeStepped; - break; - case LineChartModeStepped: set.mode = LineChartModeLinear; - } - } - - [_chartView setNeedsDisplay]; - } - - if ([key isEqualToString:@"toggleHorizontalCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeHorizontalBezier : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.h deleted file mode 100644 index 63b820c5..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MultipleBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface MultipleBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.m deleted file mode 100644 index ec748b8d..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.m +++ /dev/null @@ -1,241 +0,0 @@ -// -// MultipleBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "MultipleBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" -#import "IntAxisValueFormatter.h" - -@interface MultipleBarChartViewController () - -@property (nonatomic, strong) IBOutlet BarChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation MultipleBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Multiple Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.pinchZoomEnabled = NO; - _chartView.drawBarShadowEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - - BalloonMarker *marker = [[BalloonMarker alloc] - initWithColor: [UIColor colorWithWhite:180/255. alpha:1.0] - font: [UIFont systemFontOfSize:12.0] - textColor: UIColor.whiteColor - insets: UIEdgeInsetsMake(8.0, 8.0, 20.0, 8.0)]; - marker.chartView = _chartView; - marker.minimumSize = CGSizeMake(80.f, 40.f); - _chartView.marker = marker; - - ChartLegend *legend = _chartView.legend; - legend.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - legend.verticalAlignment = ChartLegendVerticalAlignmentTop; - legend.orientation = ChartLegendOrientationVertical; - legend.drawInside = YES; - legend.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:8.f]; - legend.yOffset = 10.0; - legend.xOffset = 10.0; - legend.yEntrySpace = 0.0; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - xAxis.granularity = 1.f; - xAxis.centerAxisLabelsEnabled = YES; - xAxis.valueFormatter = [[IntAxisValueFormatter alloc] init]; - - NSNumberFormatter *leftAxisFormatter = [[NSNumberFormatter alloc] init]; - leftAxisFormatter.maximumFractionDigits = 1; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - leftAxis.valueFormatter = [[LargeValueFormatter alloc] init]; - leftAxis.drawGridLinesEnabled = NO; - leftAxis.spaceTop = 0.35; - leftAxis.axisMinimum = 0; - - _chartView.rightAxis.enabled = NO; - - _sliderX.value = 10.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - float groupSpace = 0.08f; - float barSpace = 0.03f; - float barWidth = 0.2f; - // (0.2 + 0.03) * 4 + 0.08 = 1.00 -> interval per "group" - - NSMutableArray *yVals1 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals2 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals3 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals4 = [[NSMutableArray alloc] init]; - - double randomMultiplier = range * 100000.f; - - int groupCount = count + 1; - int startYear = 1980; - int endYear = startYear + groupCount; - - for (int i = startYear; i < endYear; i++) - { - [yVals1 addObject:[[BarChartDataEntry alloc] - initWithX:i - y:(double) (arc4random_uniform(randomMultiplier))]]; - - [yVals2 addObject:[[BarChartDataEntry alloc] - initWithX:i - y:(double) (arc4random_uniform(randomMultiplier))]]; - - [yVals3 addObject:[[BarChartDataEntry alloc] - initWithX:i - y:(double) (arc4random_uniform(randomMultiplier))]]; - - [yVals4 addObject:[[BarChartDataEntry alloc] - initWithX:i - y:(double) (arc4random_uniform(randomMultiplier))]]; - } - - BarChartDataSet *set1 = nil, *set2 = nil, *set3 = nil, *set4 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (BarChartDataSet *)_chartView.data.dataSets[0]; - set2 = (BarChartDataSet *)_chartView.data.dataSets[1]; - set3 = (BarChartDataSet *)_chartView.data.dataSets[2]; - set4 = (BarChartDataSet *)_chartView.data.dataSets[3]; - [set1 replaceEntries:yVals1]; - [set2 replaceEntries:yVals2]; - [set3 replaceEntries:yVals3]; - [set4 replaceEntries:yVals4]; - - BarChartData *data = _chartView.barData; - - _chartView.xAxis.axisMinimum = startYear; - _chartView.xAxis.axisMaximum = [data groupWidthWithGroupSpace:groupSpace barSpace: barSpace] * _sliderX.value + startYear; - [data groupBarsFromX: startYear groupSpace: groupSpace barSpace: barSpace]; - - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[BarChartDataSet alloc] initWithEntries:yVals1 label:@"Company A"]; - [set1 setColor:[UIColor colorWithRed:104/255.f green:241/255.f blue:175/255.f alpha:1.f]]; - - set2 = [[BarChartDataSet alloc] initWithEntries:yVals2 label:@"Company B"]; - [set2 setColor:[UIColor colorWithRed:164/255.f green:228/255.f blue:251/255.f alpha:1.f]]; - - set3 = [[BarChartDataSet alloc] initWithEntries:yVals3 label:@"Company C"]; - [set3 setColor:[UIColor colorWithRed:242/255.f green:247/255.f blue:158/255.f alpha:1.f]]; - - set4 = [[BarChartDataSet alloc] initWithEntries:yVals4 label:@"Company D"]; - [set4 setColor:[UIColor colorWithRed:255/255.f green:102/255.f blue:0/255.f alpha:1.f]]; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - [dataSets addObject:set2]; - [dataSets addObject:set3]; - [dataSets addObject:set4]; - - BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]]; - [data setValueFormatter:[[LargeValueFormatter alloc] init]]; - - // specify the width each bar should have - data.barWidth = barWidth; - - // restrict the x-axis range - _chartView.xAxis.axisMinimum = startYear; - - // groupWidthWithGroupSpace(...) is a helper that calculates the width each group needs based on the provided parameters - _chartView.xAxis.axisMaximum = startYear + [data groupWidthWithGroupSpace:groupSpace barSpace: barSpace] * groupCount; - - [data groupBarsFromX: startYear groupSpace: groupSpace barSpace: barSpace]; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - int startYear = 1980; - int endYear = startYear + _sliderX.value; - - _sliderTextX.text = [NSString stringWithFormat:@"%d-%d", startYear, endYear]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.h deleted file mode 100644 index f2cc35ab..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MultipleLinesChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface MultipleLinesChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.m deleted file mode 100644 index 358a7e21..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.m +++ /dev/null @@ -1,206 +0,0 @@ -// -// MultipleLinesChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "MultipleLinesChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface MultipleLinesChartViewController () - -@property (nonatomic, strong) IBOutlet LineChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation MultipleLinesChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Multiple Lines Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleFilled", @"label": @"Toggle Filled"}, - @{@"key": @"toggleCircles", @"label": @"Toggle Circles"}, - @{@"key": @"toggleCubic", @"label": @"Toggle Cubic"}, - @{@"key": @"toggleStepped", @"label": @"Toggle Stepped"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.leftAxis.enabled = NO; - _chartView.rightAxis.drawAxisLineEnabled = NO; - _chartView.rightAxis.drawGridLinesEnabled = NO; - _chartView.xAxis.drawAxisLineEnabled = NO; - _chartView.xAxis.drawGridLinesEnabled = NO; - - _chartView.drawGridBackgroundEnabled = NO; - _chartView.drawBordersEnabled = NO; - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.pinchZoomEnabled = NO; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationVertical; - l.drawInside = NO; - - _sliderX.value = 20.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSArray *colors = @[ChartColorTemplates.vordiplom[0], ChartColorTemplates.vordiplom[1], ChartColorTemplates.vordiplom[2]]; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - - for (int z = 0; z < 3; z++) - { - NSMutableArray *values = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double val = (double) (arc4random_uniform(range) + 3); - [values addObject:[[ChartDataEntry alloc] initWithX:i y:val]]; - } - - LineChartDataSet *d = [[LineChartDataSet alloc] initWithEntries:values label:[NSString stringWithFormat:@"DataSet %d", z + 1]]; - d.lineWidth = 2.5; - d.circleRadius = 4.0; - d.circleHoleRadius = 2.0; - - UIColor *color = colors[z % colors.count]; - [d setColor:color]; - [d setCircleColor:color]; - [dataSets addObject:d]; - } - - ((LineChartDataSet *)dataSets[0]).lineDashLengths = @[@5.f, @5.f]; - ((LineChartDataSet *)dataSets[0]).colors = ChartColorTemplates.vordiplom; - ((LineChartDataSet *)dataSets[0]).circleColors = ChartColorTemplates.vordiplom; - - LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]]; - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleFilled"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawFilledEnabled = !set.isDrawFilledEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCircles"]) - { - for (id set in _chartView.data.dataSets) - { - set.drawCirclesEnabled = !set.isDrawCirclesEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleCubic"]) - { - for (id set in _chartView.data.dataSets) - { - set.mode = set.mode == LineChartModeCubicBezier ? LineChartModeLinear : LineChartModeCubicBezier; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleStepped"]) - { - for (id set in _chartView.data.dataSets) - { - switch (set.mode) { - case LineChartModeLinear: - case LineChartModeCubicBezier: - case LineChartModeHorizontalBezier: - set.mode = LineChartModeStepped; - break; - case LineChartModeStepped: set.mode = LineChartModeLinear; - } - } - - [_chartView setNeedsDisplay]; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.h deleted file mode 100644 index 610c3ecd..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// NegativeStackedBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface NegativeStackedBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.m deleted file mode 100644 index b87ef62a..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.m +++ /dev/null @@ -1,195 +0,0 @@ -// -// NegativeStackedBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "NegativeStackedBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface NegativeStackedBarChartViewController () - -@property (nonatomic, strong) IBOutlet HorizontalBarChartView *chartView; - -@end - -@implementation NegativeStackedBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Stacked Bar Chart Negative"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - NSNumberFormatter *customFormatter = [[NSNumberFormatter alloc] init]; - customFormatter.negativePrefix = @""; - customFormatter.positiveSuffix = @"m"; - customFormatter.negativeSuffix = @"m"; - customFormatter.minimumSignificantDigits = 1; - customFormatter.minimumFractionDigits = 1; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.drawBarShadowEnabled = NO; - _chartView.drawValueAboveBarEnabled = YES; - _chartView.highlightFullBarEnabled = NO; - - // scaling can now only be done on x- and y-axis separately - _chartView.pinchZoomEnabled = NO; - - _chartView.drawBarShadowEnabled = NO; - - _chartView.leftAxis.enabled = NO; - _chartView.rightAxis.axisMaximum = 25.0; - _chartView.rightAxis.axisMinimum = -25.0; - _chartView.rightAxis.drawGridLinesEnabled = NO; - _chartView.rightAxis.drawZeroLineEnabled = YES; - _chartView.rightAxis.labelCount = 7; - _chartView.rightAxis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:customFormatter]; - _chartView.rightAxis.labelFont = [UIFont systemFontOfSize:9.f]; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBothSided; - xAxis.drawGridLinesEnabled = NO; - xAxis.drawAxisLineEnabled = NO; - xAxis.axisMinimum = 0.0; - xAxis.axisMaximum = 110.0; - xAxis.centerAxisLabelsEnabled = YES; - xAxis.labelCount = 12; - xAxis.granularity = 10.0; - xAxis.valueFormatter = self; - - _chartView.rightAxis.labelFont = [UIFont systemFontOfSize:9.f]; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.formSize = 8.f; - l.formToTextSpace = 4.f; - l.xEntrySpace = 6.f; - - [self updateChartData]; -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setChartData]; -} - -- (void)setChartData -{ - NSMutableArray *yValues = [NSMutableArray array]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:5 yValues:@[ @-10, @10 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:15 yValues:@[ @-12, @13 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:25 yValues:@[ @-15, @15 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:35 yValues:@[ @-17, @17 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:45 yValues:@[ @-19, @20 ] icon: [UIImage imageNamed:@"icon"]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:55 yValues:@[ @-19, @19 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:65 yValues:@[ @-16, @16 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:75 yValues:@[ @-13, @14 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:85 yValues:@[ @-10, @11 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:95 yValues:@[ @-5, @6 ]]]; - [yValues addObject:[[BarChartDataEntry alloc] initWithX:105 yValues:@[ @-1, @2 ]]]; - - BarChartDataSet *set = nil; - if (_chartView.data.dataSetCount > 0) - { - set = (BarChartDataSet *)_chartView.data.dataSets[0]; - [set replaceEntries: yValues]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - NSNumberFormatter *customFormatter = [[NSNumberFormatter alloc] init]; - customFormatter.negativePrefix = @""; - customFormatter.positiveSuffix = @"m"; - customFormatter.negativeSuffix = @"m"; - customFormatter.minimumSignificantDigits = 1; - customFormatter.minimumFractionDigits = 1; - - set = [[BarChartDataSet alloc] initWithEntries:yValues label:@"Age Distribution"]; - - set.drawIconsEnabled = NO; - - set.valueFormatter = [[ChartDefaultValueFormatter alloc] initWithFormatter:customFormatter]; - set.valueFont = [UIFont systemFontOfSize:7.f]; - set.axisDependency = AxisDependencyRight; - set.colors = @[ - [UIColor colorWithRed:67/255.f green:67/255.f blue:72/255.f alpha:1.f], - [UIColor colorWithRed:124/255.f green:181/255.f blue:236/255.f alpha:1.f] - ]; - set.stackLabels = @[ - @"Men", @"Women" - ]; - - BarChartData *data = [[BarChartData alloc] initWithDataSet:set]; - - data.barWidth = 8.5; - - _chartView.data = data; - [_chartView setNeedsDisplay]; - } -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected, stack-index %ld", (long)highlight.stackIndex); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -#pragma mark - IAxisValueFormatter - -- (NSString *)stringForValue:(double)value - axis:(ChartAxisBase *)axis -{ - return [NSString stringWithFormat:@"%03.0f-%03.0f", value, value + 10.0]; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.h deleted file mode 100644 index 098d12b7..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PieChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface PieChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.m deleted file mode 100644 index 5bc3a9d6..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.m +++ /dev/null @@ -1,217 +0,0 @@ -// -// PieChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "PieChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface PieChartViewController () - -@property (nonatomic, strong) IBOutlet PieChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation PieChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Pie Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Y-Values"}, - @{@"key": @"toggleXValues", @"label": @"Toggle X-Values"}, - @{@"key": @"togglePercent", @"label": @"Toggle Percent"}, - @{@"key": @"toggleHole", @"label": @"Toggle Hole"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"spin", @"label": @"Spin"}, - @{@"key": @"drawCenter", @"label": @"Draw CenterText"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - [self setupPieChartView:_chartView]; - - _chartView.delegate = self; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationVertical; - l.drawInside = NO; - l.xEntrySpace = 7.0; - l.yEntrySpace = 0.0; - l.yOffset = 0.0; - - // entry label styling - _chartView.entryLabelColor = UIColor.whiteColor; - _chartView.entryLabelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:12.f]; - - _sliderX.value = 4.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithXAxisDuration:1.4 easingOption:ChartEasingOptionEaseOutBack]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - double mult = range; - - NSMutableArray *values = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - [values addObject:[[PieChartDataEntry alloc] initWithValue:(arc4random_uniform(mult) + mult / 5) label:parties[i % parties.count] icon: [UIImage imageNamed:@"icon"]]]; - } - - PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithEntries:values label:@"Election Results"]; - - dataSet.drawIconsEnabled = NO; - - dataSet.sliceSpace = 2.0; - dataSet.iconsOffset = CGPointMake(0, 40); - - // add a lot of colors - - NSMutableArray *colors = [[NSMutableArray alloc] init]; - [colors addObjectsFromArray:ChartColorTemplates.vordiplom]; - [colors addObjectsFromArray:ChartColorTemplates.joyful]; - [colors addObjectsFromArray:ChartColorTemplates.colorful]; - [colors addObjectsFromArray:ChartColorTemplates.liberty]; - [colors addObjectsFromArray:ChartColorTemplates.pastel]; - [colors addObject:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]]; - - dataSet.colors = colors; - - PieChartData *data = [[PieChartData alloc] initWithDataSet:dataSet]; - - NSNumberFormatter *pFormatter = [[NSNumberFormatter alloc] init]; - pFormatter.numberStyle = NSNumberFormatterPercentStyle; - pFormatter.maximumFractionDigits = 1; - pFormatter.multiplier = @1.f; - pFormatter.percentSymbol = @" %"; - [data setValueFormatter:[[ChartDefaultValueFormatter alloc] initWithFormatter:pFormatter]]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:11.f]]; - [data setValueTextColor:UIColor.whiteColor]; - - _chartView.data = data; - [_chartView highlightValues:nil]; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleXValues"]) - { - _chartView.drawEntryLabelsEnabled = !_chartView.drawEntryLabelsEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"togglePercent"]) - { - _chartView.usePercentValuesEnabled = !_chartView.isUsePercentValuesEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleHole"]) - { - _chartView.drawHoleEnabled = !_chartView.isDrawHoleEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"drawCenter"]) - { - _chartView.drawCenterTextEnabled = !_chartView.isDrawCenterTextEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"animateX"]) - { - [_chartView animateWithXAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateY"]) - { - [_chartView animateWithYAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateXY"]) - { - [_chartView animateWithXAxisDuration:1.4 yAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"spin"]) - { - [_chartView spinWithDuration:2.0 fromAngle:_chartView.rotationAngle toAngle:_chartView.rotationAngle + 360.f easingOption:ChartEasingOptionEaseInCubic]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.h deleted file mode 100644 index 1ee0f4d1..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// PiePolylineChartViewController.h -// ChartsDemo -// -// Created by Jack Wang on 3/21/16. -// Copyright © 2016 Jack Wang -// - -#import "PieChartViewController.h" - -@interface PiePolylineChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.m deleted file mode 100644 index 81f092e9..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.m +++ /dev/null @@ -1,205 +0,0 @@ -// -// PiePolylineChartViewController.h -// ChartsDemo -// -// Created by Jack Wang on 3/21/16. -// Copyright © 2016 Jack Wang -// - -#import "PiePolylineChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface PiePolylineChartViewController () - -@property (nonatomic, strong) IBOutlet PieChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; -@end - -@implementation PiePolylineChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Pie Poly Line Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Y-Values"}, - @{@"key": @"toggleXValues", @"label": @"Toggle X-Values"}, - @{@"key": @"togglePercent", @"label": @"Toggle Percent"}, - @{@"key": @"toggleHole", @"label": @"Toggle Hole"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"spin", @"label": @"Spin"}, - @{@"key": @"drawCenter", @"label": @"Draw CenterText"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - [self setupPieChartView:_chartView]; - - _chartView.legend.enabled = NO; - _chartView.delegate = self; - - [_chartView setExtraOffsetsWithLeft:20.f top:0.f right:20.f bottom:0.f]; - - _sliderX.value = 4.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithYAxisDuration:1.4 easingOption:ChartEasingOptionEaseOutBack]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - double mult = range; - - NSMutableArray *entries = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - [entries addObject:[[PieChartDataEntry alloc] initWithValue:(arc4random_uniform(mult) + mult / 5) label:parties[i % parties.count]]]; - } - - PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithEntries:entries label:@"Election Results"]; - dataSet.sliceSpace = 2.0; - - // add a lot of colors - - NSMutableArray *colors = [[NSMutableArray alloc] init]; - [colors addObjectsFromArray:ChartColorTemplates.vordiplom]; - [colors addObjectsFromArray:ChartColorTemplates.joyful]; - [colors addObjectsFromArray:ChartColorTemplates.colorful]; - [colors addObjectsFromArray:ChartColorTemplates.liberty]; - [colors addObjectsFromArray:ChartColorTemplates.pastel]; - [colors addObject:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]]; - - dataSet.colors = colors; - - dataSet.valueLinePart1OffsetPercentage = 0.8; - dataSet.valueLinePart1Length = 0.2; - dataSet.valueLinePart2Length = 0.4; - //dataSet.xValuePosition = PieChartValuePositionOutsideSlice; - dataSet.yValuePosition = PieChartValuePositionOutsideSlice; - - PieChartData *data = [[PieChartData alloc] initWithDataSet:dataSet]; - - NSNumberFormatter *pFormatter = [[NSNumberFormatter alloc] init]; - pFormatter.numberStyle = NSNumberFormatterPercentStyle; - pFormatter.maximumFractionDigits = 1; - pFormatter.multiplier = @1.f; - pFormatter.percentSymbol = @" %"; - [data setValueFormatter:[[ChartDefaultValueFormatter alloc] initWithFormatter:pFormatter]]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:11.f]]; - [data setValueTextColor:UIColor.blackColor]; - - _chartView.data = data; - [_chartView highlightValues:nil]; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleXValues"]) - { - _chartView.drawEntryLabelsEnabled = !_chartView.isDrawEntryLabelsEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"togglePercent"]) - { - _chartView.usePercentValuesEnabled = !_chartView.isUsePercentValuesEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleHole"]) - { - _chartView.drawHoleEnabled = !_chartView.isDrawHoleEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"drawCenter"]) - { - _chartView.drawCenterTextEnabled = !_chartView.isDrawCenterTextEnabled; - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"animateX"]) - { - [_chartView animateWithXAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateY"]) - { - [_chartView animateWithYAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateXY"]) - { - [_chartView animateWithXAxisDuration:1.4 yAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"spin"]) - { - [_chartView spinWithDuration:2.0 fromAngle:_chartView.rotationAngle toAngle:_chartView.rotationAngle + 360.f]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end - diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.h deleted file mode 100644 index a566badb..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// PositiveNegativeBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface PositiveNegativeBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.m deleted file mode 100644 index 2440fe9e..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.m +++ /dev/null @@ -1,194 +0,0 @@ -// -// PositiveNegativeBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "PositiveNegativeBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface PositiveNegativeBarChartViewController () -{ - NSArray *dataList; -} - -@property (nonatomic, strong) IBOutlet BarChartView *chartView; - -@end - -@implementation PositiveNegativeBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Positive/Negative Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - [self setupBarLineChartView:_chartView]; - - _chartView.delegate = self; - - _chartView.extraTopOffset = -30.f; - _chartView.extraBottomOffset = 10.f; - _chartView.extraLeftOffset = 70.f; - _chartView.extraRightOffset = 70.f; - - _chartView.drawBarShadowEnabled = NO; - _chartView.drawValueAboveBarEnabled = YES; - - _chartView.chartDescription.enabled = NO; - - // scaling can now only be done on x- and y-axis separately - _chartView.pinchZoomEnabled = NO; - - _chartView.drawGridBackgroundEnabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - xAxis.labelFont = [UIFont systemFontOfSize:13.f]; - xAxis.drawGridLinesEnabled = NO; - xAxis.drawAxisLineEnabled = NO; - xAxis.labelTextColor = [UIColor lightGrayColor]; - xAxis.labelCount = 5; - xAxis.centerAxisLabelsEnabled = YES; - xAxis.granularity = 1.0; - xAxis.valueFormatter = self; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.drawLabelsEnabled = NO; - leftAxis.spaceTop = 0.25; - leftAxis.spaceBottom = 0.25; - leftAxis.drawAxisLineEnabled = NO; - leftAxis.drawGridLinesEnabled = NO; - leftAxis.drawZeroLineEnabled = YES; - leftAxis.zeroLineColor = UIColor.grayColor; - leftAxis.zeroLineWidth = 0.7f; - - _chartView.rightAxis.enabled = NO; - _chartView.legend.enabled = NO; - - [self updateChartData]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setChartData]; -} - -- (void)setChartData -{ - // THIS IS THE ORIGINAL DATA YOU WANT TO PLOT - dataList = @[ - @{@"xValue": @(0), - @"yValue": @(-224.1f), - @"xLabel": @"12-19"}, - @{@"xValue": @(1), - @"yValue": @(238.5f), - @"xLabel": @"12-30"}, - @{@"xValue": @(2), - @"yValue": @(1280.1f), - @"xLabel": @"12-31"}, - @{@"xValue": @(3), - @"yValue": @(-442.3f), - @"xLabel": @"01-01"}, - @{@"xValue": @(4), - @"yValue": @(-2280.1f), - @"xLabel": @"01-02"}, - ]; - - NSMutableArray *values = [[NSMutableArray alloc] init]; - NSMutableArray *colors = [[NSMutableArray alloc] init]; - - UIColor *green = [UIColor colorWithRed:110/255.f green:190/255.f blue:102/255.f alpha:1.f]; - UIColor *red = [UIColor colorWithRed:211/255.f green:74/255.f blue:88/255.f alpha:1.f]; - - for (int i = 0; i < dataList.count; i++) - { - NSDictionary *d = dataList[i]; - BarChartDataEntry *entry = [[BarChartDataEntry alloc] initWithX:[d[@"xValue"] doubleValue] y:[d[@"yValue"] doubleValue]]; - [values addObject:entry]; - - // specific colors - if ([d[@"yValue"] doubleValue] >= 0.f) - { - [colors addObject:red]; - } - else - { - [colors addObject:green]; - } - } - - BarChartDataSet *set = set = [[BarChartDataSet alloc] initWithEntries:values label:@"Values"]; - set.colors = colors; - set.valueColors = colors; - - BarChartData *data = [[BarChartData alloc] initWithDataSet:set]; - [data setValueFont:[UIFont systemFontOfSize:13.f]]; - - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - formatter.maximumFractionDigits = 1; - [data setValueFormatter:[[ChartDefaultValueFormatter alloc] initWithFormatter:formatter]]; - - data.barWidth = 0.8; - - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -#pragma mark - IAxisValueFormatter - -- (NSString *)stringForValue:(double)value - axis:(ChartAxisBase *)axis -{ - return dataList[MIN(MAX((int) value, 0), dataList.count - 1)][@"xLabel"]; - -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.h deleted file mode 100644 index b9e13507..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// RadarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface RadarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.m deleted file mode 100644 index 24cfea5b..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.m +++ /dev/null @@ -1,274 +0,0 @@ -// -// RadarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "RadarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface RadarChartViewController () - -@property (nonatomic, strong) IBOutlet RadarChartView *chartView; -@property (nonatomic, strong) NSArray *activities; -@property (nonatomic, strong) UIColor *originalBarBgColor; -@property (nonatomic, strong) UIColor *originalBarTintColor; -@property (nonatomic) UIBarStyle originalBarStyle; - -@end - -@implementation RadarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.activities = @[ @"Burger", @"Steak", @"Salad", @"Pasta", @"Pizza" ]; - - self.title = @"Radar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"toggleHighlightCircle", @"label": @"Toggle highlight circle"}, - @{@"key": @"toggleXLabels", @"label": @"Toggle X-Values"}, - @{@"key": @"toggleYLabels", @"label": @"Toggle Y-Values"}, - @{@"key": @"toggleRotate", @"label": @"Toggle Rotate"}, - @{@"key": @"toggleFill", @"label": @"Toggle Fill"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"spin", @"label": @"Spin"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - _chartView.webLineWidth = 1.0; - _chartView.innerWebLineWidth = 1.0; - _chartView.webColor = UIColor.lightGrayColor; - _chartView.innerWebColor = UIColor.lightGrayColor; - _chartView.webAlpha = 1.0; - - RadarMarkerView *marker = (RadarMarkerView *)[RadarMarkerView viewFromXibIn:[NSBundle mainBundle]]; - marker.chartView = _chartView; - _chartView.marker = marker; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:9.f]; - xAxis.xOffset = 0.0; - xAxis.yOffset = 0.0; - xAxis.valueFormatter = self; - xAxis.labelTextColor = UIColor.whiteColor; - - ChartYAxis *yAxis = _chartView.yAxis; - yAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:9.f]; - yAxis.labelCount = 5; - yAxis.axisMinimum = 0.0; - yAxis.axisMaximum = 80.0; - yAxis.drawLabelsEnabled = NO; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentCenter; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - l.xEntrySpace = 7.0; - l.yEntrySpace = 5.0; - l.textColor = UIColor.whiteColor; - - [self updateChartData]; - - [_chartView animateWithXAxisDuration:1.4 yAxisDuration:1.4 easingOption:ChartEasingOptionEaseOutBack]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - [UIView animateWithDuration:0.15 animations:^{ - UINavigationBar *navigationBar = self.navigationController.navigationBar; - self.originalBarBgColor = navigationBar.barTintColor; - self.originalBarTintColor = navigationBar.tintColor; - self.originalBarStyle = navigationBar.barStyle; - - navigationBar.barTintColor = self.view.backgroundColor; - navigationBar.tintColor = UIColor.whiteColor; - navigationBar.barStyle = UIBarStyleBlack; - }]; -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [super viewWillDisappear:animated]; - - [UIView animateWithDuration:0.15 animations:^{ - UINavigationBar *navigationBar = self.navigationController.navigationBar; - navigationBar.barTintColor = self.originalBarBgColor; - navigationBar.tintColor = self.originalBarTintColor; - navigationBar.barStyle = self.originalBarStyle; - }]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setChartData]; -} - -- (void)setChartData -{ - double mult = 80; - double min = 20; - int cnt = 5; - - NSMutableArray *entries1 = [[NSMutableArray alloc] init]; - NSMutableArray *entries2 = [[NSMutableArray alloc] init]; - - // NOTE: The order of the entries when being added to the entries array determines their position around the center of the chart. - for (int i = 0; i < cnt; i++) - { - [entries1 addObject:[[RadarChartDataEntry alloc] initWithValue:(arc4random_uniform(mult) + min)]]; - [entries2 addObject:[[RadarChartDataEntry alloc] initWithValue:(arc4random_uniform(mult) + min)]]; - } - - RadarChartDataSet *set1 = [[RadarChartDataSet alloc] initWithEntries:entries1 label:@"Last Week"]; - [set1 setColor:[UIColor colorWithRed:103/255.0 green:110/255.0 blue:129/255.0 alpha:1.0]]; - set1.fillColor = [UIColor colorWithRed:103/255.0 green:110/255.0 blue:129/255.0 alpha:1.0]; - set1.drawFilledEnabled = YES; - set1.fillAlpha = 0.7; - set1.lineWidth = 2.0; - set1.drawHighlightCircleEnabled = YES; - [set1 setDrawHighlightIndicators:NO]; - - RadarChartDataSet *set2 = [[RadarChartDataSet alloc] initWithEntries:entries2 label:@"This Week"]; - [set2 setColor:[UIColor colorWithRed:121/255.0 green:162/255.0 blue:175/255.0 alpha:1.0]]; - set2.fillColor = [UIColor colorWithRed:121/255.0 green:162/255.0 blue:175/255.0 alpha:1.0]; - set2.drawFilledEnabled = YES; - set2.fillAlpha = 0.7; - set2.lineWidth = 2.0; - set2.drawHighlightCircleEnabled = YES; - [set2 setDrawHighlightIndicators:NO]; - - RadarChartData *data = [[RadarChartData alloc] initWithDataSets:@[set1, set2]]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:8.f]]; - [data setDrawValues:NO]; - data.valueTextColor = UIColor.whiteColor; - - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - if ([key isEqualToString:@"toggleXLabels"]) - { - _chartView.xAxis.drawLabelsEnabled = !_chartView.xAxis.isDrawLabelsEnabled; - - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleYLabels"]) - { - _chartView.yAxis.drawLabelsEnabled = !_chartView.yAxis.isDrawLabelsEnabled; - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleRotate"]) - { - _chartView.rotationEnabled = !_chartView.isRotationEnabled; - return; - } - - if ([key isEqualToString:@"toggleFill"]) - { - for (RadarChartDataSet *set in _chartView.data.dataSets) - { - set.drawFilledEnabled = !set.isDrawFilledEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"toggleHighlightCircle"]) - { - for (RadarChartDataSet *set in _chartView.data.dataSets) - { - set.drawHighlightCircleEnabled = !set.drawHighlightCircleEnabled; - } - - [_chartView setNeedsDisplay]; - return; - } - - if ([key isEqualToString:@"animateX"]) - { - [_chartView animateWithXAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateY"]) - { - [_chartView animateWithYAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"animateXY"]) - { - [_chartView animateWithXAxisDuration:1.4 yAxisDuration:1.4]; - return; - } - - if ([key isEqualToString:@"spin"]) - { - [_chartView spinWithDuration:2.0 fromAngle:_chartView.rotationAngle toAngle:_chartView.rotationAngle + 360.f easingOption:ChartEasingOptionEaseInCubic]; - return; - } - - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -#pragma mark - IAxisValueFormatter - -- (NSString *)stringForValue:(double)value - axis:(ChartAxisBase *)axis -{ - return self.activities[(int) value % self.activities.count]; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.h deleted file mode 100644 index 2989d22d..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// ScatterChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface ScatterChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.m deleted file mode 100644 index 19a158f6..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.m +++ /dev/null @@ -1,167 +0,0 @@ -// -// ScatterChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "ScatterChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface ScatterChartViewController () - -@property (nonatomic, strong) IBOutlet ScatterChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation ScatterChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Scatter Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.drawGridBackgroundEnabled = NO; - _chartView.dragEnabled = YES; - [_chartView setScaleEnabled:YES]; - _chartView.maxVisibleCount = 200; - _chartView.pinchZoomEnabled = YES; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentTop; - l.orientation = ChartLegendOrientationVertical; - l.drawInside = NO; - l.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - l.xOffset = 5.0; - - ChartYAxis *yl = _chartView.leftAxis; - yl.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - yl.axisMinimum = 0.0; // this replaces startAtZero = YES - - _chartView.rightAxis.enabled = NO; - - ChartXAxis *xl = _chartView.xAxis; - xl.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - xl.drawGridLinesEnabled = NO; - - _sliderX.value = 45.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals1 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals2 = [[NSMutableArray alloc] init]; - NSMutableArray *yVals3 = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double val = (double) (arc4random_uniform(range)) + 3; - [yVals1 addObject:[[ChartDataEntry alloc] initWithX:(double)i y:val]]; - - val = (double) (arc4random_uniform(range)) + 3; - [yVals2 addObject:[[ChartDataEntry alloc] initWithX:(double)i + 0.33 y:val]]; - - val = (double) (arc4random_uniform(range)) + 3; - [yVals3 addObject:[[ChartDataEntry alloc] initWithX:(double)i + 0.66 y:val]]; - } - - ScatterChartDataSet *set1 = [[ScatterChartDataSet alloc] initWithEntries:yVals1 label:@"DS 1"]; - [set1 setScatterShape:ScatterShapeSquare]; - [set1 setColor:ChartColorTemplates.colorful[0]]; - ScatterChartDataSet *set2 = [[ScatterChartDataSet alloc] initWithEntries:yVals2 label:@"DS 2"]; - [set2 setScatterShape:ScatterShapeCircle]; - set2.scatterShapeHoleColor = ChartColorTemplates.colorful[3]; - set2.scatterShapeHoleRadius = 3.5f; - [set2 setColor:ChartColorTemplates.colorful[1]]; - ScatterChartDataSet *set3 = [[ScatterChartDataSet alloc] initWithEntries:yVals3 label:@"DS 3"]; - [set3 setScatterShape:ScatterShapeCross]; - [set3 setColor:ChartColorTemplates.colorful[2]]; - - set1.scatterShapeSize = 8.0; - set2.scatterShapeSize = 8.0; - set3.scatterShapeSize = 8.0; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - [dataSets addObject:set2]; - [dataSets addObject:set3]; - - ScatterChartData *data = [[ScatterChartData alloc] initWithDataSets:dataSets]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]]; - - _chartView.data = data; -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull )entry dataSetIndex:(NSInteger)dataSetIndex highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.h deleted file mode 100644 index aa94a9fd..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// SinusBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface SinusBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.m deleted file mode 100644 index e64bf338..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.m +++ /dev/null @@ -1,166 +0,0 @@ -// -// SinusBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "SinusBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface SinusBarChartViewController () - -@property (nonatomic, strong) IBOutlet BarChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; - -@end - -@implementation SinusBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Sinus Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.drawBarShadowEnabled = NO; - _chartView.drawValueAboveBarEnabled = YES; - _chartView.maxVisibleCount = 60; - _chartView.pinchZoomEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionBottom; - xAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - xAxis.drawGridLinesEnabled = NO; - xAxis.enabled = NO; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - leftAxis.labelCount = 6; - leftAxis.axisMinimum = -2.5; - leftAxis.axisMaximum = 2.5; - leftAxis.granularityEnabled = true; - leftAxis.granularity = 0.1; - - ChartYAxis *rightAxis = _chartView.rightAxis; - rightAxis.drawGridLinesEnabled = NO; - rightAxis.labelFont = [UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]; - rightAxis.labelCount = 6; - rightAxis.axisMinimum = -2.5; - rightAxis.axisMaximum = 2.5; - rightAxis.granularity = 0.1; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentLeft; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.form = ChartLegendFormSquare; - l.formSize = 9.0; - l.font = [UIFont systemFontOfSize:11.f]; - l.xEntrySpace = 4.0; - - _sliderX.value = 150.0; - [self slidersValueChanged:nil]; - - [_chartView animateWithXAxisDuration:2.0 yAxisDuration:2.0]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:(_sliderX.value)]; -} - -- (void)setDataCount:(int)count -{ - NSMutableArray *entries = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - [entries addObject:[[BarChartDataEntry alloc] initWithX:(double)i y:sinf(M_PI * (i % 128) / 64.0)]]; - } - - BarChartDataSet *set = nil; - if (_chartView.data.dataSetCount > 0) - { - set = (BarChartDataSet *)_chartView.data.dataSets[0]; - [set replaceEntries: entries]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set = [[BarChartDataSet alloc] initWithEntries:entries label:@"Sinus Function"]; - [set setColor:[UIColor colorWithRed:240/255.f green:120/255.f blue:124/255.f alpha:1.f]]; - - BarChartData *data = [[BarChartData alloc] initWithDataSet:set]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:10.f]]; - [data setDrawValues:NO]; - - data.barWidth = 0.8; - - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected"); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.h deleted file mode 100644 index 5ef6f279..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// StackedBarChartViewController.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "DemoBaseViewController.h" -#import - -@interface StackedBarChartViewController : DemoBaseViewController - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.m deleted file mode 100644 index 69fb1053..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.m +++ /dev/null @@ -1,180 +0,0 @@ -// -// StackedBarChartViewController.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import "StackedBarChartViewController.h" -#import "ChartsDemo_iOS-Swift.h" - -@interface StackedBarChartViewController () - -@property (nonatomic, strong) IBOutlet BarChartView *chartView; -@property (nonatomic, strong) IBOutlet UISlider *sliderX; -@property (nonatomic, strong) IBOutlet UISlider *sliderY; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextX; -@property (nonatomic, strong) IBOutlet UITextField *sliderTextY; - -@end - -@implementation StackedBarChartViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.title = @"Stacked Bar Chart"; - - self.options = @[ - @{@"key": @"toggleValues", @"label": @"Toggle Values"}, - @{@"key": @"toggleIcons", @"label": @"Toggle Icons"}, - @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"}, - @{@"key": @"animateX", @"label": @"Animate X"}, - @{@"key": @"animateY", @"label": @"Animate Y"}, - @{@"key": @"animateXY", @"label": @"Animate XY"}, - @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"}, - @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"}, - @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"}, - @{@"key": @"toggleData", @"label": @"Toggle Data"}, - @{@"key": @"toggleBarBorders", @"label": @"Show Bar Borders"}, - ]; - - _chartView.delegate = self; - - _chartView.chartDescription.enabled = NO; - - _chartView.maxVisibleCount = 40; - _chartView.pinchZoomEnabled = NO; - _chartView.drawGridBackgroundEnabled = NO; - _chartView.drawBarShadowEnabled = NO; - _chartView.drawValueAboveBarEnabled = NO; - _chartView.highlightFullBarEnabled = NO; - - NSNumberFormatter *leftAxisFormatter = [[NSNumberFormatter alloc] init]; - leftAxisFormatter.maximumFractionDigits = 1; - leftAxisFormatter.negativeSuffix = @" $"; - leftAxisFormatter.positiveSuffix = @" $"; - - ChartYAxis *leftAxis = _chartView.leftAxis; - leftAxis.valueFormatter = [[ChartDefaultAxisValueFormatter alloc] initWithFormatter:leftAxisFormatter]; - leftAxis.axisMinimum = 0.0; // this replaces startAtZero = YES - - _chartView.rightAxis.enabled = NO; - - ChartXAxis *xAxis = _chartView.xAxis; - xAxis.labelPosition = XAxisLabelPositionTop; - - ChartLegend *l = _chartView.legend; - l.horizontalAlignment = ChartLegendHorizontalAlignmentRight; - l.verticalAlignment = ChartLegendVerticalAlignmentBottom; - l.orientation = ChartLegendOrientationHorizontal; - l.drawInside = NO; - l.form = ChartLegendFormSquare; - l.formSize = 8.0; - l.formToTextSpace = 4.0; - l.xEntrySpace = 6.0; - - _sliderX.value = 12.0; - _sliderY.value = 100.0; - [self slidersValueChanged:nil]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)updateChartData -{ - if (self.shouldHideData) - { - _chartView.data = nil; - return; - } - - [self setDataCount:_sliderX.value + 1 range:_sliderY.value]; -} - -- (void)setDataCount:(int)count range:(double)range -{ - NSMutableArray *yVals = [[NSMutableArray alloc] init]; - - for (int i = 0; i < count; i++) - { - double mult = (range + 1); - double val1 = (double) (arc4random_uniform(mult) + mult / 3); - double val2 = (double) (arc4random_uniform(mult) + mult / 3); - double val3 = (double) (arc4random_uniform(mult) + mult / 3); - - [yVals addObject:[[BarChartDataEntry alloc] initWithX:i yValues:@[@(val1), @(val2), @(val3)] icon: [UIImage imageNamed:@"icon"]]]; - } - - BarChartDataSet *set1 = nil; - if (_chartView.data.dataSetCount > 0) - { - set1 = (BarChartDataSet *)_chartView.data.dataSets[0]; - [set1 replaceEntries: yVals]; - [_chartView.data notifyDataChanged]; - [_chartView notifyDataSetChanged]; - } - else - { - set1 = [[BarChartDataSet alloc] initWithEntries:yVals label:@"Statistics Vienna 2014"]; - - set1.drawIconsEnabled = NO; - - set1.colors = @[ChartColorTemplates.material[0], ChartColorTemplates.material[1], ChartColorTemplates.material[2]]; - set1.stackLabels = @[@"Births", @"Divorces", @"Marriages"]; - - NSMutableArray *dataSets = [[NSMutableArray alloc] init]; - [dataSets addObject:set1]; - - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - formatter.maximumFractionDigits = 1; - formatter.negativeSuffix = @" $"; - formatter.positiveSuffix = @" $"; - - BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; - [data setValueFont:[UIFont fontWithName:@"HelveticaNeue-Light" size:7.f]]; - [data setValueFormatter:[[ChartDefaultValueFormatter alloc] initWithFormatter:formatter]]; - [data setValueTextColor:UIColor.whiteColor]; - - _chartView.fitBars = YES; - _chartView.data = data; - } -} - -- (void)optionTapped:(NSString *)key -{ - [super handleOption:key forChartView:_chartView]; -} - -#pragma mark - Actions - -- (IBAction)slidersValueChanged:(id)sender -{ - _sliderTextX.text = [@((int)_sliderX.value) stringValue]; - _sliderTextY.text = [@((int)_sliderY.value) stringValue]; - - [self updateChartData]; -} - -#pragma mark - ChartViewDelegate - -- (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight -{ - NSLog(@"chartValueSelected, stack-index %ld", (long)highlight.stackIndex); -} - -- (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView -{ - NSLog(@"chartValueNothingSelected"); -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.h deleted file mode 100644 index 2e94536a..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// DateValueFormatter.h -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - -#import -#import "ChartsDemo_iOS-Swift.h" - -@interface DateValueFormatter : NSObject - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.m deleted file mode 100644 index 27a8cfa8..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// DateValueFormatter.m -// ChartsDemo -// -// Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda -// A port of MPAndroidChart for iOS -// Licensed under Apache License 2.0 -// -// https://github.com/danielgindi/Charts -// - - -#import "DateValueFormatter.h" - -@interface DateValueFormatter () -{ - NSDateFormatter *_dateFormatter; -} -@end - -@implementation DateValueFormatter - -- (id)init -{ - self = [super init]; - if (self) - { - _dateFormatter = [[NSDateFormatter alloc] init]; - _dateFormatter.dateFormat = @"dd MMM HH:mm"; - } - return self; -} - -- (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis -{ - return [_dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:value]]; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.h deleted file mode 100644 index 4de193d0..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// DayAxisValueFormatter.h -// ChartsDemo -// Copyright © 2016 dcg. All rights reserved. -// - -#import -#import "ChartsDemo_iOS-Swift.h" - -@interface DayAxisValueFormatter : NSObject - -- (id)initForChart:(BarLineChartViewBase *)chart; - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.m deleted file mode 100644 index 814456cc..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.m +++ /dev/null @@ -1,166 +0,0 @@ -// -// DayAxisValueFormatter.m -// ChartsDemo -// Copyright © 2016 dcg. All rights reserved. -// - -#import "DayAxisValueFormatter.h" - -@implementation DayAxisValueFormatter -{ - NSArray *months; - __weak BarLineChartViewBase *_chart; -} - -- (id)initForChart:(BarLineChartViewBase *)chart -{ - self = [super init]; - if (self) - { - self->_chart = chart; - - months = @[ - @"Jan", @"Feb", @"Mar", - @"Apr", @"May", @"Jun", - @"Jul", @"Aug", @"Sep", - @"Oct", @"Nov", @"Dec" - ]; - } - return self; -} - -- (NSString *)stringForValue:(double)value - axis:(ChartAxisBase *)axis -{ - int days = (int)value; - int year = [self determineYearForDays:days]; - int month = [self determineMonthForDayOfYear:days]; - - NSString *monthName = months[month % months.count]; - NSString *yearName = [@(year) stringValue]; - - if (_chart.visibleXRange > 30 * 6) - { - return [NSString stringWithFormat:@"%@ %@", monthName, yearName]; - } - else - { - int dayOfMonth = [self determineDayOfMonthForDays:days month:month + 12 * (year - 2016)]; - - NSString *appendix = @"th"; - - switch (dayOfMonth) - { - case 1: - appendix = @"st"; - break; - case 2: - appendix = @"nd"; - break; - case 3: - appendix = @"rd"; - break; - case 21: - appendix = @"st"; - break; - case 22: - appendix = @"nd"; - break; - case 23: - appendix = @"rd"; - break; - case 31: - appendix = @"st"; - break; - } - - return dayOfMonth == 0 ? @"" : [NSString stringWithFormat:@"%d%@ %@", dayOfMonth, appendix, monthName]; - } -} - -- (int)daysForMonth:(int)month year:(int)year -{ - // month is 0-based - - if (month == 1) - { - BOOL is29Feb = NO; - - if (year < 1582) - { - is29Feb = (year < 1 ? year + 1 : year) % 4 == 0; - } - else if (year > 1582) - { - is29Feb = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); - } - - return is29Feb ? 29 : 28; - } - - if (month == 3 || month == 5 || month == 8 || month == 10) - { - return 30; - } - - return 31; -} - -- (int)determineMonthForDayOfYear:(int)dayOfYear -{ - int month = -1; - int days = 0; - - while (days < dayOfYear) - { - month = month + 1; - - if (month >= 12) - month = 0; - - int year = [self determineYearForDays:days]; - days += [self daysForMonth:month year:year]; - } - - return MAX(month, 0); -} - - -- (int)determineDayOfMonthForDays:(int)days month:(int)month -{ - int count = 0; - int daysForMonths = 0; - - while (count < month) - { - int year = [self determineYearForDays:days]; - daysForMonths += [self daysForMonth:count % 12 year:year]; - count++; - } - - return days - daysForMonths; -} - -- (int)determineYearForDays:(int)days -{ - if (days <= 366) - { - return 2016; - } - else if (days <= 730) - { - return 2017; - } - else if (days <= 1094) - { - return 2018; - } - else if (days <= 1458) - { - return 2019; - } - - return 2020; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.h b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.h deleted file mode 100644 index 6401ed07..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// IntAxisValueFormatter.h -// ChartsDemo -// Copyright © 2016 dcg. All rights reserved. -// - -#import -#import "ChartsDemo_iOS-Swift.h" - -@interface IntAxisValueFormatter : NSObject - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.m b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.m deleted file mode 100644 index 227a5f28..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// IntAxisValueFormatter.m -// ChartsDemo -// Copyright © 2016 dcg. All rights reserved. -// - -#import "IntAxisValueFormatter.h" - -@implementation IntAxisValueFormatter -{ -} - -- (NSString *)stringForValue:(double)value - axis:(ChartAxisBase *)axis -{ - return [@((NSInteger)value) stringValue]; -} - -@end diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/LargeValueFormatter.swift b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/LargeValueFormatter.swift deleted file mode 100644 index 47ca78fd..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Objective-C/Formatters/LargeValueFormatter.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// LargeValueFormatter.swift -// ChartsDemo -// Copyright © 2016 dcg. All rights reserved. -// - -import Foundation -import Charts - -open class LargeValueFormatter: NSObject, IValueFormatter, IAxisValueFormatter -{ - fileprivate static let MAX_LENGTH = 5 - - /// Suffix to be appended after the values. - /// - /// **default**: suffix: ["", "k", "m", "b", "t"] - @objc open var suffix = ["", "k", "m", "b", "t"] - - /// An appendix text to be added at the end of the formatted value. - @objc open var appendix: String? - - public override init() - { - - } - - @objc public init(appendix: String?) - { - self.appendix = appendix - } - - fileprivate func format(value: Double) -> String - { - var sig = value - var length = 0 - let maxLength = suffix.count - 1 - - while sig >= 1000.0 && length < maxLength - { - sig /= 1000.0 - length += 1 - } - - var r = String(format: "%2.f", sig) + suffix[length] - - if appendix != nil - { - r += appendix! - } - - return r - } - - open func stringForValue( - _ value: Double, axis: AxisBase?) -> String - { - return format(value: value) - } - - open func stringForValue( - _ value: Double, - entry: ChartDataEntry, - dataSetIndex: Int, - viewPortHandler: ViewPortHandler?) -> String - { - return format(value: value) - } -} diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 7c780dbc..00000000 --- a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "20x20", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-60@3x.png", - "scale" : "3x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "iTunesArtwork@2x.png", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png deleted file mode 100644 index 33b2e63ab491d39425e104e7ef5916dd41cf6bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5677 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 IIm^g@0c)79&;S4c diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png deleted file mode 100644 index ef18aba824097d907faf79251338789f90356692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10210 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 Wi~3w&#sBk@?u(@Sr!sMUzyATj7qnOa diff --git a/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png b/Carthage/Checkouts/Charts/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png deleted file mode 100644 index 775e7277c87f33e5894daa86b314de4fd2e4b07a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9266 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%0DepW05lu`xJDL1w*df8ZUA7{8~_l>1OUif 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