当 iPhone 处于标准的“纵向”方向时,我将如何查看一个视图,并在旋转到横向时切换到不同的视图(例如图形或其他东西),反之亦然?
问问题
350 次
2 回答
3
禁用该视图的方向(假设第一个视图是横向)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation == UIInterfaceOrientationLandscapeRight); }
然后将此添加到 viewDidAppear
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:[UIDevice currentDevice]];
并在某处添加此方法
- (void) orientationChanged:(NSNotification *)note
{
UIDevice * device = note.object;
switch(device.orientation)
{
case UIDeviceOrientationPortrait:
// Present View Controller here
break;
default:
break;
};
}
在另一个视图上做同样的事情,但向后看,横向关闭而不是纵向。
不要忘记取消注册通知。
(或者使用带有两个控件但不带栏的导航视图,并根据使用的方向简单地显示您想要的那个)
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
于 2012-06-19T00:56:57.943 回答
1
首先阅读 UIViewControllers 的工作原理:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
然后,在您的 UIViewController 子类中,利用willRotateToInterfaceOrientation:duration:
更改您的视图。
例如
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
// if portrait
[self.landscapeView removeFromSuperview];
[self.view addSubview:self.portraitView];
// if landscape
[self.portraitView removeFromSuperview];
[self.view addSubview:self.landscapeView];
}
并添加适当的if
语句或switch
案例以确定要执行的操作。
于 2012-06-19T00:52:58.157 回答