2012-09-05 128 views
5

我想使用storyboard來創建我的應用程序。 我可以找到很多關於如何將它與導航或tabcontroller一起使用的信息,但我不想要它們中的任何一個。沒有導航控制器的ios segues

我的目標是創建一個具有不同視圖但不使用導航或tabcontroller的應用程序。 我該怎麼做?

回答

2

你爲什麼不要他們?這好像你正在爲自己工作。

你可以有一個是不可見的UI導航控制器,它只是爲了推動和彈出等UIViewControllers然後默認推SEGUE類型將只是工作負責。

但是,如果你真的不想讓他們,你總是可以做一個custom segue class並使用它來管理你的視圖控制器堆棧。

+1

你怎麼隱藏在故事板的用戶界面?然後,如何以編程方式推送和彈出ViewControllers? – Crashalot

6

在IOS故事板中,如果你不想使用導航,那麼你就不能使用push segue。然後,您可以使用模態賽格或自定義賽格。在模態SEGUE,有四個轉變:

  1. 蓋垂直
  2. 水平翻轉
  3. 跨解散
  4. 偏曲

然而,所有這些預定義SEGUE動畫不能瓶坯橫向滑動動畫segue。如果你想使用水平滑動效果,你必須使用自定義的繼續。你需要覆蓋這樣的功能:

- (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]; 
       }]; 
} 

如果你仍然有問題,你可以檢查這個職位。它也有一個YouTube視頻向您展示如何實現這一習俗賽格瑞:

Create Push Segue Animation Without UINavigation Controller

+0

我還發現在互聯網上該解決方案:http://stackoverflow.com/questions/15139909/auto-layout-screen-rotation-and-uiview-animation/20958850#20958850 – asdfasdfads