我正在使用以下方法从另一个视图控制器调用方法:
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“Method Passed”,但根本不会发生UIView动画。有什么想法吗?
答案 0 :(得分:2)
在我看来,您没有以任何方式显示与secondController
相关联的视图。即,在做完之后:
InitialViewController *secondController = [[InitialViewController alloc] init];
我希望你做的事情如下:
[self.view addSubview:secondController.view];
这会在您致电loadView/viewDidLoad
之前触发forecast
。此外,我还有机会让UI在动画制作之前显示您的视图;因此,我会像这样呼叫forecast
:
[self performSelector:@selector(forecast) withObject:nil afterDelay:0.0];
或来自viewDidAppear
。
编辑:
根据你的评论,
您的InitialViewController
已显示在屏幕上。在这种情况下,您应该做的是获取对它的引用并向其发送forecast
消息。
您现在正在做的是实例化一个新的InitialViewController
(然后向其发送forecast
消息),该消息与已经显示的消息无关。
答案 1 :(得分:1)
即使您实例化secondController
,它的视图也不会显示在屏幕上,甚至不会被加载,因此您应用于它的任何动画都不起作用。
答案 2 :(得分:0)
如果您的第二个控制器已经在屏幕上,那么您的alloc init正在创建另一个控制器,而不是已经存在的那个(日志有效,因为您正在创建一个InitialViewController实例,因此它的代码将运行,但另一个实例& #39; s视图是您在屏幕上看到的视图)。您需要获得屏幕上的参考。我不知道你应该怎么做,而不知道你是如何在屏幕上首先获得2个控制器的。