Как позволить UIViewcontroller (Game center) реагировать на ориентацию (альбомная или портретная)? - PullRequest
1 голос
/ 20 июля 2011

Я использовал код ниже, чтобы показать игровой центр, но если я поверну iPhone, ничего не произойдет, и таблица лидеров будет перевернута (не отвечает за ориентацию)

код

// Create leaderboard view w/ default Game Center style
        GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];

        // If view controller was successfully created...
        if (leaderboardController != nil)
        {
            // Leaderboard config
            leaderboardController.leaderboardDelegate = self;   // The leaderboard view controller will send messages to this object
            leaderboardController.category = category;  // Set category here
            leaderboardController.timeScope = GKLeaderboardTimeScopeAllTime;    // GKLeaderboardTimeScopeToday, GKLeaderboardTimeScopeWeek, GKLeaderboardTimeScopeAllTime

            // Create an additional UIViewController to attach the GKLeaderboardViewController to
            myViewController = [[UIViewController alloc] init];

            // Add the temporary UIViewController to the main OpenGL view
        //  [[[CCDirector sharedDirector] openGLView] addSubview:myViewController.view];
            [[[[CCDirector sharedDirector] openGLView] window] addSubview:myViewController.view];

            // Tell UIViewController to present the leaderboard
            [myViewController presentModalViewController:leaderboardController animated:YES];
            leaderboardController.view.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(90.0f));
            leaderboardController.view.bounds = CGRectMake(0, 0, 480, 320);
            leaderboardController.view.center = CGPointMake(160,240 );
        }

Есть ли другой способ показать это? любая помощь плз

Спасибо

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Да, я нашел конкретное решение, поэтому я заменяю if (leaderboardController != nil){...} на приведенный ниже код.

код:

if (leaderboardController != NULL) {
        leaderboardController.category = category; 

        leaderboardController.timeScope =GKLeaderboardTimeScopeAllTime;

        leaderboardController.leaderboardDelegate = self; 
        AppDelegate *delegate = [UIApplication sharedApplication].delegate; 

        [delegate.viewController presentModalViewController:leaderboardController animated:YES];
    }

также необходимо добавить свойство для viewController в AppDelegate.h Сначала добавьте объявление свойства, как показано ниже:

@property (nonatomic, assign) RootViewController *viewController;

Затем переключитесь на AppDelegate.m и синтезируйте переменную, как показано ниже:

@synthesize viewController;

Наконец, поскольку этот код использует UIKit для отображения контроллера представления, лучше всего настроить Cocos2D на использование поворота UIViewController. Перейдите в GameConfig.h, закомментируйте текущий #define GAME_AUTOROTATION kGameAutorotationNone и настройте его так, как показано:

#define GAME_AUTOROTATION kGameAutorotationUIViewController
0 голосов
/ 21 июля 2011

Вы должны создать подклассы обоих ваших контроллеров представления, родительского контроллера представления и модального контроллера представления, который это представляет (кто-то исправит меня, если я неправ, но дочерние контроллеры только обрабатывают вращение, если их родитель также обрабатывает их) и переопределитьвызванный метод:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Вы должны вернуть YES для обеих ориентаций (книжная и альбомная).По умолчанию контроллеры представления на iphone возвращают только YES для UIInterfaceOrientationPortrait, поэтому вам нужно обрабатывать поворот для альбомной ориентации.

Прочтите этот Справочник классов UIViewController и этот Технические вопросы и ответы QA1688: Почему мой UIViewController не вращается вместе с устройством? .

...