Quali sono alcune delle possibili cause di un UIView raramente non vengano ruotate impostando rivisitato?
-
11-09-2019 - |
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.
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.