Каковы возможные причины того, что UIView редко не поворачивается при повторном посещении?
-
11-09-2019 - |
Вопрос
Я поместил этот код во все мои контроллеры представления:
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;
}
и еще у меня есть:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Я вижу, что коды работают правильно, как и должны, но время от времени возникает редкий случай, когда контроллер основного представления не может повернуть в ландшафтный режим после того, как я снова возвращаю его вид в качестве основного.Вероятность того, что это произойдет, очень редка, но это меня беспокоит.Более того, я вижу, что на айфоне это происходит чаще.На симуляторе, насколько я помню, такого никогда не происходило.Знаете ли вы, каковы возможные причины этого?Заранее спасибо.
Решение
Я нашел причину моей программы iphone.
Одной из возможных причин является память.Этот метод ниже будет вызываться, когда в системе недостаточно памяти:
- (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.
}
«Невидимый» UIView выгружается при вызове этого метода.Когда вы собираетесь снова увидеть это представление, устройство перезагрузило его, но, возможно, потому, что вы установили параметры (поворот и т. д.) в таком месте, где оно не будет вызываться при перезагрузке.Вы можете использовать:
- (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];
}
Это происходит в устройстве, потому что мы говорим о реальной памяти на реальном устройстве.При использовании симулятора вы можете использовать «Оборудование > Предупреждение о имитации памяти».