2 основных графика на 2 отдельных UIviews с динамическим обновлением данных - PullRequest
0 голосов
/ 03 мая 2011

Привет, в настоящее время я использую core-plot для рисования динамического графика и работает нормально, теперь я думаю добавить 2 графика на 2 отдельных представления

Я начал с "Утилиты приложений" сРисунок основного вида Graph-1 и чертеж Flipview Graph-2

График основного вида работает нормально, график обновляется и перезагружается каждые 2 секунды, но когда я нажимаю «flipviewWindow», graph2 всегда начинается с новых значений и с новымимассив graph2data (возможно, из-за повторного вызова graph2timer ???), но graph1data поддерживает только один NSTimer и работает нормально.

Я не хочу освобождать значения, потому что я хочу увидеть график с предыдущими значениямикак в Graph1.

Может кто-нибудь посоветовать, как реализовать 2 графика базового графика на 2 отдельных UIview с динамическим обновлением данных?моя графическая логика, как показано ниже

In MainViewController.m
    -(void)viewDidLoad{
    [super viewDidLoad];
    [self ConstructGraph1]
}

-(void)ConstructGraph1 {
        graph1 = [[CPXYGraph alloc] initWithFrame:CGRectZero];
    CPTheme *theme = [CPTheme themeNamed:kCPStocksTheme];
    [graph1 applyTheme:theme];
    mainViewWindow.hostedGraph=graph1;
    .
    .
    .
    .
    .
       myTimer1=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(graph1Timer:) userInfo:nil repeats:YES];
}

-(void) graph1Timer: (NSTimer *) Timer{
  NSTimeInterval aTimeInterval1 = [[NSDate date]
                                    timeIntervalSinceReferenceDate];
    Get JSON request and add object at every 2 sec, after succesfully fetching
    [graph1data addObject:...]
    [graph1 reloadData];
}

- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}

- (IBAction)showFlipWindow:(id)sender
{    
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil];
    controller.delegate = self;
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
    [controller release];
}

In FlipViewController.m
-(void)viewDidLoad{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; 
    [self ConstructGraph2]

}
//ConstructGraph2 uses the same logic to draw the graph and to fetch the results

-(void) ConstructGraph2 { 
        graph2 = [[CPXYGraph alloc] initWithFrame:CGRectZero];
    CPTheme *theme = [CPTheme themeNamed:kCPStocksTheme];
    [graph1 applyTheme:theme];
    mainViewWindow.hostedGraph=graph1;
    .
    .
    .
    .
    .
       myTimer2=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(graph2Timer:) userInfo:nil repeats:YES];
}

-(void) graph2Timer: (NSTimer *) Timer{
  NSTimeInterval aTimeInterval2 = [[NSDate date]
                                    timeIntervalSinceReferenceDate];
    Get JSON request and add object at every 2 sec, after succesfully fetching

    [graph2data addObject...];

    [graph2 reloadData];
}

- (IBAction)showMainWindow:(id)sender
{
    [self.delegate flipsideViewControllerDidFinish:self];
}

1 Ответ

0 голосов
/ 09 мая 2011

Я оптимизировал мой пример, отделив выборку данных от основного основного графика и добавив NSNotification для обновления данных, у меня возникли некоторые проблемы с утечкой памяти (/5280033/yajl-massiv-problem-utechki-pamyati).

Кроме того, у меня есть следующие изменения в контроллере, чтобы он не перезагружал весь график каждый раз, когда нажимается «Show Grpah2».

if(controller==nil){
    controller=[[FlipsideViewController alloc] initWithNibName:@"FlipsideViewController" bundle:nil];
    controller.delegate = self;
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
}
else{
    controller.delegate = self;
    controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:controller animated:YES];
}
...