2013-02-03 64 views
0

我使用這個調用從另一個視圖控制器的方法:從不同的視圖控制器調用UIView動畫不會觸發?

InitialViewController *secondController = [[InitialViewController alloc] init]; 
    [secondController forecast]; 

這裏是在InitialViewController方法:

-(void)forecast{ 
    [UIView beginAnimations:@"Forecast" context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:1.0f]; 
    self.customPager.frame = CGRectMake(0,5, 320, 510); 
    self.view1.frame = CGRectMake(-320,5, 320, 510); 
    radarView.frame = CGRectMake(0,560, 320, 510); 
    [UIView commitAnimations]; 
    NSLog(@"Method Passed"); 
} 

在我的控制檯,我得到的NSLog「方法傳遞」,但UIView動畫完全不會發生。有任何想法嗎?

回答

2

在我看來,你沒有以任何方式顯示與secondController相關的視圖。即,在做後:

InitialViewController *secondController = [[InitialViewController alloc] init]; 

我希望你做這樣的事情:

[self.view addSubview:secondController.view]; 

你打電話之前forecast這會觸發loadView/viewDidLoad。此外,我會給UI提供一個機會,在動畫之前展示您的視圖;因此,我會打電話forecast無論是這樣的:

[self performSelector:@selector(forecast) withObject:nil afterDelay:0.0]; 

viewDidAppear

編輯:

根據您的意見,您的 InitialViewController已經顯示在屏幕上。在這種情況下,你應該做的是獲得對它的引用併發送它forecast消息。

你現在正在做的是實例化一個新的InitialViewController(然後發送forecast消息給它),它與已經顯示的消息沒有關係。

+0

嗨!,InitialViewController已經加載在屏幕上,我從側面的菜單欄視圖控制器調用它。 – sridvijay

+1

如果你的'InitialViewController'已經在屏幕上,獲取它的引用併發送它''預測消息;你正在實例化一個新的'InitialViewController',它與已經顯示的那個沒有關係。 – sergio

+0

謝謝,解決了! – sridvijay

1

即使您實例化了secondController,它的視圖也不會在屏幕上顯示,甚至不會顯示,因此您應用於其上的所有動畫都不起作用。

0

如果你的第二個控制器已經在屏幕上,那麼你的alloc init正在創建另一個控制器,而沒有獲得已經存在的控制器(日誌工作是因爲你正在創建InitialViewController的實例,所以它的代碼將運行,實例的視圖是您在屏幕上看到的視圖)。您需要獲取屏幕上的引用。如果不知道如何在屏幕上獲得2個控制器,我不能說你應該怎麼做。

相關問題