iOS будет правильно использовать RootteToInterfaceOrientation - PullRequest
3 голосов
/ 24 июня 2011

У меня очень простой UIViewController, и я пытаюсь выяснить, как использовать willRotateToInterfaceOrientation.мой UIViewController имеет очень простой метод viewDidLoad:

-(void)viewDidLoad {
    [super viewDidLoad];

    theBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 48.0f)];
    theBar.tintColor = [UIColor orangeColor];

    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"The Title"];
    item.hidesBackButton = YES;
    [theBar pushNavigationItem:item animated:YES];
    [item release];

    [self.view addSubview:theBar];
}

Так что в основном у меня просто UINavigationBar вверху моего контроллера.Вот и все.Я реализовал несколько методов поворота, основываясь на том, что нашел в Интернете:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {

    if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) {
        theBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 640, 48)];
    }
}

Итак, я запускаю приложение в портретном режиме, а затем поворачиваю в альбомном режиме.И в основном, theBar все еще остается нормального размера и не изменяется.Я уверен, что это глупый вопрос, но как правильно использовать возможность вращения?Я хочу сделать так, чтобы он также работал, если приложение запускается в ландшафтном режиме.Как лучше всего инициализировать мои компоненты при первом запуске UIViewController, помня о том, что мне нужна поддержка обеих ориентаций, а также помня о том, что я хочу иметь возможность изменять размер всего, основываясь на изменениях ориентации на протяжении всей продолжительностииз жизни UIViewController?Спасибо!

1 Ответ

7 голосов
/ 24 июня 2011

То, что вы хотите сделать, это изменить фрейм вашего существующего объекта theBar, а не создавать новый.Вы можете сделать это примерно так:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation 
                                         duration:(NSTimeInterval)duration {
    CGRect f = CGRectMake(0, 
                          0, 
                          CGRectGetWidth(self.view.frame), 
                          CGRectGetHeight(theBar.frame);    
    theBar.frame = f;
}

Обратите внимание, что используется значение self.view.frame, которое содержит значения после поворота.Также обратите внимание, что функция, которую я здесь использую, отличается от вашей.Я не проверял это с функцией, которую вы используете, поэтому я не могу сказать, сработает ли это или нет.Наконец, вы можете полностью избежать этого, просто установив маску авторазмера на панели в viewDidLoad вместо:

[theBar setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...