2014-01-29 4 views
1

Я хочу слегка повернуть UIView, когда его таскают. Мне удалось сделать перетаскивание с помощью UIPanGestureRecognizer. Я также попытался повернуть с помощью CGAffineTransformRotate, и он сработал. Однако, когда я применяю как перетаскивание, так и вращение, UIView вращается только, и он не перетаскивается вокруг супер-представления. Вот что я делаю в обработчике жестов:Вращение просмотра при перетаскивании

CGPoint translation = [gesture translationInView:self.view]; 
    // to drag 
    gesture.view.center = CGPointMake(gesture.view.center.x + translation.x, gesture.view.center.y + translation.y); 
    // to rotate 
    gesture.view.transform = CGAffineTransformRotate(gesture.view.transform, degreesToRadians(translation.x)/4); 
    // return to default so that it doesn't accumulate 
    [gesture setTranslation:CGPointMake(0, 0) inView:self.view]; 

Как я могу это исправить?

EDIT: здесь весь код:

- (void)handlePan:(UIPanGestureRecognizer*)gesture{ 
if (gesture.state == UIGestureRecognizerStateBegan) { 
    // Save initial post center for snapping 
    point = CGPointMake(gesture.view.center.x, gesture.view.center.y); 
} else if (gesture.state == UIGestureRecognizerStateChanged){ 
    // Translate user movement across the screen to dragging coordinates 
    CGPoint translation = [gesture translationInView:self.view]; 

    gesture.view.center = CGPointMake(gesture.view.center.x + translation.x, gesture.view.center.y + translation.y); 

    CGAffineTransform rotate = CGAffineTransformRotate(gesture.view.transform, degreesToRadians(translation.x)/4); 

    gesture.view.transform = rotate;//CGAffineTransformConcat(translate, rotate); 

    [gesture setTranslation:CGPointMake(0, 0) inView:self.view]; 


} else if (gesture.state == UIGestureRecognizerStateEnded){ 
    // Animate snap back to place 
    [UIView animateWithDuration:0.2 animations:^{ 
     gesture.view.transform = CGAffineTransformIdentity; 
     // [self.imagePost setCenter:point]; 
    }]; 
} 

}

+0

Я понимаю, что вы не пытаетесь вращайтесь двумя пальцами, вы только один вид вращаться, когда вы ее обтекаете. Если это так, то код, который вы публикуете, работает. Поэтому проблема должна быть где-то в другом месте. – Odrakir

+0

@ Odrakir приведенный выше код помещается, когда состояние распознавателя жестов изменяется, когда я перемещаю вид, который он вращает, но перемещение вверх или вниз по нему отскакивает в его месте. я выложу весь код. я думаю, что ничего не влияет на анимацию. Пожалуйста, проверьте это за минуту – HusseinB

+0

Этот код работает тоже. – Odrakir

ответ

1

Попробуйте добавить этот метод:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
if (![gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && ![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
    return YES; 
} 

return NO; 

}

+0

Нет, это не сработает. Я попробовал это, когда вы разместили его с помощью UITapGestureRecognizer, а затем я попробовал его с UIPan, поскольку я использую панорамирование только и не работал. Я также проверил делегацию. – HusseinB

+0

Это должно сработать. Повторяйте «YES» все время и посмотрите, не изменилось ли это. Кроме того, посмотрите [здесь] (http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more) для учебника, который обрабатывает панорамирование и ущипнуть при этом время. – Gad

+0

Я попытался вернуть ДА, это тоже не сработало. вращение должно происходить одновременно при перетаскивании. нет никакого поворотного движения. я просто перетаскиваю влево и вправо, и он должен слегка вращаться во время движения. В любом случае, спасибо за ваш вклад – HusseinB

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