【问题标题】:SKSpriteNode rotation not working properlySKSpriteNode 旋转无法正常工作
【发布时间】:2013-10-05 12:12:47
【问题描述】:

我正在尝试使用 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;      

   }   
}

【问题讨论】:

  • 考虑到我确实解决了您的代码的一个基本问题,如果您接受我的回答,我们将不胜感激。

标签: objective-c ios7 uigesturerecognizer sprite sprite-kit


【解决方案1】:

您在每次调用时将初始轮换重置为 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;      

   }   
}

【讨论】:

  • 你能多描述一下他们对“在某些情况下”“不好”的反应吗?他们是否曾经按照您的预期运作?什么是“坏”?你打印出你的旋转值,它们有意义吗?
  • 我的意思是它可能旋转了 70º,然后当我旋转一点时它会跳到 200º。但我没有应用 130º 旋转。
  • 您是否正在记录rotationrecognizer.rotation 的值? _initialroation 是否也设置在其他地方?
  • @MobileVet 对我来说有效,唯一的问题是它旋转了错误的方向,修复了:CGFloat angle = _initialrotation - rotationrecognizer.rotation; selected.zRotation = 角度; +1 这个答案 m8 :-)
  • @PeterK,好电话...我实际上并没有实现代码,所以我错过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-13
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多