ios - SHLineGraphView - 设置图形原点值

标签 ios objective-c

使用SHLineGraphView

我想将图表的原点指定为 0 以外的其他值。

问题已在此处创建 Min/Max draw Y axis但所有者似乎对解决它不感兴趣。

这是我现在拥有的

SHLineGraphView.m

#define BOTTOM_MARGIN_TO_LEAVE 30.0
#define TOP_MARGIN_TO_LEAVE 30.0
#define INTERVAL_COUNT 10

//INTERVAL_COUNT - 3 -> Limits the y-axis to 60 but 
//not the entire graph. 

- (void)drawYLabels:(SHPlot *)plot {
  double yRange = [_yAxisRange doubleValue]; // this value will be in dollars
  double yIntervalValue = yRange / INTERVAL_COUNT;
  double intervalInPx = (self.bounds.size.height - BOTTOM_MARGIN_TO_LEAVE ) / (INTERVAL_COUNT - 3);
  NSLog(@"interval px %f",intervalInPx);
  NSMutableArray *labelArray = [NSMutableArray array];
  float maxWidth = 0;

for(int i= 0; i <= INTERVAL_COUNT - 3 ; i++){
CGPoint currentLinePoint = CGPointMake(_leftMarginToLeave, i * intervalInPx);
CGRect lableFrame = CGRectMake(0, currentLinePoint.y - (intervalInPx / 2), 100, intervalInPx);
  NSLog(@"label frame %f", lableFrame.origin.y);
//if(i != 0) {
  UILabel *yAxisLabel = [[UILabel alloc] initWithFrame:lableFrame];
  yAxisLabel.backgroundColor = [UIColor clearColor];
  yAxisLabel.font = (UIFont *)_themeAttributes[kYAxisLabelFontKey];
  yAxisLabel.textColor = (UIColor *)_themeAttributes[kYAxisLabelColorKey];
  yAxisLabel.textAlignment = NSTextAlignmentCenter;
  float val = (yIntervalValue * (10 - i));
    NSLog(@"value %f", val);
  if(val > 0){
    yAxisLabel.text = [NSString stringWithFormat:@"%.1i%@", (int)val, _yAxisSuffix];
  } else {
    yAxisLabel.text = [NSString stringWithFormat:@"%.0f", val];
  }
  [yAxisLabel sizeToFit];
  CGRect newLabelFrame = CGRectMake(0, currentLinePoint.y -     (yAxisLabel.layer.frame.size.height / 2), yAxisLabel.frame.size.width, yAxisLabel.layer.frame.size.height);
  yAxisLabel.frame = newLabelFrame;

  if(newLabelFrame.size.width > maxWidth) {
    maxWidth = newLabelFrame.size.width;
  }

  [labelArray addObject:yAxisLabel];
  [self addSubview:yAxisLabel];
//}
  }

viewController.m

_graphView.yAxisRange = @(200);

y 轴没问题,但图形仍然是从原点 0 开始绘制的。

最佳答案

创建一个 yAxisMinValue 属性

@property (nonatomic, strong) NSNumber *yAxisMinValue;

...并按如下方式更新您的 drawYLabels 函数:

- (void)drawYLabels:(SHPlot *)plot {
double yRange = [_yAxisRange doubleValue]; // this value will be in dollars

double yRangeMin = [_yAxisMinValue doubleValue];

NSLog(@"yRange: %f", yRange);

NSLog(@"yRangeMin: %f", yRangeMin);


double yIntervalValue = (yRange - yRangeMin) / INTERVAL_COUNT;
NSLog(@"yIntervalValue: %f", yIntervalValue);

double intervalInPx = (self.bounds.size.height - BOTTOM_MARGIN_TO_LEAVE ) / (INTERVAL_COUNT +1);

NSMutableArray *labelArray = [NSMutableArray array];
float maxWidth = 0;

for(int i= INTERVAL_COUNT + 1; i >= 0; i--){

  NSLog(@"i = %d",i);
CGPoint currentLinePoint = CGPointMake(_leftMarginToLeave, i * intervalInPx);
CGRect lableFrame = CGRectMake(0, currentLinePoint.y - (intervalInPx / 2), 100, intervalInPx);

if(i != 0) {
  UILabel *yAxisLabel = [[UILabel alloc] initWithFrame:lableFrame];
  yAxisLabel.backgroundColor = [UIColor clearColor];
  yAxisLabel.font = (UIFont *)_themeAttributes[kYAxisLabelFontKey];
  yAxisLabel.textColor = (UIColor *)_themeAttributes[kYAxisLabelColorKey];
  yAxisLabel.textAlignment = NSTextAlignmentCenter;
  float val = (yIntervalValue * (10 - i)) + yRangeMin;
  if(val > yRangeMin){
    yAxisLabel.text = [NSString stringWithFormat:@"%.1f%@", val, _yAxisSuffix];
      NSLog(@"%.1f%@", val, _yAxisSuffix);
  } else {
    yAxisLabel.text = [NSString stringWithFormat:@"%.1f", val];
      NSLog(@"%.1f", val);
  }
  [yAxisLabel sizeToFit];
  CGRect newLabelFrame = CGRectMake(0, currentLinePoint.y - (yAxisLabel.layer.frame.size.height / 2), yAxisLabel.frame.size.width, yAxisLabel.layer.frame.size.height);
  yAxisLabel.frame = newLabelFrame;

  if(newLabelFrame.size.width > maxWidth) {
    maxWidth = newLabelFrame.size.width;
  }

  [labelArray addObject:yAxisLabel];
  [self addSubview:yAxisLabel];
  }
}

关于ios - SHLineGraphView - 设置图形原点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25258216/

相关文章:

ios - UIView 动画不动画

ios - 将 View 转换为模态 Controller 的 ScrollView

ios - 在 xcode 模拟器中构建时禁用 RealityKit/ARKit

objective-c - 如何在 Mac OS X 上将按钮连接到方法

python - 操作系统: programmatically get list of applications for a file

ios - 如何在 UIScrollView 到达底部时停止滚动

python - Pythonista:如何显示UIAlertController?

ios - 如何从V2 Box iOS SDK获取文件扩展名和路径?

iphone - 具有动态高度的 UILabel 不适用于 iOS 中的相同字符串

ios - AudioKit 4.0.1 - 类型 'AKSequencer' 的值没有成员 'avTracks'