我是StackOverflow的新手,也是Objective-c的新手。
我已经试着寻找几个星期来找到一些能给我提示做什么的东西,但是我似乎无法在不问问题的情况下完成这个。感觉它应该很简单,但是......
我遇到了“rootView”控制器旋转的问题。它应该出现在风景中(在我决定使用导航控制器之前它已经完成)。模拟器以正确的方向显示,但它已将视图旋转90度向左旋转,因此文本从下到上,侧向读取,因此您必须将头部向左倾斜。视图的最左侧部分是可见的,但视图的其余部分从屏幕顶部开始。这是一个大型的程序(我发现,一般来说,使用objective-c,但仍然享受它......),但这里是我认为重要代码区域的要点:
在appDelegate中,我创建了一个窗口,我的rootViewcontroller和navcontroller:
// .h file:
UIWindow *window;
wordHelper3ViewController *viewController;
UINavigationController *navigationController;
然后在实施中:
//.m file
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Hide status bar
application.statusBarHidden = YES;
// --- Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
然后我在dealloc中释放所有这些。
在我的根视图中,我这样做:
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight){
return YES;
} else {
return NO;
}
}
我实现了以下内容,看看发生了什么,我立即在启动时收到日志消息:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
NSLog(@"didRotate...");
}
}
除此之外,我认为我的代码中没有做任何会影响视图的事情。现在,转到InterfaceBuilder:
在rootView和导航控制器的属性检查器中,方向设置为横向。对于rootView,在引用出口下,“视图”设置为文件的所有者。我还有一个附加到视图的操作(touchUpInside) - 我将其类更改为UIButton,因为当用户在后台的任何位置单击时我想要resignFirstResponder。
对于navigationController,在Referencing outlets下,它显示了从navigationController到appDelegate的连接。
在主窗口xib中,导航控制器显示在列表中,视图控制器显示为它的子视图。
viewcontroller也会在主窗口的对象列表中单独显示。
唯一突出我的是,当我双击窗口对象时,IT在纵向模式下以视觉方式显示。
有没有人有任何想法?
答案 0 :(得分:13)
如果您希望启动方向与初始纵向模式不同,则需要编辑info.plist
文件。添加“intial interface orientation”条目并设置所需的值。
以下是截图:
如果要旋转UINavigationController,则需要更多工作。请参阅this similar question for更多信息。
答案 1 :(得分:1)
我认为您的问题是您将导航控制器作为子视图添加到窗口,并且方向通知仅发送到“窗口”中的第一个子视图。
试试这个。
//.m file
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Hide status bar
application.statusBarHidden = YES;
// --- Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[viewController.view addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
令人讨厌,但是我只通过“窗口”中的每个子视图解决了方向问题,然后通过一个子视图控制一切(在本例中为viewController)
答案 2 :(得分:0)
如果我误解了,请原谅我,但不应该这样做
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight){
return YES;
} else {
return NO;
}
}
真的是这个
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}