UIView подпредставление UIWindow не вращается - PullRequest
7 голосов
/ 05 января 2012

Я добавляю UIView к UIWindow, это не ключевое окно. Я бы хотел, чтобы UIView вращалось при вращении устройства. Какие-либо специальные свойства окна или вида, которые мне нужно установить? В настоящее время вид не вращается.

Мне известно о том, что только первое подпредставление keyWindow приложения рассказывает о поворотах устройства. В качестве теста я добавил свой вид в первое подпредставление keyWindow. Это заставляет представление вращаться. Однако представление, являющееся подпредставлением первого подпредставления keyWindow, не будет работать по различным эстетическим причинам.

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

Ответы [ 2 ]

7 голосов
/ 17 июня 2012

UIView не обрабатывает повороты, UIViewController делает.Итак, все, что вам нужно, это создать UIViewController, который реализует shouldAutorotateToInterfaceOrientation и устанавливает этот контроллер как rootViewController для вашего UIWindow

Что-то вроде этого:

    UIViewController * vc = [[[MyViewController alloc] init] autorelease];

    vc.view.frame = [[UIScreen mainScreen] bounds];
    vc.view.backgroundColor = [UIColor colorWithWhite:0 alpha:0.4];

    //you vc.view initialization here

    UIWindow * window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    window.windowLevel = UIWindowLevelStatusBar;
    window.backgroundColor = [UIColor clearColor];
    [window setRootViewController:vc];
    [window makeKeyAndVisible];

и я использовал этот MyViewController, потомуЯ хочу, чтобы он отражал изменения основного приложения

    @interface MyViewController : UIViewController

    @end

    @implementation MyViewController

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
    {
        UIWindow *window = ((UIWindow *)[[UIApplication sharedApplication].windows objectAtIndex:0]);
        UIViewController *controller = window.rootViewController;

        if (!controller) {
            NSLog(@"%@", @"I would like to get rootViewController of main window");
            return YES;
        }
        return [controller shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
    }
    @end

, но вы всегда можете просто вернуть YES для любой ориентации или написать свою логику, если хотите.

2 голосов
/ 05 января 2012

Вы можете добавить код ниже к вашему проекту

[[NSNotificationCenter defaultCenter] addObserver: автоматический выбор: @selector (didRotate :) имя: UIDeviceOrientationDidChangeNotification объект: ноль];

и создал функцию для ее обработки.

...