У меня есть UIViewController, который я использую для управления «всплывающим» представлением для просмотра изображений в моем приложении. Он поддерживает авторотацию, так как автоматически изменяет размер изображения, чтобы оно соответствовало размеру независимо от ориентации. Это работает отлично, но только в первый раз, когда я инициализирую и отображаю контроллер представления. Когда он закрывается, я удаляю UIView из моей иерархии представлений и освобождаю контроллер представления, но в следующий раз, когда я создаю его и добавляю в свою иерархию представлений, он перестает получать сообщения -shouldAutorotateToInterfaceOrientation при повороте телефона.
Вот как я создаю и отображаю его:
popupVC = [[PopupVC alloc] init];
[popupVC viewWillAppear:NO];
[[[UIApplication sharedApplication] keyWindow] addSubview:popupVC.view];
[popupVC viewDidAppear:NO];
вот как я удаляю / отпускаю его, когда он закончен:
[popupVC viewWillDisappear:NO];
[popupVC.view removeFromSuperview];
[popupVC viewDidDisappear:NO];
[popupVC release];
popupVC = nil;
Я пробовал перебирать [[UIApplication sharedApplication] keyWindow] подпредставления, чтобы увидеть, не находится ли мое всплывающее окно наверху, но это всегда так. И каждый раз у него другой адрес, поэтому я знаю, что это другой экземпляр класса контроллера представления.
По запросу, вот полный метод loadView из PopupVC:
- (void)loadView {
UIView *myView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
myView.backgroundColor = self.overlayColor;
myView.autoresizesSubviews = NO;
myView.hidden = YES;
myView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
self.view = myView;
[myView release];
_isVisible = NO;
UIView *myMaskView = [[UIView alloc] initWithFrame:self.view.bounds];
myMaskView.backgroundColor = [UIColor clearColor];
myMaskView.clipsToBounds = YES;
myMaskView.hidden = YES;
myMaskView.autoresizesSubviews = NO;
myMaskView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:myMaskView];
self.imageMaskView = myMaskView;
[myMaskView release];
UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
myImageView.center = self.view.center;
myImageView.hidden = NO;
myImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleHeight;
[self.imageMaskView addSubview:myImageView];
self.imageView = myImageView;
[myImageView release];
UIButton *myImageButton = [UIButton buttonWithType:UIButtonTypeCustom];
myImageButton.frame = self.view.frame;
myImageButton.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleHeight;
[myImageButton addTarget:self action:@selector(clickImage:) forControlEvents:UIControlEventTouchUpInside];
[self.imageMaskView addSubview:myImageButton];
self.imageButton = myImageButton;
UIActivityIndicatorView *myActivityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
myActivityView.hidden = YES;
[self.view addSubview:myActivityView];
myActivityView.center = self.view.center;
self.activityView = myActivityView;
[myActivityView release];
}
viewWillAppear:, если все дело не в том, чтобы предотвратить анимацию. - person G Gordon Worley III   schedule 30.09.2009UITableViewDelegateметоде, когда пользователь выбирает изображение для показа. МойPopupVC -loadViewметод настраивает представление и используемые им подпредставления. У меня появилась привычка явно звонить-viewWillAppear:после того, как я обнаружил, что моиUITabBarControllerне работают должным образом, если вы не отправите им сообщение ... просто привычка, я думаю. - person pix0r   schedule 30.09.2009