【问题标题】:Calling viewWillTransitionToSize: manually手动调用 viewWillTransitionToSize:
【发布时间】: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 PageOnePageTwo。现在PageTwo 中有类似的东西用于方向控制。控制流从PageOnePageTwo

//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


    【解决方案1】:

    无论您在viewWillTransitionToSize:withTransitionCoordinator: 中做什么,您都应该在viewWillLayoutSubviewsviewDidLayoutSubviews 中执行。当视图控制器的视图第一次出现在屏幕上时,它们会在旋转时发送,UIKit 在调用viewWillLayoutSubviews 之前更新视图的框架。

    【讨论】:

    • 我试试这个并报告
    • @MistyD 需要一段时间来报告。
    • 帮助了我。谢谢!
    • 嗨 Rob,如果我使用 viewWillLayoutSubviews,它不会一直做我需要做的事情吗?
    • “一直”是什么意思?该消息仅在视图控制器的视图需要布局时发送,这可能不会经常发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2019-02-22
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多