2013-09-29 3 views
1

Я пытаюсь повернуть SKSpriteNode с помощью 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;  

    } 
} 
+0

Было бы признательно и вежливо согласиться с моим ответом, учитывая, что я действительно решал фундаментальную проблему с вашим кодом. – MobileVet

ответ

3

Вы сбрасывая начальное вращение до 0 при каждом вызове ... вы должны переместить это быть Ивар вашего зрения, если вам это нужно, чтобы остаться резидентно.

Путь вас это написано сейчас, линия, которая устанавливает «угол» фактически равно это:

CGFloat angle = 0 + rotationrecognizer.rotation; 

Вместо этого, вы должны сделать следующее (где initialRotation определяется как частное Ивар):

- (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;  

    } 
} 
+0

Я сделал то, что вы сказали, и спрайты продолжают вращаться плохо в некоторых случаях ... –

+0

Можете ли вы описать немного больше, как они реагируют «плохо» в некоторых случаях? Неужели они когда-либо работают, как вы ожидаете? что такое плохо'? Вы печатаете свои значения вращения, они имеют смысл? – MobileVet

+0

Я имею в виду, что, возможно, он вращается на 70º, а затем, когда я немного повернулся, он прыгает до 200º. Но я не применял поворот на 130º. –

Смежные вопросы