Ориентация на iOS: Пробовал и то, и другое.

Приложение будет показывать вещи на втором дисплее нормально. Проблема в том, что когда я поворачиваю iPad, содержимое не вращается на iPad.

Посмотрели:

http://developer.apple.com/library/ios/#qa/qa1688/_index.html
Ориентация интерфейса не изменится на альбомную при запуске приложения
iPhone SDK: ориентация (альбомная и книжная ориентация)
http://www.bytesizecreations.com/2009/05/working-with-orientation-changes-on/
Приложение для iPhone в ландшафтном режиме, системы 2008
Приложение для iPhone в ландшафтном режиме, системы 2008
http://www.iphonedevsdk.com/forum/iphone-sdk-development/7366-interface-builder-landscape-design.html#post186977

Буду признателен всем, кто может сказать мне, что именно мне нужно добавить! :)

#import "iPadVGAOutputTestAppDelegate.h"

@implementation iPadVGAOutputTestAppDelegate

@synthesize deviceWindow;
@synthesize consoleTextView;
@synthesize externalWindow;

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation.
    return YES;
}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    externalWindow.hidden = YES;


    // Make iPad window visible.
    [deviceWindow makeKeyAndVisible];

    // Check for external screen.
    if ([[UIScreen screens] count] > 1) {
        [self log:@"Found an external screen."];

        // Internal display is 0, external is 1.
        externalScreen = [[[UIScreen screens] objectAtIndex:1] retain];
        [self log:[NSString stringWithFormat:@"External screen: %@", externalScreen]];

        screenModes = [externalScreen.availableModes retain];
        [self log:[NSString stringWithFormat:@"Available modes: %@", screenModes]];

        // Allow user to choose from available screen-modes (pixel-sizes).
        UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"External Display Size" 
                                                         message:@"Choose a size for the external display." 
                                                        delegate:self 
                                               cancelButtonTitle:nil 
                                               otherButtonTitles:nil] autorelease];
        for (UIScreenMode *mode in screenModes) {
            CGSize modeScreenSize = mode.size;
            [alert addButtonWithTitle:[NSString stringWithFormat:@"%.0f x %.0f pixels", modeScreenSize.width, modeScreenSize.height]];
        }
        [alert show];

    } else {
        [self log:@"External screen not found."];
    }

    return YES;
}


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    UIScreenMode *desiredMode = [screenModes objectAtIndex:buttonIndex];
    [self log:[NSString stringWithFormat:@"Setting mode: %@", desiredMode]];
    externalScreen.currentMode = desiredMode;

    [self log:@"Assigning externalWindow to externalScreen."];
    externalWindow.screen = externalScreen;

    [screenModes release];
    [externalScreen release];

    CGRect rect = CGRectZero;
    rect.size = desiredMode.size;
    externalWindow.frame = rect;
    externalWindow.clipsToBounds = YES;

    [self log:@"Displaying externalWindow on externalScreen."];
    externalWindow.hidden = NO;
    [externalWindow makeKeyAndVisible];
}


- (void)log:(NSString *)msg
{
    [consoleTextView setText:[consoleTextView.text stringByAppendingString:[NSString stringWithFormat:@"%@\r\r", msg]]];
}


- (void)dealloc
{
    [consoleTextView release];
    [deviceWindow release];
    [externalWindow release];

    [super dealloc];
}


@end

person Mike    schedule 09.06.2011    source источник


Ответы (1)


shouldAutorotateToInterfaceOrientation: — это UIViewController метод. Делегат приложения не использует этот метод. Вы должны создать подкласс UIViewController и разместить свой контент в его представлении. Вам нужно будет установить соответствующие autoresizingMasks в представлении или передавать свои представления при каждом вращении.

Но если вы намерены продолжать использовать делегат приложения, вам следует использовать синглтон UIDevice для создания уведомлений об изменении ориентации, которые вы можете прослушивать.

person Deepak Danduprolu    schedule 10.06.2011