1

1 つの self.view に 4 つのホスティング ビューがあります。

self.hostView.frame = CGRectMake(0.0, 0.0, 512.0, 352.0);
self.hostView2.frame = CGRectMake(512.0, 0.0, 512.0, 352.0);
self.hostView3.frame = CGRectMake(0.0, 352.0, 512.0, 352.0);
self.hostView4.frame = CGRectMake(512.0, 352.0, 512.0, 352.0);

HostingView でプロットを作成します。私はいくつかのデータを持つ4つの配列を持っています。

self.arr1 = [NSMutableArray arrayWithObjects:
                [NSDecimalNumber numberWithFloat:36.23],
                [NSDecimalNumber numberWithFloat:38.44],
                nil];
self.arr2 = [NSMutableArray arrayWithObjects:
                [NSDecimalNumber numberWithFloat:36.23],
                [NSDecimalNumber numberWithFloat:38.44],
                nil];
self.arr3 = [NSMutableArray arrayWithObjects:
                [NSDecimalNumber numberWithFloat:36.23],
                [NSDecimalNumber numberWithFloat:38.44],
                nil];
self.arr4 = [NSMutableArray arrayWithObjects:
                [NSDecimalNumber numberWithFloat:36.23],
                [NSDecimalNumber numberWithFloat:38.44],
                nil];

メソッドジェネレーターを呼び出すタイマーを使用します

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(generator) userInfo:nil repeats:YES];

-(void)generator
{
    [self.bd1 removeObjectAtIndex:0];
    NSInteger count=arc4random()%30;
    [self.bd1 addObject:[NSNumber numberWithInteger:(20+count)]];
    [graph reloadData];

    [self.bd2 removeObjectAtIndex:0];

    [self.bd2 addObject:[NSNumber numberWithInteger:(20+count)]];
    [graph2 reloadData];

    [self.bd3 removeObjectAtIndex:0];

    [self.bd3 addObject:[NSNumber numberWithInteger:(20+count)]];
    [graph3 reloadData];

    [self.bd4 removeObjectAtIndex:0];

    [self.bd4 addObject:[NSNumber numberWithInteger:(20+count)]];
    [graph4 reloadData];
}

それは38秒で動作し、フリーズします。うまく機能させるために私ができること。リアルタイムにするためにデータをリロードする必要がある

何か案は?

4

1 に答える 1

1

1 つのアプローチについては、プロット ギャラリーサンプル アプリの「リアルタイム プロット」デモを参照してください。更新のたびにすべてのプロット データとラベルを読み込む代わりに、変化する点のみを更新するようにプロットに指示します。-insertDataAtIndex:numberOfRecords:新しいデータ ポイントを挿入し、-deleteDataInIndexRange:不要になった古いデータを削除するために使用します。

于 2013-05-26T19:12:35.763 に答える