2016-08-09 3 views
0

Мое приложение состоит из колоды карт. Каждая карта имеет scrollview, которая позволяет просматривать изображения, связанные с этой картой. Вы можете перетащить, чтобы посмотреть на другую карту в колоде с помощью жесты. К сожалению, если вы не выполняете чистое перетаскивание в первый раз (например, если вы перетаскиваете половину пути, а затем оттягиваете палец), приложение застряло на этой карте. Вы можете прокручивать вверх и вниз, но вы не сможете перетащить. Когда вы пытаетесь, вы просто перемещаете backgroundScrollView в пределах супервизора (так что прокрутка вправо означает, что вы видите серые правые поля между scrollview и супервидом).Pangesture Fails, а затем застрял на вид

Это метод, который UIPanGestureRecognizer называет:

-(void)beingDragged:(UIPanGestureRecognizer *)gestureRecognizer { 
    NSLog(@"I am being dragged"); 
    xFromCenter = [gestureRecognizer translationInView:self].x; //%%% positive for right swipe, negative for left 
    yFromCenter = [gestureRecognizer translationInView:self].y; //%%% positive for up, negative for down 

    switch (gestureRecognizer.state) { 
      //%%% just started swiping 
     case UIGestureRecognizerStateBegan:{ 
      self.backgroundScrollView.scrollEnabled = NO; 
      self.originalPoint = self.center; 
      _backgroundScrollView.autoresizingMask = UIViewAutoresizingNone; 
      _backgroundScrollView.translatesAutoresizingMaskIntoConstraints = YES; 
      likeBadge.autoresizingMask = UIViewAutoresizingNone; 
      likeBadge.translatesAutoresizingMaskIntoConstraints = YES; 
      passBadge.autoresizingMask = UIViewAutoresizingNone; 
      passBadge.translatesAutoresizingMaskIntoConstraints = YES; 
      reviewButton.autoresizingMask = UIViewAutoresizingNone; 
      reviewButton.translatesAutoresizingMaskIntoConstraints = YES; 
      break; 
     }; 
      //%%% in the middle of a swipe 
     case UIGestureRecognizerStateChanged:{ 
      //%%% dictates rotation (see ROTATION_MAX and ROTATION_STRENGTH for details) 
      CGFloat rotationStrength = MIN(xFromCenter/ROTATION_STRENGTH, ROTATION_MAX); 

      //%%% degree change in radians 
      CGFloat rotationAngel = (CGFloat) (ROTATION_ANGLE * rotationStrength); 

      //%%% amount the height changes when you move the card up to a certain point 
      CGFloat scale = MAX(1 - fabsf(rotationStrength)/SCALE_STRENGTH, SCALE_MAX); 

      //%%% move the object's center by center + gesture coordinate 
      self.center = CGPointMake(self.originalPoint.x + xFromCenter, self.originalPoint.y + yFromCenter); 

      //%%% rotate by certain amount 
      CGAffineTransform transform = CGAffineTransformMakeRotation(rotationAngel); 

      //%%% scale by certain amount 
      CGAffineTransform scaleTransform = CGAffineTransformScale(transform, scale, scale); 

      //%%% apply transformations 
      self.transform = scaleTransform; 

      [self updateOverlay:xFromCenter:yFromCenter]; 

      break; 
     }; 
      //%%% let go of the card 
     case UIGestureRecognizerStateEnded: { 
      self.backgroundScrollView.scrollEnabled = YES; 
      [self afterSwipeAction]; 
      break; 
     }; 
     case UIGestureRecognizerStatePossible:{ 
      self.backgroundScrollView.scrollEnabled = YES; 
     }; 
     case UIGestureRecognizerStateCancelled:{ 
      self.backgroundScrollView.scrollEnabled = YES; 
     }; 
     case UIGestureRecognizerStateFailed:{ 
      self.backgroundScrollView.scrollEnabled = YES; 
     }; 
    } 
} 

ответ

0

Мое решение было установить

_backgroundScrollView.translatesAutoresizingMaskIntoConstraints = NO; 

, тогда как раньше он был установлен в YES. Это означает, что scrollView теперь просачивается из представления при прокрутке, но это для другого сообщения ...

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