2013-09-12 5 views
0

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

при навигации все идеально, используя метод push, вид вращается отлично, ничего не делая; , но когда я использую [сам существующий ...] или [self.navigationcontroller present ...], вид замещает поворот, событие хуже, контроллеры сжимаются и меняют позиции.

такой же вид вращается нормально, если он нажат. supportedInterfaceOrientation создан для поддержки всех, кроме с ног на голову, если авторотирование возвращает да.

Компонент sms в Iphone похож на то, что я хочу сделать, панель uinavigation в верхней части подходящей, в панели uinavigation есть uitabbutton, который представляет новый uiviewController с uinavigation bar и uitextfield. Кнопка uinavigation имеет отменить uitabbutton и save uitabbutton.

Спасибо

+1

Я хотел бы использовать ECSlidingViewController лично – aug2uag

+0

я уже реализован DDMenuController и он работает отлично подходит для этого, кроме. Я не могу вернуться. но если это не может быть решительно, я вернусь в воскресенье, чтобы воссоздать приложение. Когда я искал что-то, чтобы сделать ящики, я видел много примеров, но все рекомендуют DDMenuController, потому что это проще. –

+0

Мне кажется, это не проще! – aug2uag

ответ

0

У меня были проблемы вращая контроллер представления в одном из моих проектов, и я в конечном итоге реализации этого решения, надеемся, что это поможет.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    isShowingLandscapeView = NO; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(orientationChanged:) 
               name:UIDeviceOrientationDidChangeNotification 
               object:nil]; 
    // Do any additional setup after loading the view. 
} 
-(BOOL) shouldAutorotate{ 
    return NO; 
} 

- (void)orientationChanged:(NSNotification *)notification 
{ 
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; 
    CGRect rect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width);; 


    switch (deviceOrientation) { 
     case 1: 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; 
      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:0.1]; 
      self.view.transform = CGAffineTransformMakeRotation(0); 
      self.view.bounds = [[UIScreen mainScreen] bounds]; 
      [UIView commitAnimations]; 
      break; 
     case 2: 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown animated:NO]; 
      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:0.1]; 
      self.view.transform = CGAffineTransformMakeRotation(-M_PI); 
      self.view.bounds = [[UIScreen mainScreen] bounds]; 
      [UIView commitAnimations]; 
      break; 
     case 3: 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; 
      //rect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width); 
      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:0.1]; 
      self.view.transform = CGAffineTransformMakeRotation(M_PI_2); 
      self.view.bounds = rect; 
      [UIView commitAnimations]; 
      break; 
     case 4: 
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO]; 
      [UIView beginAnimations:nil context:NULL]; 
      [UIView setAnimationDuration:0.1]; 
      //rect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width); 
      self.view.transform = CGAffineTransformMakeRotation(-M_PI_2); 
      self.view.bounds = rect; 
      [UIView commitAnimations]; 
      break; 

     default: 
      break; 
    } 
} 

UPDATE:

-(NSUInteger) supportedInterfaceOrientations{ 
    return UIInterfaceOrientationPortrait; 
} 
+0

Я буду использовать завтра и ответю вам, я дома, а mac находится в офисе, но перед тем, как у меня возникнут два вопроса: вы отключили авторотацию, это потому, что вы обрабатываете его вручную в ориентации изменилось? Я не хочу поддерживать вверх дном, поэтому код все равно будет в порядке, если я опустил его случай? будет ли этот код работать, если я пропустил эту строку: [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; ?? –

+0

yes Я отключил авторотацию для этого представления, потому что он вращался со всеми подзонами, а некоторые из них не были на 0,0, и это дает головную боль. Вам нужно уведомление, иначе orientationChanged никогда не будет вызван. Будет затронут только viewcontroller, где вы добавите код. И да, вы можете опустить случай 2. Также вы можете изменить продолжительность анимации до 0,3, если хотите сделать его похожим на оригинальный авторотат. –

+0

Он работает примерно на 80%; строка состояния не вращается, поэтому, когда она находится в ландшафте, она становится вертикальной в левой/правой части и закрывает некоторые виды. Я еще ничего не пропустил. –

Смежные вопросы