0

縦向きモードでのみ動作するアプリがありますが、縦向きモードと横向きモードの両方をサポートする必要があるビューが 1 つあります。このビューから戻ると、アプリの残りの部分が台無しになります。

両方の向きをサポートする必要があるビューには、ライブ ストリームの再生に使用される webview が含まれています。

単純な設定 shouldAutorotateToInterfaceOrientation が機能しません。モーダルView Controllerも提示しないというトリック。ルートビューを削除して挿入するトリックもうまくいきません。

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait] (実際に動作する) はプライベート API であるため、使用することを恐れています。

4

4 に答える 4

0

すべて縦向きで動作するアプリがあり、フルスクリーンの写真を含む 1 つのビューのみが横向きをサポートしています。だから私はこの全画面表示をモーダルに提示し、私の FullscreenViewController.m

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return ([[UIApplication sharedApplication] statusBarOrientation]);
}

これが役に立つことを願っています

于 2012-10-05T08:18:32.743 に答える
0

[[UIDevice currentDevice] setOrientation:orientation]inviewWillAppear:またはto を使用して、viewDidAppear:アプリを目的の向きに回転させることができます。しかし、それは私的な電話であり、Apple があなたのアプリを承認するかどうかはわかりません :)(私のものは承認されました)。幸運を!

于 2012-10-05T09:20:30.833 に答える
0

実際、ここで述べたウィンドウ ビューの最初のビューを削除して挿入する方法は機能します。 横向きのUIWebview youtubeからiOS縦向きのみのアプリが返される

何らかの理由で、ウィンドウのサブビューで最初のビューを要求しないようにする必要があります。代わりにルートビューを自分で提供する必要があります。

したがって、私の解決策は、両方の向きをサポートするView Controllerに次のメソッドを実装することです:

-(void)viewWillAppear:(BOOL)animated
{
    m_b_avoid_landscape_orinetation = NO;

    [super viewWillAppear:animated];
}

-(void)viewWillDisappear:(BOOL)animated
{
    m_b_avoid_landscape_orinetation = YES;

    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    [[self getTabBar].view removeFromSuperview];
    [window addSubview:[self getTabBar].view];

    [super viewWillDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{
    if (m_b_avoid_landscape_orinetation)
        return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
    else
        return YES;
}

[self getTabBar] は、ウィンドウのサブビューの最初のビューとして機能するカスタム タブ バーを提供します。

編集iOS 6 ではもう動作しません。新しい supportedInterfaceOrientations メソッドを使用して、他の場所で説明したように、モーダル ダイアログを挿入および削除するソリューションを使用しました。

-(void)goBack
{
    m_b_avoid_landscpae_orinetation = YES;

    UIViewController *viewController = [[UIViewController alloc] init];
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    [window.rootViewController presentViewController:viewController animated:NO completion:^{
        [viewController dismissModalViewControllerAnimated:NO];
    }];

    [self.navigationController popViewControllerAnimated:YES];
}

-(NSUInteger)supportedInterfaceOrientations
{
    if (m_b_avoid_landscpae_orinetation)
        return UIInterfaceOrientationMaskPortrait;

    return UIInterfaceOrientationMaskAllButUpsideDown;
}
于 2012-10-05T09:00:53.363 に答える