0

我使用这个从另一个视图控制器调用一个方法:

   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 动画根本没有发生。有任何想法吗?

4

3 回答 3

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消息发送给它)与已显示的无关。

于 2013-02-03T18:41:03.843 回答
1

即使您实例化secondController,它的视图也永远不会显示在屏幕上,甚至不会加载,因此您应用到它的任何动画都没有效果。

于 2013-02-03T18:40:32.927 回答
0

如果您的第二个控制器已经在屏幕上,那么您的 alloc init 正在创建另一个控制器,而不是已经存在的控制器(日志有效,因为您正在创建 InitialViewController 的实例,因此它的代码将运行,但另一个实例的视图是一个你在屏幕上看到的)。您需要获得对屏幕上的引用。我不能说你应该怎么做,而不知道你是如何把你的 2 个控制器放在屏幕上的。

于 2013-02-03T23:25:14.053 回答