我有一个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]
的子视图,以查看我的弹出视图是否不在顶部,但它总是在顶部。而且每次都有不同的地址,所以我知道它是视图控制器类的不同实例。如请求的那样,这里是
PopupVC
中完整的loadView
方法:- (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:
。 - Gordon Seidoh WorleyUITableViewDelegate
方法中设置了它,当用户选择要显示的图像时。我的PopupVC -loadView
方法设置视图及其使用的子视图。我养成了一个习惯,在发现我的UITabBarController
不起作用,除非发送消息给它们之后,明确调用-viewWillAppear:
。只是一个习惯吧。 - pix0r