CandleStickChartViewController.m 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. //
  2. // CandleStickChartViewController.m
  3. // ChartsDemo
  4. //
  5. // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda
  6. // A port of MPAndroidChart for iOS
  7. // Licensed under Apache License 2.0
  8. //
  9. // https://github.com/danielgindi/Charts
  10. //
  11. #import "CandleStickChartViewController.h"
  12. #import "ChartsDemo_iOS-Swift.h"
  13. @interface CandleStickChartViewController () <ChartViewDelegate>
  14. @property (nonatomic, strong) IBOutlet CandleStickChartView *chartView;
  15. @property (nonatomic, strong) IBOutlet UISlider *sliderX;
  16. @property (nonatomic, strong) IBOutlet UISlider *sliderY;
  17. @property (nonatomic, strong) IBOutlet UITextField *sliderTextX;
  18. @property (nonatomic, strong) IBOutlet UITextField *sliderTextY;
  19. @end
  20. @implementation CandleStickChartViewController
  21. - (void)viewDidLoad
  22. {
  23. [super viewDidLoad];
  24. self.title = @"Candle Stick Chart";
  25. self.options = @[
  26. @{@"key": @"toggleValues", @"label": @"Toggle Values"},
  27. @{@"key": @"toggleIcons", @"label": @"Toggle Icons"},
  28. @{@"key": @"toggleHighlight", @"label": @"Toggle Highlight"},
  29. @{@"key": @"animateX", @"label": @"Animate X"},
  30. @{@"key": @"animateY", @"label": @"Animate Y"},
  31. @{@"key": @"animateXY", @"label": @"Animate XY"},
  32. @{@"key": @"saveToGallery", @"label": @"Save to Camera Roll"},
  33. @{@"key": @"togglePinchZoom", @"label": @"Toggle PinchZoom"},
  34. @{@"key": @"toggleAutoScaleMinMax", @"label": @"Toggle auto scale min/max"},
  35. @{@"key": @"toggleShadowColorSameAsCandle", @"label": @"Toggle shadow same color"},
  36. @{@"key": @"toggleShowCandleBar", @"label": @"Toggle show candle bar"},
  37. @{@"key": @"toggleData", @"label": @"Toggle Data"},
  38. ];
  39. _chartView.delegate = self;
  40. _chartView.chartDescription.enabled = NO;
  41. _chartView.maxVisibleCount = 60;
  42. _chartView.pinchZoomEnabled = NO;
  43. _chartView.drawGridBackgroundEnabled = NO;
  44. ChartXAxis *xAxis = _chartView.xAxis;
  45. xAxis.labelPosition = XAxisLabelPositionBottom;
  46. xAxis.drawGridLinesEnabled = NO;
  47. ChartYAxis *leftAxis = _chartView.leftAxis;
  48. leftAxis.labelCount = 7;
  49. leftAxis.drawGridLinesEnabled = NO;
  50. leftAxis.drawAxisLineEnabled = NO;
  51. ChartYAxis *rightAxis = _chartView.rightAxis;
  52. rightAxis.enabled = NO;
  53. _chartView.legend.enabled = NO;
  54. _sliderX.value = 40.0;
  55. _sliderY.value = 100.0;
  56. [self slidersValueChanged:nil];
  57. }
  58. - (void)didReceiveMemoryWarning
  59. {
  60. [super didReceiveMemoryWarning];
  61. // Dispose of any resources that can be recreated.
  62. }
  63. - (void)updateChartData
  64. {
  65. if (self.shouldHideData)
  66. {
  67. _chartView.data = nil;
  68. return;
  69. }
  70. [self setDataCount:_sliderX.value + 1 range:_sliderY.value];
  71. }
  72. - (void)setDataCount:(int)count range:(double)range
  73. {
  74. NSMutableArray *yVals1 = [[NSMutableArray alloc] init];
  75. for (int i = 0; i < count; i++)
  76. {
  77. double mult = (range + 1);
  78. double val = (double) (arc4random_uniform(40)) + mult;
  79. double high = (double) (arc4random_uniform(9)) + 8.0;
  80. double low = (double) (arc4random_uniform(9)) + 8.0;
  81. double open = (double) (arc4random_uniform(6)) + 1.0;
  82. double close = (double) (arc4random_uniform(6)) + 1.0;
  83. BOOL even = i % 2 == 0;
  84. [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"]]];
  85. }
  86. CandleChartDataSet *set1 = [[CandleChartDataSet alloc] initWithEntries:yVals1 label:@"Data Set"];
  87. set1.axisDependency = AxisDependencyLeft;
  88. [set1 setColor:[UIColor colorWithWhite:80/255.f alpha:1.f]];
  89. set1.drawIconsEnabled = NO;
  90. set1.shadowColor = UIColor.darkGrayColor;
  91. set1.shadowWidth = 0.7;
  92. set1.decreasingColor = UIColor.redColor;
  93. set1.decreasingFilled = YES;
  94. set1.increasingColor = [UIColor colorWithRed:122/255.f green:242/255.f blue:84/255.f alpha:1.f];
  95. set1.increasingFilled = NO;
  96. set1.neutralColor = UIColor.blueColor;
  97. CandleChartData *data = [[CandleChartData alloc] initWithDataSet:set1];
  98. _chartView.data = data;
  99. }
  100. - (void)optionTapped:(NSString *)key
  101. {
  102. if ([key isEqualToString:@"toggleShadowColorSameAsCandle"])
  103. {
  104. for (id<CandleChartDataSetProtocol> set in _chartView.data.dataSets)
  105. {
  106. set.shadowColorSameAsCandle = !set.shadowColorSameAsCandle;
  107. }
  108. [_chartView notifyDataSetChanged];
  109. return;
  110. } else if ([key isEqualToString:@"toggleShowCandleBar"])
  111. {
  112. for (id<CandleChartDataSetProtocol> set in _chartView.data.dataSets)
  113. {
  114. set.showCandleBar = !set.showCandleBar;
  115. }
  116. [_chartView notifyDataSetChanged];
  117. return;
  118. }
  119. [super handleOption:key forChartView:_chartView];
  120. }
  121. #pragma mark - Actions
  122. - (IBAction)slidersValueChanged:(id)sender
  123. {
  124. _sliderTextX.text = [@((int)_sliderX.value) stringValue];
  125. _sliderTextY.text = [@((int)_sliderY.value) stringValue];
  126. [self updateChartData];
  127. }
  128. #pragma mark - ChartViewDelegate
  129. - (void)chartValueSelected:(ChartViewBase * __nonnull)chartView entry:(ChartDataEntry * __nonnull)entry highlight:(ChartHighlight * __nonnull)highlight
  130. {
  131. NSLog(@"chartValueSelected");
  132. }
  133. - (void)chartValueNothingSelected:(ChartViewBase * __nonnull)chartView
  134. {
  135. NSLog(@"chartValueNothingSelected");
  136. }
  137. @end