2010-11-08 39 views
1

Je veux savoir s'il existe un moyen de limiter le mouvement de mon UIView dans sa vue d'ensemble lors de l'utilisation de GestureRecognizer.Lié le mouvement d'une vue qui est ajouté à UIPanGestureRecognizer, dans sa vue d'ensemble

par ex. J'ai un UIImageview À qui j'ajoute UIPanGestureRecognizer avec l'action panPiece. J'ajuste son centre de la façon suivante pour éviter son mouvement hors de sa vue d'ensemble. Mais ça ne marche pas correctement.

-(CGPoint) centerWithBounds:(CGPoint)center andViewFrame:(CGRect)viewFrame andBoundingFrame:(CGRect)boundingFrame{ 

CGFloat lowerXBound = boundingFrame.origin.x + (viewFrame.size.width/2); 
CGFloat higherXBound = boundingFrame.origin.x + boundingFrame.size.width - (viewFrame.size.width/2); 

CGFloat lowerYBound = boundingFrame.origin.y + (viewFrame.size.height/2); 
CGFloat higherYBound = boundingFrame.origin.y + boundingFrame.size.height - (viewFrame.size.height/2); 

if (center.x < lowerXBound) { 
    center.x = lowerXBound; 
} 
if (center.x > higherXBound){ 
    center.x = higherXBound; 
} 
if (center.y < lowerYBound) { 
    center.y = lowerYBound; 
} 
if (center.y > higherYBound){ 
    center.y = higherYBound; 
} 

return center; 
} 

- (void)panPiece:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    UIView *piece = [gestureRecognizer view]; 

    [self adjustAnchorPointForGestureRecognizer:gestureRecognizer]; 

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) { 
     CGPoint translation = [gestureRecognizer translationInView:[piece superview]]; 
     CGPoint translatedCenter = CGPointMake([piece center].x + translation.x, [piece center].y + translation.y); 
    CGPoint center = [self centerWithBounds:translatedCenter andViewFrame:[piece frame] andBoundingFrame:[[piece superview] frame]]; 
     [piece setCenter:center]; 
     [gestureRecognizer setTranslation:CGPointZero inView:[piece superview]]; 
    } 
} 

L'aide de code est appréciée.

Répondre

-1

Peut-être parce

UIImageViews standards, en dépit d'être sous-classes UIView, ne réagissez pas de reconnaissance de geste supplémentaire pour les

working with uigesturerecognizers

+0

Ceci n'est pas vrai. Vous avez juste besoin de définir userInteractionEnabled = YES sur UIImageView. –

0

Vous avez juste besoin d'utiliser les clipsToBounds de propriété (réglez-le sur YES) à l'aperçu. Avait le même problème plus tôt. Fonctionne parfaitement après cela.