2016-05-27 8 views
1

私はUIPanGestureRecognizerを使っていくつかのインタラクティブなUIViewControllerプレゼンテーションアニメーションを実装しました。すでにスクリーンに触れているUIGestureRecognizerを有効にするには?

私が今しようとしているのは、この動作をView Controllerのアニメーションの1つで継続できるようにすることです。したがって、ビューコントローラを表示する上向きにゆっくりとパンすると、新しく提示されたビューコントローラに属するジェスチャ認識器が、以前に提示されたビューに属するUITouchesをシームレスにピックアップするようになります。

VC1で起動してゆっくりとパンすると、ビューコントローラが表示されるという考えがあります。パンニングを続けると、別のビューコントローラが表示されます。

これは、スタック内の各ViewControllerに属するUIPanGestureRecognizerによって行われることが望ましいです。

誰もこのようなことをしましたか?私は現在、VCを提示した後、以前のジェスチャ認識プログラムをキャンセルしようとしていますが、次のVCのジェスチャ認識機能がアクティブになるのを見ていません。

答えて

0

ジェスチャ認識プログラムは、viewControllerではなくビューに属します。アプリケーションのトップレベルビューはUIWindowインスタンスです。パンジェスチャ認識機能をウィンドウに追加することができます。

ストーリーボードでは、最初のviewcontrollerとしてUINavigationControllerを設定しました。

Storyboard

私は私のアイデアをテストするために書いたコードだけがこの

#import "AppDelegate.h" 

@interface AppDelegate() { 
    CGFloat pos; 
    int cnt; 

} 

@end 

@implementation AppDelegate 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
    [self.window addGestureRecognizer:panRecognizer]; 

    return YES; 
} 

-(void) handlePan:(UIPanGestureRecognizer*)recognizer { 

    switch (recognizer.state) { 
     case UIGestureRecognizerStateBegan: { 
      pos = [recognizer locationInView:self.window].y; 
      break; 
     } 
     case UIGestureRecognizerStateChanged: { 
      CGFloat newPos = [recognizer locationInView:self.window].y; 
      if (pos - newPos > 50) { 
       UIViewController* nextVC = [[UIViewController alloc] init]; 

       nextVC.view.backgroundColor = (cnt++)%2 ? [UIColor redColor] : [UIColor blueColor]; 
       UINavigationController* navCtrl = (UINavigationController*)self.window.rootViewController; 
       [navCtrl pushViewController:nextVC animated:YES]; 
       pos = newPos; 
      } 
      break; 
     } 
     default: 
      break; 
    } 
} 

@end 
ました
関連する問題