5

私のプロジェクトでは、縦方向の回転のみを許可しましたが、ViewController横方向も有効にしたいと考えています。私はこれViewControllerを として提示しています。メソッドまたは iOS 6 メソッドModalViewControllerを使用してみましたが、実際には何も機能しませんでした。これらのメソッドが呼び出されたにもかかわらず、ビューは回転しませんでした。- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation-(NSUInteger) supportedInterfaceOrientations

この後、私はそれらの通知を聞いて mysref で回転させようとしました:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotate:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];

しかし、viewin メソッドを手動で回転させることはできましたが、didRotate非常に面倒で、. を回転させることはできませんStatusBar

のような標準的な方法を使用したいshouldAutorotateToInterfaceOrientationのですが、方法がわかりません。誰?

4

4 に答える 4

6

これをアプリの delegate.m に追加します

# pragma mark - Rotation

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if ([self.window.rootViewController isKindOfClass:[MVYSideMenuController class]]) {

        // Get topmost/visible view controller
        UIViewController *currentViewController = [self.window.rootViewController.childViewControllers lastObject];
        // Check whether it implements a dummy methods called canRotate
        if ([currentViewController respondsToSelector:@selector(canRotate)]) {
            // Unlock landscape view orientations for this view controller
            return UIInterfaceOrientationMaskAllButUpsideDown;
        }
    }

    // Only allow portrait (standard behaviour)
    return UIInterfaceOrientationMaskPortrait;
}
-(void)canRotate
{
}

次に、このメソッドを追加します

-(void)canRotate
{
    // just define the method, no code required here
}

回転を提供するすべてのViewController(.mファイル)で。-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientationデバイスが回転したときに反応するメソッドをここに含めることもできます。

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    switch (orientation) {
        case 1:
        case 2:
            //NSLog(@"portrait");
            break;

        case 3:
        case 4:
            //NSLog(@"landscape");
            break;
        default:
            //NSLog(@"other");
            break;
    }
}
于 2014-07-15T08:34:00.853 に答える
2

回転が必要な画面のナビゲーションコントローラーをサブクラス化します。

.mで

// Older versions of iOS (deprecated) if supporting iOS < 5
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation    {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

// iOS6
 - (BOOL)shouldAutorotate {
return YES;
 }

 // iOS6
 - (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}

これは、iOS6の概要ページで設定されている回転方法を上書きします。

iOS 6では、ビューコントローラは、回転メソッドについて親またはルートコントローラのみを参照します

于 2012-12-26T14:18:01.143 に答える