2012-01-22 7 views
1

ジェスチャ認識機能を使用してズームおよびパンすることができる2次元マップがあります。それが動作している間、私は彼らが1つの指を持ち上げた後にズーム後直ちにパンニングを開始したい。残念ながら、ドキュメントでそれは言う:画面上で1本の指が離されたときにピンチ認識機能を無効にする

ジェスチャーが終了する(UIGestureRecognizerStateEnded)する場合、両方の指ビューから リフト。

私はピンチズームからパンにすぐに行くことをふりまえています。これを修正するにはどうすればよいですか?

答えて

5

これは可能ですし、簡単です!あなたのジェスチャーレコグナイザーの代理人になることです。誰もが知っているように見えるものは存在しない。これらのアイバーズは負荷をしたビューでインスタンス化されている

UIPinchGestureRecognizer *myPinchGR; 
UIPanGestureRecognizer *myPanGR; 

<UIGestureRecognizerDelegate>と2アイバーズを私のビューコントローラのサブクラスでは、私は宣言している両方のプロトコルに準拠します。デリゲートとしてselfを設定することに注意してください。 UIGestureRecognizerによって作られたデリゲート呼び出しの

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    myPanGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panTarget:)]; 
    myPanGR.delegate = self; 
    [self.view addGestureRecognizer:myPanGR]; 

    myPinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchTarget:)]; 
    myPinchGR.delegate = self; 
    [self.view addGestureRecognizer:myPinchGR]; 
} 

一つ、私が二つ以上のジェスチャー認識機能を持っていた場合、この関数は、いくつかのロジックが含まれなければならないだろうshouldRecognizeSimultaneouslyWithGestureRecognizer:です。しかし、2つしかないので、私はちょうどYESを返すことができます。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
    return YES; 
} 

これで、適切な条件をスクリーニングするために、アクションメソッドにわずかな(わずかな)余分なロジックを含める必要があります。

-(void)panTarget:(UIPanGestureRecognizer *)panGR{ 
    if (panGR.numberOfTouches > 1) return; 
    NSLog(@"panny"); 
} 
-(void)pinchTarget:(UIPinchGestureRecognizer *)pinchGR{ 
    if (pinchGR.numberOfTouches < 2) return; 
    NSLog(@"pinchy"); 
} 

このコードを実行すると、ログが表示されます。あなたはあなたが "ピンチ"を参照してくださいし、前後に2番目の指を置くときに "パニー"が表示されます1つの指を動かすときに表示されます。

関連する問題