2009-02-10 9 views
7

Mam aplikację opartą na tabbarach.Jak obrócić widok do krajobrazu w aplikacji z kartą

Tworzę dwa widoki, jeden portretowy i drugi w trybie poziomym w Konstruktorze interfejsu.

Teraz chcę coś takiego jak aplikacja na iPoda. Chcę, aby widok krajobrazu był wyświetlany na pełnym ekranie i ukrywał pasek paska na pasku adresu.

robię do pracy zasadniczej to:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
           duration:(NSTimeInterval)duration { 
    if (self.landscape) { 
     if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
     { 
      self.view = self.portrait; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(360)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
     { 
      self.view = self.landscape; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
     { 
      self.view = self.landscape; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
     } 
     else 
     { 
      self.view = self.portrait; 
      self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-180)); 
     } 
    } 
} 

Ale wszystko działa bałagan. Widok poziomy nie wypełnia prawidłowo obszaru, a elementy sterujące znajdują się w niewłaściwych miejscach, różniących się od siebie pierwszym.

Ponadto, nadal nie znalazł sposób, aby ukryć wszystko inne ...

Odpowiedz

1

można ukryć pasek stanu wywołując

setStatusBarHidden:(BOOL) 

na odniesienie UIApplication, jak tak.

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

[application setStatusBarHidden:YES]; 

} 

Aby pozbyć Zakładki mogą dokonać wylot odniesienie w konstruktorze Interface do kodu i nazywają

[myUITabBar removeFromSuperview]; 

To może działać, mimo że jej nie testowane, jak dla innych pytania, nie jestem w 100%, nie rozwiązałem wcześniej problemów.

1

Ok, to jak daleko mogę umieścić to do pracy:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
           duration:(NSTimeInterval)duration { 
    if (self.landscape) { 
     if (toInterfaceOrientation == UIInterfaceOrientationPortrait) 
     { 
      self.view = self.portrait; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(360)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) 
     { 
      self.view = self.landscape; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90)); 
     } 
     else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) 
     { 
      self.view = self.landscape; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
     } 
     else 
     { 
      self.view = self.portrait; 
      //self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-180)); 
     } 
    } 
} 

Teraz w AppDelegate:

- (void) didRotate:(NSNotification *)notification 
{ 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    [UIView beginAnimations:nil context:NULL]; 

    if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight) 
    { 
     [tabBarController.view setAlpha:0.0]; 
     [tabBarController.view removeFromSuperview]; 

     [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; 
    } else { 
     [tabBarController.view setAlpha:1.0]; 
     [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];  
    } 
    [UIView commitAnimations]; 
} 

Ale potem jak ustawić aktualny pogląd i jak przywrócić umieszczenie zakładek?

1

Kiedy patrzę na iPoda, wydaje mi się, że widok TabBarController nie jest w żaden sposób zastępowany ani modyfikowany. Wydaje mi się, że istnieje tylko przejście między widokiem kontrolera tabbarcontroller a widokiem Coverface.

Gdybym był tobą, chciałbym spróbować (nie jestem pewien, czy to może działać) z kontrolerem Coverflow, z jego widokiem wyświetlanym na górze widoku tabBarController. Jeśli to uniemożliwiłoby tabBarController autorotację jego widoku, ale w tym momencie zaniósłbym jego widok i znikł w widoku Coverflow, który byłby tylko krajobrazowy.

Nie wiem, czy statusBar zachowałby się poprawnie, a ja pozwoliłbym na wiele szczegółów, ale w każdym razie myślę, że dobrze byłoby mieć dwa osobne kontrolery, jeden pokazany w pejzażu, drugi (tabBar) w pionie.

Mam nadzieję, że ci to pomoże.

1

Wygląda na to, że sporo programistów, którzy chcą mieć element paska kart, przenosi ich do widoku poziomego na pełnym ekranie (bez paska stanu, bez paska kart), a następnie wraca.

Wysłałem zapytanie o to, czy jest to rzeczywiście możliwe na forum programistów Apple, ale nie otrzymałem jeszcze odpowiedzi.

Dlaczego jest to trudne? (przepraszam, pytanie dla początkujących?) Wygląda na to, że pewne oczywiste rzeczy nie powinny być trudne. Nikt, kogo jeszcze nie znalazłem, ma na to jasną odpowiedź.

5

Obejrzyj przykładowy kod "AlternateViews" firmy Apple.

Podstawową ideą jest wykrycie fizycznej orientacji urządzenia za pomocą powiadomień, a następnie aktywacja nowego kontrolera widoku "modalnie" i żądanie pełnego ekranu. Wyłączysz rotację interfejsu, wykonując polecenie shouldAutorotate ... return YES tylko dla jednej orientacji, ponieważ robisz to wszystko ręcznie z powiadomieniami. Po zmianie fizycznej orientacji kontroler widoku modalnego jest prezentowany lub odrzucany.

+0

Dziękuję za to !! – mobius

Powiązane problemy