首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态更改核心情节的标签

如何动态更改核心情节的标签
EN

Stack Overflow用户
提问于 2013-05-08 09:35:03
回答 1查看 881关注 0票数 1

我在核心地块中使用自定义标签时遇到了一个问题:

  1. 我的核心情节支持缩放。
  2. X轴标签是自定义x.axisLabels。

在第一次加载时,接口是正常的,但是当我缩小核心图时,轴标签重叠在一起。

如何在标签上设计一个级别?例如,当最低级别只显示一年时,在级别显示日期中,最高级别显示日期。

代码语言:javascript
复制
- (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;
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-11 14:06:20

如果允许用户更改绘图范围(即,通过捏缩缩放),则使用绘图空间委托来监视对绘图空间的更改。使用新的绘图范围和绘图区域的大小来确定要使用的时间范围和显示多少标签。根据需要调整轴标记属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16437248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档