Ios 调用ViewWillTransitionOnSize:手动
我目前有一个名为Ios 调用ViewWillTransitionOnSize:手动,ios,objective-c,iphone,Ios,Objective C,Iphone,我目前有一个名为Page2 现在,如果将Iphone的方向更改为横向,则调用以下方法,这很好 -(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { /*The orientation of the phone just changed*/
Page2
现在,如果将Iphone的方向更改为横向,则调用以下方法,这很好
-(void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
/*The orientation of the phone just changed*/
}
但是,我不知道将什么参数作为大小传递给该方法(仅当方向改变时才会自动调用),如果在横向模式下检测到该方法,我希望手动调用该方法。关于如何获得当前尺寸的任何建议,请转到下面的方法,其中宽度将大于高度(因为它处于横向模式)
但是,高度大于宽度,表明它仍处于纵向模式。。。我做错了什么?如何手动调用此方法并传递宽度大于高度的当前大小
更新:
我想提供更多的背景资料。我目前有两个UIViewControllerPageOne
和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
.....
}
}
//当设备旋转时
-(void)ViewWillTransitionOnSize:(CGSize)带有TransitionCoordinator:(id)coordinator的大小
{
DKTuner*灵敏度调谐;
如果(size.width>size.height)
{//是的,这是横向模式-将一些控件重新对齐到不同的位置。
.....
}
其他的
{
//这是肖像模式
.....
}
}
现在,我在
PageTwo
中的代码逻辑假定用户以纵向模式输入它。然而在现实中,这并不总是正确的,因为用户可以在景观模式下输入pageTwo
。在这种情况下,控件不会重新调整为横向模式,因为在第二页中不会调用重新定向的方法。我的问题是,如何手动调用重定向方法viewwilltransitionosize
,并传递一个尺寸宽度大于高度的尺寸参数?无论您在viewwilltransitionosize:withtransitionocordinator:
中执行什么操作,您可能应该在viewWillLayoutSubviews
或viewdillayoutsubviews
中执行此操作。当视图控制器的视图第一次出现在屏幕上时,这些视图将以旋转方式发送和,并且UIKit会在调用viewWillLayoutSubviews
之前更新视图的框架。我将对此进行尝试并报告back@MistyD那份报告需要一段时间,帮了我。非常感谢。嗨,罗布,如果我使用视图willlayoutsubviews
,它不会一直不必要地做我需要做的事情吗?你说的“一直”是什么意思?该消息仅在视图控制器的视图需要布局时发送,布局可能不太常见。
-(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];
}
//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
.....
}
}