2009-08-06 4 views
0

-je mettre ce code dans tous mes viewControllers:Quelles sont certaines des causes possibles d'un UIView qui ne tourne pas rarement lorsqu'il est revisité?

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

    if (orientation == UIInterfaceOrientationLandscapeRight) { 
     CGAffineTransform transform = self.view.transform; 

     // Use the status bar frame to determine the center point of the window's content area. 
     //CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; 
     //CGRect bounds = CGRectMake(0, 0, statusBarFrame.size.height, statusBarFrame.origin.x); 
     CGPoint center = CGPointMake(320/2, 480/2); 

     // Set the center point of the view to the center point of the window's content area. 
     self.view.center = center; 

     // Rotate the view 90 degrees around its new center point. 
     transform = CGAffineTransformRotate(transform, (M_PI/2.0)); 
     self.view.transform = transform; 
    } 

et j'ai aussi:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 

    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 

je peux voir que les codes ne fonctionnent pas correctement comme ils le devraient, mais une fois dans un certain temps, il est une occasion rare que le contrôleur de vue principal n'a pas réussi à pivoter en mode paysage après que j'ai remis sa vue à la vue principale. La chance que cela se produise est très rare, mais cela me harcèle. De plus, je peux voir que cela se produit plus souvent sur l'iphone. Sur le simulateur, j'ai rappelé que cela n'arrive jamais. Savez-vous quelles sont les causes possibles? Merci d'avance.

Répondre

0

J'ai trouvé la cause de mon programme iphone.

L'une des causes possibles est la mémoire. Cette méthode ci-dessous sera appelée lorsque le système est faible sur la mémoire:

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

Un UIView « invisible » est déchargé lorsque cette méthode est appelée. Lorsque vous êtes sur le point de revoir cette vue, le périphérique l'a rechargé, mais peut-être parce que vous avez défini les paramètres (pour la rotation, etc.) dans un endroit où il ne sera pas appelé lorsqu'il sera rechargé. Vous pouvez utiliser:

- (void)viewDidLoad { 

    UIApplication* application = [UIApplication sharedApplication]; 
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight; 

    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation([MyMath radd:90]); 
    landscapeTransform = CGAffineTransformTranslate (landscapeTransform, -80, 83); 

    [self.view setTransform: landscapeTransform]; 
    [super viewDidLoad]; 
} 

Il se produit dans l'appareil à cause de nous parlons mémoire réelle sur l'appareil réel. Vous pouvez utiliser "Matériel> Simuler l'avertissement de la mémoire" lorsque vous utilisez le simulateur.

Questions connexes