2012-09-05 8 views
5

Chciałbym użyć storyboardów do tworzenia aplikacji. Mogę znaleźć wiele informacji o tym, jak z niego korzystać z nawigacją lub kontrolerem tab-kontrolera, ale nie mam żadnej z nich.Identyfikatory ios bez kontrolerów nawigacji

Moim celem jest stworzenie aplikacji, która ma różne widoki, ale bez korzystania z nawigacji lub tabcontroller. Jak to zrobić?

Odpowiedz

2

Dlaczego ich nie chcesz? Wygląda na to, że robisz coś dla siebie.

Możesz mieć kontroler nawigacyjny, który nie ma widocznego interfejsu użytkownika, jest odpowiedzialny tylko za popychanie i otwieranie innych kontrolerów UIViewController, a wtedy domyślny typ przełączania push będzie działał.

Jeśli jednak nie chcesz, aby naprawdę, możesz je zawsze zrobić custom segue class i użyć go do zarządzania stosu kontrolera widoku.

+1

Jak ukryć interfejs w serii ujęć? A następnie w jaki sposób programowo popychać i otwierać ViewControllers? – Crashalot

6

W przypadku serii ujęć IOS, jeśli nie chcesz korzystać z nawigacji, nie możesz używać funkcji pchania. Następnie możesz użyć modalnej segue lub niestandardowej segue. W modalnej segue, istnieją cztery przejścia:

  1. Pokrycie pionowe
  2. Odwróć w poziomie
  3. Krzyż Rozpuścić
  4. Częściowa Curl

Jednak wszystkie z tych predefiniowanych animacji Segue nie może preforma poziomej przesuwanej animacji. Jeśli chcesz użyć poziomego efektu przesuwania, musisz użyć niestandardowego przejścia. Musisz zastąpić tę funkcję:

- (void) perform 
{ 
UIViewController *desViewController = (UIViewController *)self.destinationViewController; 

UIView *srcView = [(UIViewController *)self.sourceViewController view]; 
UIView *desView = [desViewController view]; 

desView.transform = srcView.transform; 
desView.bounds = srcView.bounds; 

if(isLandscapeOrientation) 
{ 
    if(isDismiss) 
    { 
     desView.center = CGPointMake(srcView.center.x, srcView.center.y - srcView.frame.size.height); 
    } 
    else 
    { 
     desView.center = CGPointMake(srcView.center.x, srcView.center.y + srcView.frame.size.height); 
    } 
} 
else 
{ 
    if(isDismiss) 
    { 
     desView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y); 
    } 
    else 
    { 
     desView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y); 
    } 
} 


UIWindow *mainWindow = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
[mainWindow addSubview:desView]; 

// slide newView over oldView, then remove oldView 
[UIView animateWithDuration:0.3 
       animations:^{ 
        desView.center = CGPointMake(srcView.center.x, srcView.center.y); 

        if(isLandscapeOrientation) 
        { 
         if(isDismiss) 
         { 
          srcView.center = CGPointMake(srcView.center.x, srcView.center.y + srcView.frame.size.height); 
         } 
         else 
         { 
          srcView.center = CGPointMake(srcView.center.x, srcView.center.y - srcView.frame.size.height); 
         } 
        } 
        else 
        { 
         if(isDismiss) 
         { 
          srcView.center = CGPointMake(srcView.center.x + srcView.frame.size.width, srcView.center.y); 
         } 
         else 
         { 
          srcView.center = CGPointMake(srcView.center.x - srcView.frame.size.width, srcView.center.y); 
         } 
        } 
       } 
       completion:^(BOOL finished){ 
        //[desView removeFromSuperview]; 
        [self.sourceViewController presentModalViewController:desViewController animated:NO]; 
       }]; 
} 

Jeśli nadal masz problem, możesz sprawdzić ten wpis. Posiada również film na YouTube, aby pokazać, w jaki sposób realizować ten niestandardowy segue:

Create Push Segue Animation Without UINavigation Controller

+0

Znalazłem to rozwiązanie również w Internecie: http://stackoverflow.com/questions/15139909/auto-layout-screen-rotation-and-uiview-animation/20958850#20958850 – asdfasdfads