我正在尝试使用UINavigationController创建一个UI,它将一些带有子UIViewController的UIViewController作为侧边栏视图。在横向方向上,它应该是右侧的条纹。在旋转到肖像时,它将保持在物理侧,而UINavigationController自动旋转,其他一切都与它一起。在纵向方向上,侧边栏因此成为底栏。
请看看样机。 UI Mockup
现在,怎么做?为NO
返回shouldAutorotateToInterfaceOrientation:interfaceOrientation:
并不会停止该侧边栏的轮换: - /
答案 0 :(得分:2)
在视图控制器的自动旋转检测方法中更改视图的框架和/或变换,如下所示:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)to duration:(NSTimeInterval)duration
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
// Calculate the new frame and rotation angle of the view
// e. g.:
if (UIInterfaceOrientationIsPortrait(to)) {
theView.frame = CGRectMake(0, 924, 768, 100);
theView.transform = CGAffineTransformIdentity;
} else {
theView.frame = CGRectMake(924, 0, 100, 768);
theView.transform = CGAffineTransformMakeRotation(M_PI / 2);
}
[UIView commitAnimations];
}
答案 1 :(得分:1)
CGAffineTransform t;
//You have to caculate the angel of view controller rotating
CGFloat rotateAngel = M_PI / 2;//replace 'M_PI / 2' with your view controllers rotation angel
t = CGAffineTransformMakeRotation(-rotateAngel);
[view setTransform:t];
答案 2 :(得分:1)
是否可以将侧视图与导航控制器视图分开(不要将其视为子视图)。因此,您可以更好地控制旋转。无论如何,您可以在视图内旋转图像。
答案 3 :(得分:1)
由于您在一个屏幕上混合了两个视图控制器,因此无法使用自动旋转。关闭父视图控制器和子视图控制器上的自动旋转,并在检测到旋转时自行执行所需的转换。自动旋转将旋转控制器视图下的所有视图(包括由其他视图控制器控制的子视图)。
或者,您可以先关闭视图(当您收到willRotateToInterfaceOrientation时),然后在收到didRotateFromInterfaceOrientation时以正确的方向将其滑回。