Forum Apple iPhone 4, iPhone 3G S, iPod Touch, iPad, forfaits et accessoires !
Vous n'êtes pas identifié.
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 ;-).
Pages: 1
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 ![]()
Merci beaucoup a+
~FatBas
Hors ligne
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
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
Pages: 1
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