2016-04-08 17 views
0

ich ein UILabel in einem subview haben und ich habe ein panGesture und pinchGesture auf den UILabel. Von jetzt an kann ich die UILabel alle Ansichten überqueren. Ich möchte das UILabel im Bereich der subView bleiben. Wie würde ich das erreichen?hinzufügen Grenzen zu einem UIPangesture

- (void)handlePanGesture:(UIPanGestureRecognizer *)panGesture { 
CGPoint translation = [panGesture translationInView:panGesture.view.superview]; 

if (UIGestureRecognizerStateBegan == panGesture.state ||UIGestureRecognizerStateChanged == panGesture.state) { 
    panGesture.view.center = CGPointMake(panGesture.view.center.x + translation.x, 
             panGesture.view.center.y + translation.y); 
    [panGesture setTranslation:CGPointZero inView:self.view]; 
} 
} 

In dieser Zeile

CGPoint translation = [panGesture translationInView:panGesture.view.superview]; 

Es an die superview setzt und ich versuche, es zu meinem SubView zu setzen, aber ich kann es nicht herausgefunden scheinen.

Antwort

1

ist hier mein Code ziehbar Taste zu handhaben und es in die Hauptansicht Grenze zu beschränken ich diesen Code hoffen, dass Sie

CGPoint translation = [recognizer translationInView:self.view]; 
    CGRect recognizerFrame = recognizer.view.frame; 
    recognizerFrame.origin.x += translation.x; 
    recognizerFrame.origin.y += translation.y; 

    // Check if UIImageView is completely inside its superView 
    if (CGRectContainsRect(self.view.bounds, recognizerFrame)) { 
     recognizer.view.frame = recognizerFrame; 
    } 
    // Else check if UIImageView is vertically and/or horizontally outside of its 
    // superView. If yes, then set UImageView's frame accordingly. 
    // This is required so that when user pans rapidly then it provides smooth translation. 
    else { 
     // Check vertically 
     if (recognizerFrame.origin.y < self.view.bounds.origin.y) { 
      recognizerFrame.origin.y = 0; 
     } 
     else if (recognizerFrame.origin.y + recognizerFrame.size.height > self.view.bounds.size.height) { 
      recognizerFrame.origin.y = self.view.bounds.size.height - recognizerFrame.size.height; 
     } 

     // Check horizantally 
     if (recognizerFrame.origin.x < self.view.bounds.origin.x) { 
      recognizerFrame.origin.x = 0; 
     } 
     else if (recognizerFrame.origin.x + recognizerFrame.size.width > self.view.bounds.size.width) { 
      recognizerFrame.origin.x = self.view.bounds.size.width - recognizerFrame.size.width; 
     } 
    } 

    // Reset translation so that on next pan recognition 
    // we get correct translation value 
    [recognizer setTranslation:CGPointZero inView:self.view]; 
+0

Danke für den Nachschlag helfen. Würdest du mir helfen zu verstehen, wie ich das in meinen eigenen Code umsetzen kann? – Ro4ch

+0

Habe es zur Arbeit gebracht, danke für die Hilfe! – Ro4ch