2012-01-11 2 views
0

У меня есть splitViewController. Это подробно Подробно VCmasterView не всегда корректно отображает/скрывает

-(void)viewDidLoad 
{ 
    self.masterIsVisible = YES; 
    //a botton in navigation bar to hide or show the master view. 
    [button addTarget:self action:@selector(showOrHideMasterView) 
    forControlEventsTouchUpInside] 
    //gesture control to swipe right or left to slide master view in and out. 
    [swiperight addTarget:self action:@selector(showMasterView)]; 
    [swipLeft addTarget:self action:@selector(hideMasterView)]; 
} 

-(void)showOrHideMasterView 
{ 
if (self.masterIsVisible) 
    [self hidemasterView]; self.masterIsVisible = NO; 
else 
    [self showMasterView]; self.masterIsVisible = YES; 
} 

-(void)hideMasterView 
{ 
    //hides master view by substracting masterview's width from its origin.x 
} 

-(void)showMasterView 
{ 
    //shows master View by adding masterview's width to its origin.x 
} 
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:  (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation 
{ 
    return NO; 
} 

Все почти работает по назначению. Проблема: в одной ориентации & & мастер не виден .. тогда устройство меняет ориентацию .. Мастер-вид вместо того, чтобы сдвигаться с экрана, толкает представление детали другим способом. Я знаю, потому что теперь флаг установлен как masterIsVisible = NO вместо YES. Что я могу сделать, чтобы изменить флаг на YES при вращении устройства. выглядит тривиально, но, похоже, не выясняется.

Я пробовал зарегистрироваться для devicechnagenotification в UIDevice, но это не сработало. BOOL - ДА в любой ориентации. Пример Apple использует это, но похоже, что здесь не правильный подход.

+0

Почему вы не используете Split View метод управления делегата '- (BOOL) splitViewController: (UISplitViewController *) SVC shouldHideViewController: (UIViewController *) VC inOrientation: (UIInterfaceOrientation) ориентации '? –

+1

Я использую его. Я не упоминал там. Извиняюсь. Я вернул NO для этого метода делегата. – yourAnswerIsAwesome

+0

Что произойдет, если вы всегда возвращаете 'YES' для этого метода? –

ответ

0

Хорошо, я, наконец, понял, правильно ли установлен флаг для изменения ориентации. Я добавил следующий метод

-(void)willAnimateRotationToInterfaceOrientation: 
    (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
    self.masterIsVisible = NO; 
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
    self.masterIsVisible = YES; 
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
    self.masterIsVisible = YES; 
else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    self.masterIsVisible = NO; 
} 
Смежные вопросы