Quali sono alcune delle possibili cause di un UIView raramente non vengano ruotate impostando rivisitato?

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

Domanda

ho messo questo codice in tutte le mie 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;
    }   

e ho anche:

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

    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Posso capire che i codici funzionano correttamente come dovrebbero, ma una volta ogni tanto, c'è una rara occasione che il principale controller della vista non è riuscito a girare per la modalità orizzontale dopo che ho messo la sua vista posteriore di essere vista principale. La possibilità che si verifica è molto raro, ma questo mi è fastidioso. Inoltre, posso vedere che si verifica più spesso su iPhone. Sul simulatore, ho ricordato che mai accadere. Sapete quali sono le possibili cause per questo? Grazie in anticipo.

È stato utile?

Soluzione

Ho trovato la causa del mio programma iphone.

Una delle possibili cause è la memoria. Questo metodo seguito verrà chiamato quando il sistema è basso sulla memoria:

- (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 "invisibile" viene scaricato quando viene chiamato questo metodo. Quando si è in procinto di rivedere questo punto di vista, il dispositivo ricaricato, ma forse perché si impostano i parametri (per la rotazione, ecc) in un luogo dove non sarà chiamato quando viene ricaricato. È possibile utilizzare:

- (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];
}

Si verifica nel dispositivo a causa di che stiamo parlando di memoria reale sul dispositivo reale. È possibile utilizzare "Hardware> Simula memoria Avviso" quando si utilizza il simulatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top