Quelles sont quelques-unes des causes possibles d'un UIView rarement pas être mis en rotation lorsqu'il est revisité?

StackOverflow https://stackoverflow.com/questions/1236728

Question

Je mets ce code dans tous mes viewControllers:

    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 vois que les codes ne fonctionnent pas correctement comme ils le devraient, mais une fois dans un certain temps, il y a une occasion rare que le contrôleur principal de vue n'a pas réussi à tourner pour le mode paysage après que je mets une vue de dos à la vue principale. La chance qu'il se produit est très rare, mais cela me taraude. De plus, je peux voir qu'il se produit le plus souvent sur l'iPhone. Sur le simulateur, je me suis souvenu qu'il ne se produira jamais. Savez-vous quelles sont les causes possibles de cela? Nous vous remercions à l'avance.

Était-ce utile?

La solution

J'ai trouvé la cause de mon programme d'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 voir ce point de vue encore, le dispositif rechargées, mais peut-être parce que vous définissez les paramètres (pour la rotation, etc.) dans un endroit où il ne sera pas appelé quand il est 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 Avertissement mémoire » lorsque vous utilisez le simulateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top