3 回答
TA贡献1802条经验 获得超5个赞
您必须加载一个视图,然后检查方向并在需要时加载另一个视图。shouldAutorotateToInterfaceOrientation:如果要旋转,则返回“是”来检查方向。
我使用导航控制器来管理过渡。如果我具有人像视图并且设备旋转,则我推动风景视图,然后在返回肖像时弹出风景视图。
编辑:
我应该在shouldAutorotateToInterfaceOrientation中为所有方向返回YES,但是在应用启动时会调用此方法吗?您是否将视图推入此功能?
方向常数不是您查询的全局变量,而是系统发送给控制器的消息的一部分。因此,在加载视图控制器之前,您无法轻松检测方向。相反,您可以硬接线该应用程序,使其以特定的方向(通常是纵向)开始,然后立即旋转。(请参阅移动Safari。它始终以纵向开始,然后旋转为横向。)
这是我用来交换人像和风景视图的两种方法。
所有三个视图控制器都具有此方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
肖像有:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) {
[self.nav pushViewController:rightLVC animated:NO];
}
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) {
[self.nav pushViewController:leftLVC animated:NO];
}
}
每个景观控制器具有以下功能:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (toInterfaceOrientation==UIInterfaceOrientationPortrait) {
[self.nav popViewControllerAnimated:NO];
}
该应用程序以纵向启动。如果设备的方向为横向,则按适当的横向。当设备旋转回纵向时,它将弹出风景。对于用户而言,它看起来像是同一视图将其自身重组为不同的方向。
TA贡献1810条经验 获得超5个赞
我稍加修改,以允许在肖像或风景中初步装入笔尖
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if( !nibNameOrNil ) nibNameOrNil = [self nibNameRotated:[[UIApplication sharedApplication] statusBarOrientation]];
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
return self;
}
- (NSString*) nibNameRotated:(UIInterfaceOrientation)orientation
{
if( UIInterfaceOrientationIsLandscape(orientation)) return [NSString stringWithFormat:@"%@-landscape", NSStringFromClass([self class])];
return [NSString stringWithFormat:@"%@", NSStringFromClass([self class])];
}
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
NSString *nibname = [self nibNameRotated:toInterfaceOrientation];
[[NSBundle mainBundle] loadNibNamed:nibname owner:self options:nil];
[self viewDidLoad];
}
- 3 回答
- 0 关注
- 504 浏览
添加回答
举报