Я новичок, так что прости меня, если это глупое сомнение ... Я недавно изменил свой проект с xcode3 на xcode4, и теперь есть некоторые проблемы, и я не знаю почему ...
Чтобы управлять фреймом, размером содержимого моего прокрутки и его изменениями при изменении ориентации, я получил следующее:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
scrollView.frame = CGRectMake(0,0,480,300);
[scrollView setContentSize:CGSizeMake(480,560)];
}
else {
scrollView.frame = CGRectMake(0,0,320,460);
[scrollView setContentSize:CGSizeMake(320,560)];
}
[scrollView flashScrollIndicators];}
Я думаю, что в Xcode3 приложение вызывалоэтот метод при загрузке экрана, поэтому он отлично работал в любой ситуации.
Но в Xcode4 приложение не вызывает этот метод при загрузке экрана.Он вызывает это только тогда, когда меняется ориентация (я не знаю, почему существует эта разница).Таким образом, мой прокрутки не работает, когда экран загружен.Он только начинает работать, когда я меняю ориентацию устройства.
Затем я попробовал это:
- (void)viewDidLoad {
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft ||
[[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
scrollView.frame = CGRectMake(0,0,480,300);
[scrollView setContentSize:CGSizeMake(480,560)];
}
else {
scrollView.frame = CGRectMake(0,0,320,460);
[scrollView setContentSize:CGSizeMake(320,560)];
}
[scrollView flashScrollIndicators];
[super viewDidLoad];}
Это, очевидно, работало, НО ... что-то очень странное происходит ...
Если перейти к другому виду (в книжной ориентации), а затем изменить ориентацию на Пейзаж, а затем вернуться к первому виду (в альбомной ориентации), маска автоматического изменения размера сходит с ума.Весь контент переходит на правую сторону, как будто представление имеет большую ширину, чем оно есть на самом деле.И я не могу получить доступ к части контента.Но если теперь я изменю ориентацию на Портрет, все снова в порядке, даже если я снова перейду в Пейзаж.Таким образом, это неправильно, когда я прихожу к представлению из другого вида по альбомной ориентации.
Вот как я перехожу из вида в другой вид:
- (IBAction) btnUnVano:(id) sender {
PE2100UnVano *controller = [[PE2100UnVano alloc] initWithNibName:@"PE2100UnVano" bundle:nil];
controller.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:controller animated:YES];
[controller release];}
Что мне делать?
Pd: Извините за мой английский
EDIT
OK, эта часть исправлена.Я удалил willAnimateRotationToInterfaceOrientation, и теперь он работает правильно с этим:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Si la orientación es horizontal..
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft ||
[[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
scrollView.frame = CGRectMake(0,0,480,300);
[scrollView setContentSize:CGSizeMake(480,560)];
}
// Si la orientación es vertical..
else {
scrollView.frame = CGRectMake(0,0,320,460);
[scrollView setContentSize:CGSizeMake(320,560)];
}
// Mostrar durante un instante los indicadores de scroll
[scrollView flashScrollIndicators];
// Retorna YES para soportar todas las orientaciones posibles
return YES;}
Теперь есть еще одна проблема.На некоторых экранах я возвращаюсь к предыдущему экрану с этим кодом:
- (IBAction) btnAtrasTabla:(id) sender {
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];}
В этом случае проблема автоматического изменения размера появляется снова.Я перехожу на этот экран в «Портрет», я изменяю на «Пейзаж», я возвращаюсь к предыдущему, и предыдущий появляется с неправильным автоматическим размером.Затем я меняю ориентацию, и все снова верно ... есть идеи?