2015-03-06 1 views
0

Je travaille sur une application qui permet à l'utilisateur de redimensionner et de faire pivoter une photo en utilisant UIGestureRecognizers. J'ai ce code qui ajuste la anchorPoint en fonction de l'endroit où l'utilisateur est l'application des touches (pour le faire paraître comme ils sont mise à l'échelle de l'image au point où les doigts sont en fait):Comment influence-t-on le centre d'ancrage dans un UIView?

- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    UIView *gestureRecognizerView = gestureRecognizer.view; 
    CGPoint locationInView = [gestureRecognizer locationInView:gestureRecognizerView]; 
    CGPoint locationInSuperview = [gestureRecognizer locationInView:gestureRecognizerView.superview]; 

    gestureRecognizerView.layer.anchorPoint = CGPointMake(locationInView.x/gestureRecognizerView.bounds.size.width, locationInView.y/gestureRecognizerView.bounds.size.height); 
    gestureRecognizerView.center = locationInSuperview; 
} 

Plus tard, je m simplement vouloir calculer l'origine en fonction du centre et des limites avec ce code:

CGRect transformedBounds = CGRectApplyAffineTransform(view.bounds, view.transform); 
CGPoint origin = CGPointMake(view.center.x - (transformedBounds.size.width * view.layer.anchorPoint.x), view.center.y - (transformedBounds.size.height * view.layer.anchorPoint.y)); 

et ça sort mal (je compare à la valeur de trame qui ironiquement est censé être invalidée mais ne fait que la valeur correcte).

Donc dans l'ensemble je me demande, qu'est-ce que je ne prends pas en compte ici? Comment le anchorPoint influence-t-il le centre d'une manière que je ne suis pas en mesure de déterminer?

+1

Comme [ce] (http://ronnqvi.st/about-the-anchorpoint /) –

+0

@ DavidRönnqvist - Merci qui a été utile –

Répondre

0

Je pense que le problème est que le origin que vous calculez n'est pas vraiment une origine, mais plutôt un décalage de l'origine de votre transformedBounds rect.

Je ne l'ai pas complètement testé, mais si vous faites quelque chose comme cela, vous devez obtenir le cadre correct:

CGRect transformedBounds = 
     CGRectApplyAffineTransform(view.bounds, view.transform); 
    CGSize originOffset = CGSizeMake(
     view.center.x - (transformedBounds.size.width * view.layer.anchorPoint.x), 
     view.center.y - 
      (transformedBounds.size.height * view.layer.anchorPoint.y)); 

    transformedBounds.origin.x += originOffset.width; 
    transformedBounds.origin.y += originOffset.height;