ビューにジェスチャ認識機能を追加しようとしています。パン(移動用)とピンチ(スケール用)の両方を追加すると、奇妙な動作が発生します。
ビュー(たまたまimageViewが含まれている)が拡大縮小された後、パンジェスチャレコグナイザーは移動の効果を倍増させるようです。または、元のスケールを想定しているため、移動が本来よりも速くなりますか?
移動およびスケーリングするメソッドのコードは次のとおりです。
//ivars for gesture recognizers/transforms
CGFloat scale;
CGFloat rotation;
CGPoint translatedPoint;
CGFloat _lastScale;
CGFloat _lastRotation;
CGFloat _firstX;
CGFloat _firstY;
-(void)scale:(id)sender {
if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
_lastScale = 1.0;
}
scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]);
CGAffineTransform currentTransform = gestureView.transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[gestureView setTransform:newTransform];
_lastScale = [(UIPinchGestureRecognizer*)sender scale];
NSLog(@"gestureView origin x: %f, y: %f", gestureView.frame.origin.x, gestureView.frame.origin.y);
NSLog(@"gestureView center x: %f, y: %f",[gestureView center].x, [gestureView center].y);
NSLog(@"gestureView scale x: %f, scale y: %f", gestureView.frame.size.width, gestureView.frame.size.height);
}
-(void)move:(id)sender {
translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:gestureView];
if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
_firstX = [gestureView center].x;
_firstY = [gestureView center].y;
}
translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
[gestureView setCenter:translatedPoint];
NSLog(@"gestureView origin x: %f, y: %f", gestureView.frame.origin.x, gestureView.frame.origin.y);
NSLog(@"gestureView center x: %f, y: %f",[gestureView center].x, [gestureView center].y);
}
プロジェクトは次のとおりです: owolf.net/uploads/StackOverflow/GestureRecognizerTest.zip
読んでくれてありがとう!