2014-06-19 57 views
0

我遇到問題:D。Objective C如何用按鈕點擊動畫子視圖

我目前正在使用SplitViewController。在開始時我想隱藏MasterView中的TableViewController。所以我決定在Storyboard中添加一個SubView到tableView中,在那裏會顯示一個小標籤。

因此,我在DetailView中做出選擇後,單擊按鈕我想隱藏子視圖並想顯示tableView。這一切都與動畫。

因此,這裏是我的代碼:

在TestTableViewController.m

-(void)AnimateView{ 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.1]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
fixedView.frame=CGRectMake(-500, 0,0,0); 
[UIView commitAnimations]; 
NSLog(@"test"); 

而在TestDetailViewController.m

- (IBAction)attractionButton:(UIButton *)sender 
{ 
    TestTableViewController *testTableViewController = [[TestTableViewController alloc]init]; 
    [testTableViewController AnimateView]; 
} 

我得到的NSLog 「測試」,但動畫不工作。 fixedView是我的子視圖,我將它拖到頭文件,所以它是一個IBOutlet。

謝謝你到目前爲止。

+0

當您的方法名稱爲AnimateView時,您正在調用'hideSubview'。 – Unheilig

+0

哦,是的,這是一個古老的名字。我編輯它:) – TdoubleG

+0

你的意思是不工作? – Unheilig

回答

0

問題是,您沒有在您的詳細信息視圖控制器中引用相同的主視圖控制器。

您正在製作另一個IBAction

爲了得到你的(「原始」的一個)主視圖控制器的保持,在您的詳細視圖控制器做到這一點:

創建伊娃:

TestTableViewController *masterViewController; 

然後引用它:

masterViewController = (TestTableViewController*)[[[self.splitViewController.viewControllers lastObject] viewControllers] objectAtIndex:0]; 

例如:

- (IBAction)attractionButton:(UIButton *)sender 
{ 
    masterViewController = (TestTableViewController*)[[[self.splitViewController.viewControllers lastObject] viewControllers] objectAtIndex:0]; 
    [masterViewController AnimateView]; 
} 

最後,在你的AnimateView方法,請做以下修改:

[UIView animateWithDuration:0.1f animations:^ 
{ 
    fixedView.frame = CGRectMake(-500, 0, 0, 0); 
} 
completion:nil]; 

希望這有助於。

+0

@TdoubleG然後試試這個:'masterViewController =(TestTableViewController *)[self.splitViewController.viewControllers objectAtIndex:1];'。如果它仍然無效,那麼我們需要查看更多的代碼才能更多地瞭解您添加視圖的方式。 – Unheilig

+0

感謝您的回答。它看起來像在工作。如果爲了測試而改變背景顏色,它會隨着顏色閃爍而變回白色。也許Button的狀態是問題? – TdoubleG

+0

@TdoubleG你的意思是背景顏色?顯示你如何做到這一點。 – Unheilig

1

所以你似乎實例化一個新的視圖控制器,並試圖完成這個動畫直線距離:

TestTableViewController *testTableViewController = [[TestTableViewController alloc]init]; 
[testTableViewController AnimateView]; 

的問題是,你甚至不呈現視圖控制器(它的觀點是不上任何地方的屏幕)所以這是正常的,你沒有看到任何動畫。

從我的理解你已經有另一個這個視圖控制器在屏幕上呈現的實例(我是嗎?) - 這是你需要使用的。以某種方式將其指針傳遞給TestDetailViewController(例如屬性),然後使用該對象調用您的動畫方法。

PS。我會建議命名你所有的開始,一個小寫字母的方法;)

+0

它是一個SplitViewController。 「它的觀點不在任何屏幕上」是什麼意思? – TdoubleG

+0

我的意思是你不能創建一個新的VC,但是你需要使用現有的VC。如果你使用的是分割VC,你的2視圖控制器位於分割視圖控制器的viewControllers屬性中(它是一個NSArray)。你可以用它來訪問TestTableViewController - 該數組有2個對象,因此檢查其中的哪一個是'kindOfClass [TestTableViewController class]'並使用它;) – tanzolone

0

什麼你可以嘗試是這樣的:

[UIView animateWithDuration:0.15f animations:^{ 
    fixedView.frame=CGRectMake(-500, 0,0,0); 
}completion:^(BOOL finished){ 

}]; 

你確定你可以調用[UIView的beginAnimations:....]無第一個參數?

+0

是的,當我在TestTableViewController的viewDidLoad方法中執行動畫時,它工作正常。我也試過你的建議,但即使不起作用。 – TdoubleG