2010-09-30 4 views
2

J'ai un contrôleur de vue qui alterne 2 vues à chaque toucher. Chacune des vues remplace la fonction drawRect.L'orientation de UIView est incorrecte après le premier tirage

Fonctionne lorsque l'iPad est en position portrait, mais en mode paysage, la vue est affichée dans le bon sens une seule fois. Après cela, ils apparaissent toujours en orientation portrait.

Qu'est-ce qui ne va pas?

En ViewController:

- (void)loadView 
{ 
v= [[View2 alloc] init]; 
self.view =v; 
} 

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
x++; 
if (x%2==0) 
{ 
    v= [[View2 alloc] init]; 
} 
else { 
    v=[[View3 alloc] init]; 
} 
self.view = v; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

Répondre

0

je résolu le problème. C'est simple et logique. Fondamentalement, le problème est que seule la première vue reçoit des événements d'orientation. Lorsque vous modifiez la vue, les gestionnaires d'événements doivent à nouveau être connectés pour que la nouvelle vue puisse détecter l'orientation. Une solution facile consiste à créer une vue fictive en tant que parent et à ajouter view1 et view2 en tant que sous-vues. Mon nouveau code de contrôleur est le suivant:

- (void)loadView 
{ 
    self.view =[[UIView alloc] init]; 

    v= [[View2 alloc] init]; 
    [self.view addSubview:v]; 
} 

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    x++; 
    if (v!=NULL) 
     [v removeFromSuperview]; 

    if (x%2==0) 
    { 
     v= [[View2 alloc] init]; 

    } 
    else { 
     v=[[View3 alloc] init]; 
    } 

    [self.view addSubview:v]; 

} 
Questions connexes