2

私のiOSアプリケーションは、PortraitUpsideDownを除くすべての向きをサポートしています。しかし、アプリケーションでは、縦向きでのみ表示したい設定のビューがあります。したがって、このビューが表示されるたびに、必要に応じて回転され、ポートレートモードになります。つまり、ユーザーはデバイスを縦向きモードで回転させて設定を設定し、このビューインターフェイスを閉じた後、縦向きになります。問題は、設定ビューが非表示になった後、このビューが表示された後に自動回転をブロックするため、インターフェイスが横向きのままになることです。したがって、ビューを非表示にした後、インターフェイスを現在のデバイスの向きに手動で更新したいと思います。どうすればいいですか?


self.view.hidden=NO;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
self.view.alpha=1.0;
[UIView commitAnimations];

このコードは、スーパービューのLongPressGestureの後にOptionsViewControllerから呼び出されます。

4

3 に答える 3

2

Marek R が提示したソリューションに基づいて、コントローラーの向きを強制的に更新する UIViewController 拡張機能を作成しました。iOS の新しいバージョン以降、彼のソリューションは機能しなくなりました。ここに、副作用を伴わずに(コントローラーのサポートされている方向メソッドを考慮するために)方向の更新を強制するソリューションを投稿します。それが役に立てば幸い。

UIViewController *vc = [[UIViewController alloc]init];
[[vc view] setBackgroundColor:[UIColor clearColor]];
[vc setModalPresentationStyle:(UIModalPresentationOverFullScreen)];
[self presentViewController:vc animated:NO completion:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [vc dismissViewControllerAnimated:YES completion:completion];
    });
}];
于 2016-05-11T10:51:14.080 に答える
0

設定に使用しているView Controllerに次を追加するだけです。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
于 2012-06-13T11:34:07.880 に答える
0

この回避策を呼び出すとうまくいきます:

-(void)forceOrientationUpdate {
    UIViewController *c = [[UIViewController alloc]init];
    [self presentModalViewController:c animated:NO];
    [self dismissModalViewControllerAnimated:NO];
    [c release];
}
于 2014-10-14T14:29:31.940 に答える