UIGestureRecognizer не будет вращать спрайт - Cocos2d - PullRequest
2 голосов
/ 07 июня 2011

Кто-нибудь знает, почему он не будет вращать спрайт?

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

        CGPoint center = CGPointMake(CGRectGetMidX([[touch view] bounds]), CGRectGetMidY([[touch view] bounds]));

        CGPoint firstLocation = [touch previousLocationInView:[touch view]];
        CGPoint location = [touch locationInView:[touch view]];

        CGPoint currentTouchPoint = [[CCDirector sharedDirector] convertToGL:location];
        CGPoint previousTouchPoint = [[CCDirector sharedDirector] convertToGL:firstLocation];

        CGPoint line2Start = currentTouchPoint;
        CGPoint line1Start = previousTouchPoint;
        CGPoint line2End = CGPointMake(center.x + (center.x - line2Start.x), center.y + (center.y - line2Start.y));
        CGPoint line1End = CGPointMake(center.x + (center.x - line1Start.x), center.y + (center.y - line1Start.y));

        CGFloat a = line1End.x - line1Start.x;
        CGFloat b = line1End.y - line1Start.y;
        CGFloat c = line2End.x - line2Start.x;
        CGFloat d = line2End.y - line2Start.y;

        CGFloat line1Slope = (line1End.y - line1Start.y) / (line1End.x - line1Start.x);
        CGFloat line2Slope = (line2End.y - line2Start.y) / (line2End.x - line2Start.x);

        CGFloat degs = acosf(((a*c) + (b*d)) / ((sqrt(a*a + b*b)) * (sqrt(c*c + d*d))));

        CGFloat angleInRadians = (line2Slope > line1Slope) ? degs : -degs;

        [g setRotation:angleInRadians];
}

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    UIGestureRecognizer *recognizer;
    [recognizer setState:UIGestureRecognizerStateEnded];
}

G - это спрайт в [g setRotation: angleInRadians];

Тогда, когда я добавлю в это

[[touch view] setTransform:CGAffineTransformRotate([[touch view] transform], [grinder rotation])];

Это вращает всю сцену!Любая помощь, пожалуйста?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 07 июня 2011

Чувак

ниже ссылка для пользовательского интерфейса, но она также будет хорошо работать и для cocos2d Вам необходимо позаботиться о системе координации

1) Для cocos2d происхождение находится в левом нижнем углу

2) Для UIKit начало координат находится в верхнем левом углу

«Поворот изображения путем перетаскивания»

Надеюсь, это поможет вам Удачи

1 голос
/ 08 июня 2015

в методе init передайте следующий код. это создаст распознаватель жестов

UIRotationGestureRecognizer *rotationGesture = 
[[UIRotationGestureRecognizer alloc] initWithTarget:self
                                             action:@selector(handleRotate:)];
rotationGesture.delegate = self;
   [myImageView addGestureRecognizer:rotationGesture];
  [rotationGesture release];

это вентиляционное отверстие, которое сработает

- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {
 if(recognizer.state == UIGestureRecognizerStateBegan || 
 recognizer.state == UIGestureRecognizerStateChanged)
 {
recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, 
                                                    recognizer.rotation);
[recognizer setRotation:0];
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...