我正在向UIView
添加UIWindow
,而不是keyWindow。我希望UIView
在设备旋转时旋转。 窗口上的任何特殊属性或我需要设置的视图?目前视图不会旋转。
我知道只有应用程序keyWindow
的第一个子视图被告知设备轮换。作为测试,我将视图添加到keyWindow
的第一个子视图中。这会导致视图旋转。然而,作为keyWindow
第一个子视图的子视图的视图不会因各种美学原因而起作用。
另一种方法是观察视图中的设备方向变化并自己编写旋转代码。但是,如果可能的话,我想避免编写此代码(在我看来,有一个额外的窗口更清晰)。
答案 0 :(得分:7)
UIView不处理旋转,UIViewController确实如此。 所以,你只需要创建一个UIViewController,它实现了shouldAutorotateToInterfaceOrientation并将这个控制器设置为你的UIWindow的rootViewController
类似的东西:
UIViewController * vc = [[[MyViewController alloc] init] autorelease];
vc.view.frame = [[UIScreen mainScreen] bounds];
vc.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.4];
//you vc.view initialization here
UIWindow * window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.windowLevel = UIWindowLevelStatusBar;
window.backgroundColor = [UIColor clearColor];
[window setRootViewController:vc];
[window makeKeyAndVisible];
我使用了这个MyViewController,因为我希望它能反映主应用程序的变化
@interface MyViewController : UIViewController
@end
@implementation MyViewController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
UIWindow *window = ((UIWindow *)[[UIApplication sharedApplication].windows objectAtIndex:0]);
UIViewController *controller = window.rootViewController;
if (!controller) {
NSLog(@"%@", @"I would like to get rootViewController of main window");
return YES;
}
return [controller shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
}
@end
但是如果你愿意,你可以随时为任何方向返回YES或写下你的逻辑。
答案 1 :(得分:2)
您可以在项目中添加以下代码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate :) name:UIDeviceOrientationDidChangeNotification object:nil];
并创建了处理它的函数。