iOS Pincée Échelle et à Deux Doigt de faire Tourner en même temps
Voici mon code:
viewDidLoad:
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)];
[self.canvas addGestureRecognizer:pinch];
pinch.delegate = self;
UIRotationGestureRecognizer *twoFingersRotate = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(pinchRotate:)];
[[self canvas] addGestureRecognizer:twoFingersRotate];
twoFingersRotate.delegate = self;
Code Pour Pince et Tourne:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
-(void)pinchRotate:(UIRotationGestureRecognizer*)rotate
{
SMImage *selectedImage = [DataCenter sharedDataCenter].selectedImage;
switch (rotate.state)
{
case UIGestureRecognizerStateBegan:
{
selectedImage.referenceTransform = selectedImage.transform;
break;
}
case UIGestureRecognizerStateChanged:
{
selectedImage.transform = CGAffineTransformRotate(selectedImage.referenceTransform, ([rotate rotation] * 55) * M_PI/180);
break;
}
default:
break;
}
}
-(void)pinch:(UIPinchGestureRecognizer*)pinch
{
SMImage *selectedImage = [DataCenter sharedDataCenter].selectedImage;
[self itemSelected];
switch (pinch.state)
{
case UIGestureRecognizerStateBegan:
{
selectedImage.referenceTransform = selectedImage.transform;
break;
}
case UIGestureRecognizerStateChanged:
{
CGAffineTransform transform = CGAffineTransformScale(selectedImage.referenceTransform, pinch.scale, pinch.scale);
selectedImage.transform = transform;
break;
}
default:
break;
}
}
Ma rotation fonctionne très bien sur son propre, et ma balance fonctionne très bien sur son propre, mais ils l'habitude de travailler ensemble. On travaille toujours ou l'autre n'a pas. Quand j'en œuvre shouldRecognizeSimultaneouslyWithgesturerecognizer les deux gestes qui semblent se combattre les uns contre les autres et de produire des résultats médiocres. Ce qui me manque? (Oui, j'ai mis en œuvre <UIGestureRecognizerDelegate>
)
Vous devez vous connecter pour publier un commentaire.
Chaque fois
pinch:
est appelé, vous venez de calculer la transformation basée sur la pincée de reconnaissance de l'échelle. Chaque foispinchRotate:
est appelé, vous venez de calculer la transformation basé sur la rotation de reconnaissance de la rotation. Vous n'avez jamais combiner l'échelle et la rotation dans une transformation.Ici est une approche. Donnez-vous une nouvelle variable d'instance,
_activeRecognizers
:L'initialiser dans
viewDidLoad
:Utiliser une méthode comme action pour les deux modules de reconnaissance:
Vous aurez besoin de cette méthode d'assistance:
Ce fonctionne si vous êtes seulement de permettre la rotation et mise à l'échelle. (J'ai même testé!)
Si vous souhaitez ajouter panoramique, utiliser une nouvelle méthode d'action et il suffit d'ajuster la
selectedImage.center
. En essayant de faire des panoramiques avec rotation et mise à l'échelle à l'aide deselectedImage.transform
est beaucoup plus compliqué.viewDidLoad
. Il suffit de glisser un module de reconnaissance sur une vue, puis raccorder le module de reconnaissance délégué de l'action et de points de vente avec contrôle-tiré à partir de la reconnaissance de Propriétaire du Fichier.Pour ce faire vous avez besoin pour mettre en œuvre geste délégué
shouldRecognizeSimultaneouslyWithGestureRecognizer
et de mettre quels gestes vous souhaitez reconnaître simultanément.Ce code doit être modifié à la vue pour laquelle vous souhaitez simultanée geste recognisers. Le code ci-dessus est ce que vous avez besoin.
shouldRecognizeSimultaneouslyWithGestureRecognizer:
qui renvoie toujours OUI.Swift 3 avec vue Panoramique, Rotation et une Pincée