перетащить и повернуть жест на iPad - PullRequest
1 голос
/ 03 февраля 2012

У меня есть проблема, я хочу добавить некоторый жест в uibutton для перемещения и поворота, я использую этот код

    [self.button addTarget:self action:@selector(wasDragged:withEvent:) forControlEvents:UIControlEventTouchDragInside];

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

- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event
    {
        // get the touch
        UITouch *touch = [[event touchesForView:self.button] anyObject];

        // get delta
        CGPoint previousLocation = [touch previousLocationInView:self.button];
        CGPoint location = [touch locationInView:self.button];
        CGFloat delta_x = location.x - previousLocation.x;
        CGFloat delta_y = location.y - previousLocation.y;

        // move button
        self.button.center = CGPointMake(self.button.center.x + delta_x,self.button.center.y + delta_y);

    }

    - (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {
        if(recognizer.state == UIGestureRecognizerStateBegan || recognizer.state == UIGestureRecognizerStateChanged)
        {
            recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
            [recognizer setRotation:0];
        }
    }

все работы я могу вращать кнопку и перемещать кнопку, проблемаесли я поверну кнопку, а затем переместу ее ... в этом случае не работает, я могу переместить кнопку, но не туда, куда я хочу ... в чем проблема?

1 Ответ

1 голос
/ 04 февраля 2012

Вы вычисляете разницу между положением касаний относительно кнопки. Это не работает, как ожидалось, когда кнопка поворачивается. Вместо этого вы должны попытаться вычислить его относительно суперпредставления кнопки или окна.

Вместо этого:

    CGPoint previousLocation = [touch previousLocationInView:self.button];
    CGPoint location = [touch locationInView:self.button];

Вы должны использовать это:

    CGPoint previousLocation = [touch previousLocationInView:self.button.superview];
    CGPoint location = [touch locationInView:self.button.superview];
...