【问题标题】:How to code to zoom in or zoom out in coreplot / ios 8?如何编码以放大或缩小 coreplot / ios 8?
【发布时间】:2014-12-12 07:59:14
【问题描述】:

我已经绘制了一个包含两个 y 轴和 x 轴的折线图。

现在我想限制/限制放大和缩小。 我使用以下代码来限制

-(CPTPlotRange*)plotSpace:(CPTPlotSpace *)space willChangePlotRangeTo:(CPTPlotRange *)newRange forCoordinate:(CPTCoordinate)coordinate
{
    if([newRange locationDouble] < 0)
    {
        if(coordinate == CPTCoordinateX)
            return  [(CPTXYPlotSpace*)space xRange];
        else if(coordinate == CPTCoordinateY)
            return [(CPTXYPlotSpace*)space yRange];
    }
    if([newRange locationDouble] < 1000)
    {
        if(coordinate == CPTCoordinateX)
            return  [(CPTXYPlotSpace*)space xRange];
        else if(coordinate == CPTCoordinateY)
            return [(CPTXYPlotSpace*)space yRange];
    }

    return newRange;
}

and for zooming i used following code

-(BOOL)plotSpace:(CPTPlotSpace *)space shouldScaleBy:(CGFloat)interactionScale aboutPoint:(CGPoint)interactionPoint

{
    CPTGraph *graph = self.hostView.hostedGraph;

    CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;

   // plotSpace.delegate = self;


    NSInteger xAxisMin = 0;
    NSInteger xAxisMax = 15;

    NSInteger yAxisMin = 0;
    NSInteger yAxisMax = 100;



    if ((plotSpace.xRange>= [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromDouble(2*(xAxisMax-xAxisMin))])||



        ((plotSpace.yRange>= [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromDouble(2*(yAxisMax-yAxisMin))])))



    {



        //return NO;

        plotSpace.allowsUserInteraction = YES;

        CPTGraph *graph = self.hostView.hostedGraph;


        CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;

        plotSpace.delegate = self;

        plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)];

        plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)];

        plotSpace.allowsUserInteraction = YES;

        return YES;

    }

    else if ((plotSpace.xRange<= [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromDouble((xAxisMax-xAxisMin)/2)])||



             ((plotSpace.yRange<= [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromDouble((yAxisMax-yAxisMin)/2)])))

    {

        //[_hostingView setAllowPinchScaling:NO];

         plotSpace.allowsUserInteraction = YES;

        //return NO;


        CPTGraph *graph = self.hostView.hostedGraph;

        CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;

        plotSpace.delegate = self;

        plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(xAxisMin) length:CPTDecimalFromFloat(xAxisMax - xAxisMin)];

        plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(yAxisMin) length:CPTDecimalFromFloat(yAxisMax - yAxisMin)];

        plotSpace.allowsUserInteraction = YES;

       // [hostingView setAllowPinchScaling:YES];



        return YES;

    }

    return YES;      



}  

但问题是上面的 shouldScaleBy: 委托没有调用。 我不明白为什么不调用它。

请提供代码以进行一定程度的缩放。

【问题讨论】:

  • 此链接可能会帮助您找到与查询相关的核心情节stackoverflow.com/questions/tagged/core-plot?sort=active
  • 我已经看过这个问题,请举个例子
  • 您应该使用传递给您的委托的绘图空间参数。这使您可以将同一个委托用于多个绘图空间,并使代码更容易在另一个项目中重用。

标签: objective-c ios8 core-plot


【解决方案1】:

-plotSpace:shouldScaleBy:aboutPoint: 方法仅在响应托管视图上的捏合手势时调用。每次更改都会调用 -plotSpace:willChangePlotRangeTo:forCoordinate: 方法,因此您可以在那里进行所有限制检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 2016-05-24
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多