blog iphone 4, iPad et iPod Touch france

Forum iPhone 4, iPad & iPod Touch - iPhon.fr et VIPad.fr

Forum Apple iPhone 4, iPhone 3G S, iPod Touch, iPad, forfaits et accessoires !

Vous n'êtes pas identifié.

Annonce

Bienvenue sur le forum du blog iPhon.fr, le blog iPhone et iPad France.

Pensez à poster dans la bonne rubrique, à respecter les propos des autres internautes, ne pas utiliser le langage SMS et enfin à utiliser la fonction 'recherche' !
Et ... Gardez le sens de l'humour, de la convivialité et de la décontraction ... On n'est pas là pour se prendre la tête ;-).


ATTENTION : les emails Hotmail (ie. en '@hotmail.xxx') ne permettent pas de recevoir l'email de confirmation de création du compte

#1 07-02-2010 06:39:21

fatbas
Habitué
Date d'inscription: 14-07-2008
Messages: 52

Redessiner une Vue avec "setNeedsDisplay"

Bonjour,

J'ai un problème (probablement de logique logiciel) avec "setNeedsDisplay".

Voici ce que possède mon apps :

Un tabBarController avec à l'intérieur du premier tab un NavBarController avec 2 ViewController. Lorsque j'appuis sur un bouton à droite dans la NavBar je lance la deuxième ViewController. Comme j'utilise drawRect: j'ai une sous-classe "UIView" avec une connexion dans l'IB.

Donc lorsque j'ai une instance de ma UIView drawRect est automatiquement lancé mais lorsque j'essais de mettre à jour la Vue avec setNeedsDisplay drawRect n'Est pas relancé.

Dans ma ViewController principale j'ai l'IBAction suivante sur mon bouton du NavBarController.

- (IBAction)openLiveGraph:(id)sender {
    graphView = [[GraphViewController alloc] initWithNibName:@"GraphViewController" bundle:nil ];
    [[self navigationController] pushViewController:graphView animated:YES];
    UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:nil];
    self.navigationItem.backBarButtonItem = button;
    NSLog(@"%d",graphView.liveEnabled);
   
    gVLive = [[graphLiveView alloc] init];
   
    [button release], button = nil;
}


lorsque ce controller reçoit de l'information de l'accéléromètre j'envois le message suivant :

[gVLive uHistoryWithX:accelX Y:accelY Z:accelZ];



Dans ma sous classe il y a ceci :

- (void)uHistoryWithX:(float)x Y:(float)y Z:(float)z {
   
    history[nextIndex][0] = x;
    history[nextIndex][1] = y;
    history[nextIndex][2] = z;

    // Advance buffer pointer to next position or reset to zero.
    nextIndex = (nextIndex + 1) % kHistorySize;
    NSLog(@"Updating %f", x);
    [self setNeedsDisplay];
}


Dans ma console je vois donc "Updating" à chaque rafraichissement de l'accéléromètre mais drawRect n'est jamais déclanché.

- (void)drawRect:(CGRect)clip {
    CGSize size = [self bounds].size;
    CGContextRef context = UIGraphicsGetCurrentContext();
    unsigned i;
    unsigned index = nextIndex;
    NSLog(@"drawRect");
   

   ....... code code code......

    CGContextSetAllowsAntialiasing(context, true);
}


en théorie je devrais voir dans la console "drawRect" à chaque fois que uHistoryWithX est appelé.

J'espère que j'ai été claire dans ma question. Si quelqu'un peut m'éclaicir un peu sur le sujet car je ne comprend pas. Mon code est de plus en plus mal-propre et je devrai probablement le reprendre du début smile

Merci beaucoup a+

~FatBas

Hors ligne

 

#2 07-02-2010 16:35:36

Phonitive
Développeur iPhone invité
Lieu: Toulouse
Date d'inscription: 09-06-2009
Messages: 87
Site web

Re: Redessiner une Vue avec "setNeedsDisplay"

gVLive n'est ajouté nul part... d'après ton code il s'agit d'une UIView, il faut donc l'ajouter quelque part (peut être [graphview.view addSubview:gVLive])
Tu push un controller, et tu crée une autre instance d'une vue qui n'est pas affichée... il y a un défaut de conception dans ton code...

Hors ligne

 

#3 08-02-2010 16:57:09

fatbas
Habitué
Date d'inscription: 14-07-2008
Messages: 52

Re: Redessiner une Vue avec "setNeedsDisplay"

Merci beaucoup..

Comme je disais mon code est tellement rendu spaghetti par tous mes tests!! J'ai refait à partir de Zero et maintenant c'est nickel. Tu as raison c'est parce que je créais une instance d'une vue non affichée!

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

L'iPhone 4 sur iPhon.fr, le blog de l'iPhone et de l'iPod Touch - blog iPad

iPhon.fr et son forum ne sont pas liés à Apple, Orange, SFR ou autres et les marques citées sont la propriété de leurs détenteurs respectifs.

Cliquer ici pour visiter le site officiel d'Apple France - Cliquer ici pour visiter le site officiel iPhone d'Orange - Cliquer ici pour visiter le site SFR iPhone