iOS Core Plot CPTAxisLabel alignment to CPTPlot

て烟熏妆下的殇ゞ 提交于 2019-12-31 02:13:12

问题


Please look at this image below. I have attached file. My problem with CPTAxisLabel labels. They are placed under the tick, but they are not placed under the CPTPlot as I want.

How can I add left offset to this labels? I need that my labels will be placed middle the CPTPlot object.

(UPDATED:)

-(void)configureGraph
{

    NSInteger max = 0;
    for (NSNumber *number in self.values) {
        NSInteger num = [number integerValue];
        if (num > max) {
            max = num;
        }
    }

    CPTGraph *graph = [[CPTXYGraph alloc] initWithFrame:self.bounds];

    graph.plotAreaFrame.masksToBorder = NO;

    self.hostedGraph = graph;

    graph.paddingBottom = 80.0f;
    graph.paddingLeft  = 0.0f;
    graph.paddingTop    = 50.0f;
    graph.paddingRight  = 0.0f;

    CGFloat xMin = -0.5f;
    CGFloat xMax = [self.titles count];
    if (xMax < 7.0) {
        xMax = 7.0;
    }
    CGFloat yMin = 0.0f;
    CGFloat yMax = max + 25;

    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *) graph.defaultPlotSpace;
    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xMin) length:CPTDecimalFromFloat(xMax)];
    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yMin) length:CPTDecimalFromFloat(yMax)];

    //graph.backgroundColor = [[UIColor grayColor] CGColor];
    //graph.plotAreaFrame.fill = [CPTFill fillWithColor:[CPTColor redColor]];

}

-(void)configurePlots
{    
    CPTBarPlot *plot = [[CPTBarPlot alloc] init];
    //plot.barOffset = CPTDecimalFromFloat(0.30);
    plot.fill = [CPTFill fillWithColor:[CPTColor colorWithComponentRed:190.0f/255.0f green:203.0f/255.0f blue:103.0f/255.0f alpha:1.0]];
    //plot.barWidth = CPTDecimalFromDouble(0.75);
    plot.lineStyle = nil;
    plot.barCornerRadius = 1.0;
    plot.dataSource = self;
    plot.delegate = self;

    CPTGraph *graph = self.hostedGraph;
    [graph addPlot:plot toPlotSpace:graph.defaultPlotSpace];

}

#pragma mark - CPTPlotDataSource methods
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
    return [self.titles count];
}

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
    if ((fieldEnum == CPTBarPlotFieldBarTip) && (index < [self.titles count])) {
            return [self.values objectAtIndex:index];
    }
    return [NSDecimalNumber numberWithUnsignedInteger:index];
}

-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)idx
{

    plot.labelOffset = 0;

    CPTMutableTextStyle *style = [CPTMutableTextStyle textStyle];
    style.color = [[CPTColor whiteColor] colorWithAlphaComponent:1];
    style.fontName = @"Helvetica-Bold";
    style.fontSize = 12.0f;

    NSString *valueString = [NSString stringWithFormat:@"%@", [self.values objectAtIndex:idx]];

    return [[CPTTextLayer alloc] initWithText:valueString style:style];
}

- (void)configureAxes
{

    CPTXYAxisSet *axisSet = (CPTXYAxisSet *) self.hostedGraph.axisSet;
    axisSet.xAxis.hidden = YES;
    axisSet.yAxis.hidden = YES;

    CPTMutableTextStyle *style = [CPTMutableTextStyle textStyle];
    style.color = [[CPTColor whiteColor] colorWithAlphaComponent:1];
    style.fontName = @"Helvetica-Bold";
    style.fontSize = 12.0f;

    NSMutableArray *labels = [[NSMutableArray alloc] initWithCapacity:5];
    int idx =0;
    for (NSString *string in self.titles)
    {
        CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithText:string textStyle:style];
        label.rotation = M_PI/2;
        label.tickLocation = CPTDecimalFromInt(idx);
        label.offset = 10.0f;
        [labels addObject:label];
        idx+=1;
    }

    axisSet.xAxis.axisLabels = [NSSet setWithArray:labels];
}

回答1:


Either set the barOffset to zero (0) and make the bar locations the same as the tick locations or adjust the bar locations returned by the datasource to account for the barOffset.




回答2:


The CPTAxis class has a property labelOffset which, according to the documentation, is "The offset distance between the tick marks and labels. "

There are a lot of ways to custom labeling from the CPTAxis class, you should check : https://core-plot.googlecode.com/hg-history/efa73ee50d8edfd0e1d4294cf4bd2c07d9f8af77/documentation/html/iOS/interface_c_p_t_axis.html



来源:https://stackoverflow.com/questions/15681070/ios-core-plot-cptaxislabel-alignment-to-cptplot

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!