2011-05-29 83 views
1

是否有可能(根本)加載具有自定義AnimationTransition的XIB?使用自定義轉換加載XIB?

我所做的是創建一個「覆蓋」屏幕的動畫,我想要的是在動畫完成播放後,我希望它顯示新的XIB。

我似乎無法找到任何適當的解決方案...任何想法?

要更清楚:按下按鈕 - >播放動畫(封面) - >加載XIB。


再次問候!是的,你描述的最後一種方式就是我正在做這件事的方式。我有兩個UIViews(可能是錯誤已經存在),被放置關閉邊界的兩邊,(如X.-160.y.0和x.320y.0)

-(IBAction) leftDoor{ 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    closeDoor1.center = CGPointMake(closeDoor1.center.x +160, closeDoor1.center.y); 


    [UIView commitAnimations]; 

} 


-(IBAction) rightDoor{ 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

    closeDoor2.center = CGPointMake(closeDoor2.center.x -160, closeDoor2.center.y); 

    [UIView commitAnimations]; 
} 

所以,我我要做的不是「拆分」當前的視圖,然後打開一個新的XIB,我搜索的效果是一個「閉幕式」效果,這就是爲什麼我使用UIView(以爲我把圖形放在那些頂部,比如兩個ImageViews)。然後,爲了加載新的XIB ...這是我真的困惑的地方。我嘗試這種方法的第一種方法是製作三個IBActions,包括上面提到的兩個IBAction,然後將所有三個(多個動作)應用於一個按鈕。因此,對於切換視圖我做了這樣的事情:` - (IBAction爲)newViewDisplay:(ID)發送{

theView *newViewController = [[theView alloc] 
             initWithNibName:@"theView" bundle:nil]; 

[self.view addSubview:newViewController.view]; 

} `

正如你所說,這也許是在我的頭上,但如果我剛剛有一些方向,我會走英里做這項工作。這真的會讓我的應用程序煥然一新。非常感謝您花時間回答我的問題,一切順利/安迪

+0

什麼是XIB?它是視圖控制器還是視圖等?然後你需要加載它。之後,您可以應用動畫。 – 2011-05-29 19:19:56

+0

它是一個ViewController。那麼,如果我先加載它,我是否會在代碼中聲明動畫?在功能內? Sry,有點困惑......謝謝! – andy 2011-05-29 20:25:14

+0

雅,你加載它,添加一個動畫塊,然後在屏幕上設置新視圖的動畫。 – 2011-05-29 21:41:52

回答

2

你在屏幕上覆蓋着什麼?

想想這樣,(聽起來)你有2個視圖,舊的和存儲在這個xib中的新視圖。動畫是次要的。

您需要加載新視圖,然後將其顯示(可以不在屏幕上),然後將其移動(將其移動到您想要的位置)。如果你想把它分成兩部分,一部分在底部,另一部分在屏幕頂部,然後在中間相遇,我認爲這很複雜,超過了你的技能水平。 (不要在這裏意味着)。

如果您嘗試按照描述執行分割動畫,則可以完成,但您需要'僞造'。它會涉及到一個'截圖'(分類),分裂它,移動這兩個圖像,以便他們遇到一個動畫,加載下面的視圖,然後刪除圖像。棘手的東西。

你必須有這種動畫嗎?

如果你可以發佈你的代碼,我可以重新排列它,並添加到它,爲你。

不過,您需要澄清一下您確實想要做什麼。

更新3:我爲自動反向添加了另一個選項。

//您可以將兩個門都添加到一個動畫塊中。

//Create an animation block. Ease Out is better for this animation but you can change it. 
[UIView animateWithDuration:1.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseOut | UIViewAnimationOptionAutoreverse) animations:^{ 
    closeDoor1.center = CGPointMake(closeDoor1.center.x +160, closeDoor1.center.y); 
    closeDoor2.center = CGPointMake(closeDoor2.center.x -160, closeDoor2.center.y); 

}completion:^(BOOL finished){ 
    if (finished) { 
      //When finished, create the VC if it doesn't exist, and insert it below the 'closed door'. 

     if (newViewController == nil) { 
      UIViewController *newViewController = [[UIViewController alloc] initWithNibName:@"theView" bundle:nil]; 
     } 

     [self.view insertSubview:newViewController.view belowSubview: closeDoor2];; 
     [self.closeDoor1 removeFromSuperview]; 
     [self.closeDoor2 removeFromSuperview]; 

    } 
}]; 
+0

Im新的到stackoverflow,所以下面是我的回答評論:)一些代碼,和一些解釋。謝謝! – andy 2011-05-30 09:59:51

+0

只需編輯您的原始問題,並將您的答案移至原始問題。 – 2011-05-30 12:17:53

+0

謝謝soooo多!解決方案可能只是在我的面前,但是...我實現了你的代碼(再次感謝),並在XIB中創建了一個新的VC(按鈕所在的那個),將「newViewController」連接到文件所有者和動畫工作正常..雖然,完成後,它只顯示一個白色的屏幕。我確定我一定錯過了一步。你認爲可能是什麼問題? – andy 2011-05-30 14:29:11