当界面方向颠倒时呈现视图控制器

时间:2014-04-23 15:42:54

标签: ios uiinterfaceorientation presentviewcontroller

我的iPhone应用支持颠倒的界面方向: 当用户将手机翻过来(以便主页按钮位于顶部)时,整个用户界面将垂直翻转。

但是,尝试从我的视图控制器 A (在此示例中,我提供标准邮件编辑器视图控制器)中显示一些视图控制器 B 时会出现问题:< / p>

- (IBAction)buttonTapped:(id)sender {

    MFMailComposeViewController *mailVC = [MFMailComposeViewController new];
    mailVC.mailComposeDelegate = self;

    [self presentViewController:mailVC animated:YES completion:nil];

}

当触发此方法时,首先发生的事情是(蓝色)视图控制器 A 无论出于何种原因立即垂直翻转而没有动画(如第一个屏幕截图所示)→为什么?

接下来,呈现的视图控制器 B 从底部移动到视图中(应该如此)。

presenting view controller B

当解雇视图控制器 B 时,它会立即翻转,并从视图移动到顶部(而不是从它出现的方向,如第二个屏幕截图所示)。

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    [self dismissModalViewControllerAnimated:YES];
}

dismissing view controller B

这是iOS中的错误还是如何避免这种奇怪的行为?

(我只想要像普通肖像模式一样展示视图控制器的标准动画 - 没有这些翻转。)

1 个答案:

答案 0 :(得分:2)

我认为MFMailComposeViewController并不支持颠倒的界面导向,这就是为什么它可以被解释为错误。 Apple建议不要对iPhone应用使用颠倒的界面方向。其主要原因可以用这样的例子来解释:

  1. 用户打开应用程序并将iPhone旋转至倒置方向。
  2. 此时有人打电话给他。
  3. 用户尝试接听来电并忘记将手机旋转至默认纵向。
  4. 因此,iPhone的麦克风靠近用户的耳朵和扬声器靠近嘴巴。
  5. 这不是用户友好的体验 我想在你的网站上使用颠倒的方向。

    然而,如果使用颠倒的界面方向是必需的条件,那么你做出这样的伎俩:
    创建MFMailComposeViewController类别并覆盖方法supportedInterfaceOrientations以支持必要的方向,并在创建MFMailComposeViewController时将其导入到类中:

    // MFMailComposeViewController+Orientation.h file
    #import <MessageUI/MessageUI.h>
    
    @interface MFMailComposeViewController (Orientation)
    
    @end
    
    // MFMailComposeViewController+Orientation.m file
    #import "MFMailComposeViewController+Orientation.h"
    
    @implementation MFMailComposeViewController (Orientation)
    
    - (NSUInteger)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
    }
    
    @end
    

    注意:我不确定这个技巧是否会被传递给Apple应用程序审批中心导致覆盖现有类别的方法。