0

これを使用して、別のView Controllerからメソッドを呼び出しています:

   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 アニメーションはまったく発生しません。何か案は?

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

2 番目のコントローラーが既に画面に表示されている場合、alloc init は別のコントローラーを作成しており、既に存在するコントローラーを取得していません (ログは InitialViewController のインスタンスを作成しているため機能するため、そのコードは実行されますが、別のインスタンスのビューは画面に表示されているもの)。画面上のものへの参照を取得する必要があります。そもそもどのようにして 2 つのコントローラーを画面に表示したのかを知らずに、どのようにそれを行うべきかを言うことはできません。

于 2013-02-03T23:25:14.053 に答える