从不同的视图控制器调用时,UIView Animation不会触发?

时间:2013-02-03 18:38:00

标签: iphone ios objective-c animation uiviewanimation

我正在使用以下方法从另一个视图控制器调用方法:

   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动画。有什么想法吗?

3 个答案:

答案 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个控制器的。