1

** Я хочу перетащить вверх по вертикали, используя UIpangesture. Поскольку мой проект включает автозапуск, я создал 4 ограничения компоновки [верх, правый, нижний, левый] и создал выход из ограничения верхнего уровня. Когда распознается жест, константа topspaceConstraint является chnage для изменения представлений orgin Y. Код работает, но перетаскивание не является гладким. Как я могу сделать это гладким **UIView не плавно перетаскивается UIpangesture при использовании ограничения автоопределения

-(void)gestureAction:(UIPanGestureRecognizer *)gesture 
{ 
    CGFloat targetY = 0; 
    if(gesture.state == UIGestureRecognizerStateBegan) 
    { 
     self.panCoord = [gesture locationInView:gesture.view]; 

    } 
    CGPoint newCoord = [gesture locationInView:gesture.view]; 
    float dY = newCoord.y-self.panCoord.y; 
    float newOriginY = (gesture.view.frame.origin.y+dY); 

    dispatch_async(dispatch_get_main_queue(), ^(void){ 
       self.propertyDetailContentViewTopConstraint.constant = newOriginY; 
      }); 
    if (gesture.state == UIGestureRecognizerStateEnded) { 

     if (gesture.view.frame.origin.y*0.8 < 100) { 
      targetY = 0; 
     }else if (gesture.view.frame.origin.y*0.8 < 250){ 
      targetY = 250; 
     }else{ 
      targetY = MAIN_SCREEN_HEIGHT; 
     } 

     [self setPropertyDetailContentViewTopConstraintTop:targetY]; 
    } 

} 

-(void)setPropertyDetailContentViewTopConstraintTop:(CGFloat)top 
{ 
    [self.view layoutIfNeeded]; 

    self.propertyDetailContentViewTopConstraint.constant = top; 
    [UIView animateWithDuration:0.5 
        animations:^{ 
         [self.view layoutIfNeeded]; 
        }]; 
} 

ответ

1

@Rokon, пожалуйста, используйте следующий код, который может вам помочь. Пожалуйста, используйте свое представление вместо «DrawImageView»

-(void)moveViewWithGestureRecognizer:(UIPanGestureRecognizer *)panGestureRecognizer{ 


    NSUInteger touches = panGestureRecognizer.numberOfTouches; 

    CGPoint translation = [panGestureRecognizer translationInView:self.view]; 


    self.DrawImageView.center = CGPointMake(self.DrawImageView.center.x + translation.x, 
             self.DrawImageView.center.y + translation.y); 
    [panGestureRecognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

    if (panGestureRecognizer.state == UIGestureRecognizerStateEnded) { 

    CGPoint velocity = [panGestureRecognizer velocityInView:self.view]; 
    CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y)); 
    CGFloat slideMult = magnitude/200; 
    // NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult); 

    float slideFactor = 0.1 * slideMult; // Increase for more of a slide 
    CGPoint finalPoint = CGPointMake(self.DrawImageView.center.x + (velocity.x * slideFactor), 
            self.DrawImageView.center.y + (velocity.y * slideFactor)); 
    finalPoint.x = MIN(MAX(finalPoint.x, 0), self.view.bounds.size.width); 
    finalPoint.y = MIN(MAX(finalPoint.y, 0), self.view.bounds.size.height); 

    [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
     self.DrawImageView.center = finalPoint; 
    } completion:nil]; 
    // [self.frontImageView setAlpha:1.0]; 
    } 
} 
Смежные вопросы