2014-07-24 2 views
0

코어 플롯 그래프를 X 축에서 오른쪽에서 왼쪽으로 동적으로 이동하려고합니다.오른쪽에서 왼쪽으로 코어 플롯 그래프 이동

예를 들어, 코어 플롯 갤러리 예제에서 그래프는 왼쪽에서 오른쪽으로 이동합니다. 이를 위해 나는 코드를 사용하고 있습니다 : 위의 코드에서

NSTimer *dataTimer = [NSTimer timerWithTimeInterval:1.0 
              target:self 
              selector:@selector(newData:) 
              userInfo:nil 
              repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:dataTimer forMode:NSDefaultRunLoopMode]; 

-(void)newData:(NSTimer *)theTimer 
{ 
CPTPlot *thePlot = [[self getCorePLotGraph] plotWithIdentifier:@"Device1"]; 

CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)[self getCorePLotGraph].defaultPlotSpace; 
NSUInteger location  = (currentIndex >= kMaxDataPoints ? currentIndex - kMaxDataPoints + 2 : 0); 

CPTPlotRange *newRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger(location) 
                 length:CPTDecimalFromUnsignedInteger(kMaxDataPoints-2)]; 

**CPTMutablePlotRange *xRange = [[self getCoreplotSpace].xRange mutableCopy]; 
[xRange expandRangeByFactor:CPTDecimalFromCGFloat(-2.0)]; 
[self getCoreplotSpace].xRange = xRange;** 



[CPTAnimation animate:plotSpace 
      property:@"xRange" 
     fromPlotRange:plotSpace.xRange 
      toPlotRange:newRange 
      duration:CPTFloat(1.0/kFrameRate)]; 

currentIndex++; 


[temperatureValuesArray addObject:[NSNumber numberWithDouble:(1.0 - kAlpha) * [[temperatureValuesArray lastObject] doubleValue] + kAlpha * rand()/(double)RAND_MAX]]; 
[thePlot insertDataAtIndex:temperatureValuesArray.count - 1 numberOfRecords:1]; 
} 

을, 굵은 코드는 지금 노력하고 무엇을 오른쪽에서 왼쪽으로 이동합니다.

그러나 오른쪽에서 왼쪽으로 이동하지는 않습니다. 이 일을 어떻게 도와 주실 수 있겠습니까?

감사

(아래 복사) 핵심 플롯에 포함 된 "Real Time Plot" demo의 코드를 복사처럼 보이는
+0

'plotSpace.xRange = newRange;의 문제점은 무엇입니까? –

+0

X 축을 오른쪽에서 왼쪽으로 이동하려면 왜 그런 코드를 사용했는지. 나는이 핵심 음모에 익숙하지 않다. 나는 그런 식으로 노력했다. 나를 바로 잡으세요. – Dhanunjaya

답변

1

.

-(void)newData:(NSTimer *)theTimer 
{ 
    CPTGraph *theGraph = (self.graphs)[0]; 
    CPTPlot *thePlot = [theGraph plotWithIdentifier:kPlotIdentifier]; 

    if (thePlot) { 
     if (plotData.count >= kMaxDataPoints) { 
      [plotData removeObjectAtIndex:0]; 
      [thePlot deleteDataInIndexRange:NSMakeRange(0, 1)]; 
     } 

     CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)theGraph.defaultPlotSpace; 
     NSUInteger location  = (currentIndex >= kMaxDataPoints ? currentIndex - kMaxDataPoints + 2 : 0); 

     CPTPlotRange *oldRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger((location > 0) ? (location - 1) : 0) 
                   length:CPTDecimalFromUnsignedInteger(kMaxDataPoints - 2)]; 
     CPTPlotRange *newRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromUnsignedInteger(location) 
                   length:CPTDecimalFromUnsignedInteger(kMaxDataPoints - 2)]; 

     [CPTAnimation animate:plotSpace 
        property:@"xRange" 
       fromPlotRange:oldRange 
        toPlotRange:newRange 
        duration:CPTFloat(1.0/kFrameRate)]; 

     currentIndex++; 
     [plotData addObject:@((1.0 - kAlpha) * [[plotData lastObject] doubleValue] + kAlpha * rand()/(double)RAND_MAX)]; 
     [thePlot insertDataAtIndex:plotData.count - 1 numberOfRecords:1]; 
    } 
} 

당신은 모든 애니메이션이 처리됩니다이 방법의 xRange를 업데이트 할 필요가 없습니다 : 이것은 당신이 설명하는대로 작동합니다.