Изменить вид только на одной вкладке в панели вкладок-Приложение (Альбомная-Книжная)?
-
19-09-2019 - |
Вопрос
Как я могу изменить вид при повороте iphone (сменить наконечник).Но это должно происходить только на одной вкладке!Я попробовал это с:
- (void)viewDidLoad {
LandscapeViewController *viewController = [[LandscapeViewController alloc]
initWithNibName:@"LandscapeView" bundle:nil];
self.landscapeViewController = viewController;
[viewController release];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification object:nil]; }
- (void)orientationChanged:(NSNotification *)notification
{
[self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0];
}
- (void)updateLandscapeView
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self presentModalViewController:self.landscapeViewController animated:YES];
isShowingLandscapeView = YES;
}
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
{
[self dismissModalViewControllerAnimated:YES];
isShowingLandscapeView = NO;
}
}
Но затем Альбомный режим появляется на всех вкладках.(Когда этот код загружается один раз).Есть какие-нибудь идеи?
Решение 3
Танки за ваши комментарии!Я нашел обходной путь:
//Remove Observer if not in Landscape
- (void)viewDidDisappear:(BOOL)animated {
if (isShowingLandscapeView == NO) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}
}
//Add Observer if not in Landscape
- (void)viewDidAppear:(BOOL)animated {
if (isShowingLandscapeView == NO) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
}
}
Другие советы
Что происходит, ваш контроллер представления получает UIDeviceOrientationDidChangeNotification
уведомление при каждом изменении вращения, независимо от того, отображается оно или нет.Вместо этого попробуйте использовать встроенные методы UIViewController
которые предназначены для реагирования на вращения.
Это из документов Apple (Посмотреть руководство по программированию контроллера).:
Контроллеры панели вкладок и поворот вида
Контроллеры панели вкладок поддерживают книжную ориентацию по умолчанию и не поворачиваются в альбомную ориентацию если только все контроллеры корневого представления не поддерживают такую ориентацию.Когда происходит изменение ориентации устройства , контроллер панели вкладок запрашивает свой массив контроллеров представления.Если какой-либо из них не поддерживает ориентацию, панель вкладок контроллер не меняет свою ориентацию.
Итак, я не уверен, что контроллер панели вкладок предназначен для поворота только для одного вида.