【发布时间】:2015-05-08 13:03:42
【问题描述】:
我目前有一个名为 Page2 的 UiViewController
现在,如果将 Iphone 的方向更改为横向,则会调用以下方法,这很好
-(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
/*The orientation of the phone just changed*/
}
现在我的问题是,如果用户已经在 ViewController page1 中处于横向模式并转到 UIViewController Page2,则不会调用上述方法。我知道我可以使用以下代码检查手机的当前方向
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if(orientation == UIInterfaceOrientationLandscapeLeft)
{
//Its in landscape mode
}
但是我不知道将什么参数传递给方法(仅当方向改变时才会自动调用)如果我在横向模式下检测到它,我想手动调用此方法。关于如何获取当前大小以传递给宽度大于高度的方法的任何建议(因为它处于横向模式)
-(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator ;
我试过这样做
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
{
[self viewWillTransitionToSize:self.view.frame.size withTransitionCoordinator:nil];
}
但是高度大于宽度表明它仍处于纵向模式......我做错了什么?如何手动调用此方法并传递宽度大于高度的当前尺寸?
更新:
我想提供更多背景知识。我目前有两个 UIViewControllers PageOne 和 PageTwo。现在PageTwo 中有类似的东西用于方向控制。控制流从PageOne 到PageTwo
//When device rotates
-(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
DKTuner* sensitivityTuner;
if (size.width > size.height)
{ //Yes this is the landscape mode - Realign some controls to a different position.
.....
}
else
{
// this is portrait mode
.....
}
}
现在我在PageTwo 中的代码逻辑假设用户以纵向模式输入它。然而实际上这并不总是正确的,因为用户可以在 LandscapeMode 中输入pageTwo。在这种情况下,控件不会重新调整为横向模式,因为不会在 pageTwo 中调用重定向方法。我的问题是如何手动调用重定向方法viewWillTransitionToSize 并传递尺寸宽度大于高度的尺寸参数?
【问题讨论】:
标签: ios objective-c iphone