私のジェスチャーレコグナイザには小さな問題があります。パンのジェスチャーが回転に基づいて方向をぼやけます
私は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クラス内に保つことを望んでいます。ありがとうございました。
Txs @Jerry、素晴らしい答え。これは私を完全に怒らせてしまった! –
@ジェリー、うまく働いています... –