0

リアルタイム統計の錯覚を与えるために、コアプロット データを更新するタイマーがあります。タイマーが起動すると、配列に値が追加され、散布図が更新されます。これはうまく機能しますが、約 10 個のデータ ポイントをグラフ化したら、最初のポイントを削除して最後の 10 個のデータ ポイントのみを表示したいと考えています。しかし、データポイントを削除しようとすると、古いデータポイントと新しいデータポイントが重ねて表示されます。これがなぜなのか、私には理解できません。私は配列をゼロにしてリセットしようとしましたが、すべて役に立ちませんでした。なぜこれが起こるのかについてのアイデア。ここにいくつかのコードがあります:

//START GRAPHING
  self.count = 0;
  if (numberOfPackets == 1){ //on the first packet
          [self.repeatingTimer invalidate];
          self.repeatingTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateArray:) userInfo:nil repeats:YES];
          self.arrayII = [[NSMutableArray alloc] init];
          [self initPlot];
   }

-(void) updateArray:(NSTimer *)timer{
    self.count++;
   // self.arrayII sources scatter plot data.
    if (self.count < [dataPacketArray count]){
        if (self.count > 5){
            [self.arrayII removeObjectAtIndex:0]; //if I don't include this it works flawlessly.
        }
        [self.arrayII addObject:[dataPacketArray objectAtIndex:self.count]];
    }
    [self.view reloadInputViews];
    [self configurePlots];
}

-(void) initPlot {
    [self configureHost];
    [self configureGraph];
    [self configurePlots];
    [self configureAxes];
}

このチュートリアルからすべての初期化プロットを取得しました。どんな助けでも大歓迎です。

4

2 に答える 2

0

私は、すべてを捨てているのはアレイではないことを理解しました。散布図は前のプロットを削除するのではなく、プロットを追加するだけです。ポイントを追加し、古いものの上に再グラフ化するだけなので、同じプロットのように見えます。ポイントを削除するとすぐに、それらは整列しません。次に、次の質問は、古いプロットをどのように削除するかです...

于 2012-11-25T07:12:05.353 に答える
0

-configurePlotsメソッドは、プロットをグラフに追加するものだと思います。データが変更されるたびにそのメソッドを呼び出さないでください。プロットでメソッドを使用して、-reloadDataすべてのデータを強制的にリロードします。

プロット ギャラリーサンプル アプリの "リアルタイム プロット" は、このようにデータを更新するより良い方法を示しています。更新のたびにすべてをリロードするのではなく、期限切れのデータ ポイントを削除し、新しいデータのみを追加します。データ ポイントが 10 個しかない場合は問題にならないかもしれませんが、より大きなデータ配列がある場合は、変更されたデータのみを更新することでパフォーマンスを向上させることができます。

于 2012-11-25T14:27:00.490 に答える