0

xVCとyVCの2つのビューコントローラがあるとします。私はshakeAPIを使用し、メソッド-(void)motionBeganとxVC-(void)motionEnded:を使用-(void)motionCancelledしました。何が起こるかというと、デバイスが振られると、単純なアニメーションが起動します。これで、このアニメーションは、yVCを開いている場合、yVS.viewつまりサブビューとして追加されている場合でも起動されます。私が探しているのは、次の-(void)motionEnded:ように使用できるif条件です。

if(yVC == nil)
{
     //trigger animation
} 

つまり、yVCが表示されているときはシェイクが機能しないはずです。それ、どうやったら出来るの?助けてください。

4

3 に答える 3

3

私が見て使用した一般的なアドバイスは、nil以外のwindowプロパティがあるかどうかを確認することです。

if( ! yVC.view.window) {
  // trigger animation
}

ただし、これは必ずしも表示されることと同じではないことに注意してください。ほとんどのアプリでは、パフォーマンスを向上させることができます(正確でない基本的なケースは、別のビューが完全に覆い隠している場合ですが、それでもニーズを満たす可能性があります)

于 2012-07-16T04:35:59.200 に答える
-1

これを両方のViewControllerに追加します。

-(void)viewDidAppear:(BOOL)animated 
{
  [super viewDidAppear:animated];    
  visible = YES;    
}

-(void)viewDidDisappear:(BOOL)animated 
{
  [super viewDidDisappear:animated];
  visible = NO;
}

ここで、両方のView Controllerの変数isVisibleを確認し、同様にアニメーションをトリガーします。

于 2012-07-16T05:02:02.997 に答える
-1

前の回答はすべてある程度機能しますが、モーダルに提示されたビューコントローラを考慮に入れていません。ビューコントローラAがビューコントローラBを提示する場合、前の回答のうち、Aがまだ表示されていることがわかります。私のように、ビューが実際に表示されているかどうか(ビュー階層の一部だけでなく)を知りたい場合は、presentedViewControllerプロパティも確認することをお勧めします。

if (self.isViewLoaded && [self.view window] && !self.presentedViewController) {
    // User is looking at this view and nothing else
}

現在のViewControllerまたはその祖先のいずれかが現在別のViewControllerを提示している場合はpresentedViewController常に、nil以外になるため、これは機能します。

于 2017-07-27T18:17:45.940 に答える