1

Core Plot でカスタム ラベルを使用しているときに問題が発生しました。

  1. My Core Plot はズームをサポートしています。

  2. x 軸ラベルはカスタム x.axisLabels です

最初の読み込みではインターフェイスは正常ですが、Core Plot を絞り込むと軸ラベルが重なります。

ラベルのレベルをデザインするには?たとえば、最小レベルが年のみを表示する場合、レベル表示日付で、最大レベルは日付を表示します。

- (void)initPlotGraph
{
    graph = [[CPTXYGraph alloc] initWithFrame:CGRectZero];
    self.hostedGraph = graph;
    locationLabels = [[NSMutableArray alloc]init];

    graph.plotAreaFrame.paddingLeft   += 5.0;
    graph.plotAreaFrame.paddingTop    += 5.0;
    graph.plotAreaFrame.paddingRight  += 5.0;
    graph.plotAreaFrame.paddingBottom += 17.5;

    //[self setAllowPinchScaling:NO];

    // Setup scatter plot space
    plotSpace                       = (CPTXYPlotSpace *)graph.defaultPlotSpace;
    plotSpace.allowsUserInteraction = YES;
    plotSpace.delegate              = self;

    plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0)length:CPTDecimalFromFloat(1+0.3)];
    plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0)length:CPTDecimalFromFloat(1+0.3)];

    [self initPlotAxis];
 }

- (void)initPlotAxis
{
    CPTMutableLineStyle *axisLineStyle = [CPTMutableLineStyle lineStyle];
    axisLineStyle.lineWidth            = 2;
    axisLineStyle.lineColor            = [CPTColor colorWithComponentRed:CPTFloat(0.11765) green:CPTFloat(0.49804) blue:CPTFloat(0.87451) alpha:CPTFloat(1)];

    CPTMutableLineStyle *axisTickLineStyle = [CPTMutableLineStyle lineStyle];
    axisTickLineStyle.lineWidth            = 0;

    CPTLineCap *lineCap = [CPTLineCap sweptArrowPlotLineCap];
    lineCap.size        = CGSizeMake(10, 10);
    lineCap.lineCapType = CPTLineCapTypeNone;

    // Axes
    // Label x axis with a fixed interval policy
    lineCap.lineStyle     = axisLineStyle;
    lineCap.fill          = [CPTFill fillWithColor:[CPTColor colorWithComponentRed:CPTFloat(0.29019) green:CPTFloat(0.54118) blue:CPTFloat(0.76471) alpha:CPTFloat(1)]];
    CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
    CPTXYAxis *x          = axisSet.xAxis;
    x.majorIntervalLength = CPTDecimalFromInt(1);
    x.axisLineStyle       = axisLineStyle;
    x.axisConstraints     = [CPTConstraints constraintWithRelativeOffset:0];
    x.axisLineCapMax      = lineCap;
    x.axisLabels          = [self buildLabelTitle];
    x.labelingPolicy      = CPTAxisLabelingPolicyNone;
    x.minorTickLocations = [NSSet setWithArray:locationLabels];

    // Label y with an automatic label policy.
    lineCap.lineStyle       = axisLineStyle;
    lineCap.fill            = [CPTFill fillWithColor:[CPTColor colorWithComponentRed:CPTFloat(0.29019) green:CPTFloat(0.54118) blue:CPTFloat(0.76471) alpha:CPTFloat(1)]];
    CPTXYAxis *y = axisSet.yAxis;
    //    y.majorIntervalLength   = CPTDecimalFromDouble(5);
    y.majorTickLineStyle    = axisTickLineStyle;
    y.minorTickLineStyle    = axisTickLineStyle;
    y.axisLineStyle         = axisLineStyle;
    y.axisLineCapMax        = lineCap;
    y.axisConstraints       = [CPTConstraints constraintWithRelativeOffset:0];

    // Set axes
    graph.axisSet.axes = [NSArray arrayWithObjects:x, y, nil];
}

- (NSMutableSet*)buildLabelTitle
{
    NSMutableSet *newAxisLabels = [NSMutableSet set];

    CPTMutableTextStyle *textStyleB = [CPTMutableTextStyle textStyle];
    textStyleB.color = [CPTColor colorWithComponentRed:CPTFloat((float)0x09/0xFF) green:CPTFloat((float)0x31/0xFF) blue:CPTFloat((float)0x4A/0xFF) alpha:CPTFloat(1)];

    plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(corePlotNums - 9)length:CPTDecimalFromInt(10)];
    plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(0) length:CPTDecimalFromInt(corePlotNums + 1)];

    for ( NSUInteger i = 1; i < corePlotNums + 1; i++)
    {
        CPTAxisLabel *newLabel = [[CPTAxisLabel alloc] initWithText:[[m_labelStr objectAtIndex:i-1] substringWithRange:NSMakeRange(5, 11)] textStyle:textStyleB];
        newLabel.tickLocation = CPTDecimalFromUnsignedInteger(i);
        newLabel.offset = 5;
        [newAxisLabels addObject:newLabel];
        [newLabel release];
    }

    return newAxisLabels;
}

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1