2012-01-08 15 views
8

私のジェスチャーレコグナイザには小さな問題があります。パンのジェスチャーが回転に基づいて方向をぼやけます

私はSpriteというクラスを持っていますが、これは単なるUIImageViewです。 Spriteには独自のジェスチャ認識機能と処理方法があり、ユーザーはグラフィックをパン、回転、サイズ変更できます。

-(void)setup{ //sets up the imageview... 
//add the image, frame, etc. 
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)]; 
    UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)]; 

    [self addGestureRecognizer:panGesture]; 
    [self addGestureRecognizer:pinchGesture]; 
    [self addGestureRecognizer:rotateGesture]; 
} 

//handling methods 
-(void)handlePinch:(UIPinchGestureRecognizer *)recognizer{ 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
    recognizer.scale = 1; 
} 

-(void)handleRotate:(UIRotationGestureRecognizer *)recognizer{ 
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation); 
    recognizer.rotation = 0; 
} 
-(void)handlePan:(UIPanGestureRecognizer *)recognizer{ 
    CGPoint translation = [recognizer translationInView:self]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self] 
} 

だから、基本的にそれらのそれぞれが自分で正常に動作します:

は、ここに私のコードです。しかし、imageViewを回転またはサイズ変更すると、パンニングが問題になります。たとえば、imageViewを上下逆に回転させると、パンニングジェスチャはイメージを逆方向に移動します(上を下、左をドラッグすると右に移動します)。同様に、サイズ変更されたスプライトは以前と同じスピード/距離でパンしません。

私はこれをどのように修正することができますか?私はこのコードをViewController(可能であれば)ではなくSpriteクラス内に保つことを望んでいます。ありがとうございました。

答えて

12

translationInView:selfではなく、translationInView:self.superviewを試してください。

+0

Txs @Jerry、素晴らしい答え。これは私を完全に怒らせてしまった! –

+0

@ジェリー、うまく働いています... –