1

UIRrotationGestureRecognizer を使用して SKSpriteNode を回転させようとしています。コードを実装しましたが、ノードを回転させると、本来あるべきでない回転にジャンプすることがあります。ここにコードがあります:

- (void) handleRotation:(UIRotationGestureRecognizer *) rotationrecognizer{

    CGFloat initialrotation = 0.0;

    if (rotationrecognizer.state == UIGestureRecognizerStateBegan) {

      CGPoint touchLocation = [rotationrecognizer locationInView:rotationrecognizer.view];
      touchLocation = [self convertPointFromView:touchLocation];
      [self selectNodeForTouch:touchLocation];

      initialrotation = selected.zRotation;
    }

    else if (rotationrecognizer.state == UIGestureRecognizerStateChanged) {        

      CGFloat angle = initialrotation + rotationrecognizer.rotation;
      selected.zRotation = angle;      

   }   
}
4

1 に答える 1

3

すべての呼び出しで初期回転を 0 にリセットしています...常駐する必要がある場合は、これをビューの ivar に移動する必要があります。

あなたが今書いているように、「角度」を設定する行は事実上これと同じです:

CGFloat angle = 0 + rotationrecognizer.rotation;

代わりに、次のことを行う必要があります (initialRotation がプライベート ivar として定義されている場合)。

- (void) handleRotation:(UIRotationGestureRecognizer *) rotationrecognizer{

    if (rotationrecognizer.state == UIGestureRecognizerStateBegan) {

      CGPoint touchLocation = [rotationrecognizer locationInView:rotationrecognizer.view];
      touchLocation = [self convertPointFromView:touchLocation];
      [self selectNodeForTouch:touchLocation];

      _initialrotation = selected.zRotation;
    }

    else if (rotationrecognizer.state == UIGestureRecognizerStateChanged) {        

      CGFloat angle = _initialrotation + rotationrecognizer.rotation;
      selected.zRotation = angle;      

   }   
}
于 2013-09-30T17:37:58.093 に答える