1

** Ich möchte eine Ansicht mit UIpangesture vertikal nach oben ziehen. Da mein Projekt automatisches Layout enthält, habe ich 4 Layout-Einschränkungen [oben, rechts, unten, links] erstellt und einen Auslass aus der Topspace-Einschränkung erstellt. Wenn die Geste erkannt wird, ist die Konstante von topspaceConstraint in der Lage, die Ansichten orgin Y zu ändern. Der Code funktioniert, aber das Ziehen ist nicht glatt. Wie kann ich es glatt machen **UIView wird nicht reibungslos von UIpangesture gezogen, wenn die automatische Layoutbeschränkung verwendet wird

-(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]; 
        }]; 
} 

Antwort

1

@Rokon verwenden Sie bitte folgenden Code kann seine Hilfe für Sie sein. Bitte verwenden Sie Ihre Ansicht anstelle von "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]; 
    } 
} 
Verwandte Themen