2014-12-12 3 views
0

두 개의 y 축과 x 축을 포함하는 선 그래프를 그렸습니다.coreplot/ios 8을 확대 또는 축소하는 코드 작성 방법은 무엇입니까?

이제 확대/축소 및 축소를위한 제한/제한을 원합니다. 나는

-(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 위에 이것이다 : 대표는 호출하지 않습니다. 이것이 호출되지 않는 이유를 이해할 수 없습니다.

확대/축소하고 축소하려면 코드를 입력하십시오.

+0

이 링크는 이미 몇 가지 예제를 제공하시기 바랍니다 질문을 보였다 http://stackoverflow.com/questions/tagged/core-plot?sort=active –

+0

당신이 당신의 쿼리를 찾을 관련 핵심 플롯 할 수있는 당신을 도울 수 – user2914924

+0

대리자에게 전달 된 플롯 공간 매개 변수를 사용해야합니다. 이를 통해 두 개 이상의 플롯 공간에 대해 동일한 델리게이트를 사용할 수 있으며 다른 프로젝트에서 코드를 더 쉽게 재사용 할 수 있습니다. –

답변

0

-plotSpace:shouldScaleBy:aboutPoint: 메서드는 호스팅보기의 집어 넣기 동작에 대한 응답으로 만 호출됩니다. -plotSpace:willChangePlotRangeTo:forCoordinate: 메서드가 모든 변경에 대해 호출되므로 모든 제한 검사를 수행 할 수 있습니다.