Estoy implementando un arrastrar/soltar/cambiar el tamaño/rotar etiquetas dentro de mi aplicación. Hasta ahora, todo funciona, excepto por el gesto UIRotationGestureRecognizer
. Más específicamente, no funciona con el gesto UIPinchGestureRecognizer
.iPhone iOS cómo hacer que UIRotationGestureRecognizer y UIPinchGestureRecognizer trabajen juntos para escalar y rotar una UIView con subvistas?
Normalmente, los dos gestos compiten por dos toques con los dedos, así que los estoy ejecutando en paralelo. A continuación se muestran mis 2 métodos que invocan los reconocedores de gestos.
Al hacer el gesto de rotación, la vista gira salvajemente alrededor de su centro, con su altura y ancho cambiando de la siguiente manera: la altura se convierte en ancho, el ancho se convierte lentamente en altura. Eventualmente, la vista desaparece.
En la vista, tengo otra vista de cambio de tamaño automático. Normalmente, el gesto de pellizco también cambia automáticamente el tamaño de las subvistas, pero en este caso las subvistas con máscaras de aumento de tamaño desaparecen. Las subvistas tienen resortes de altura y ancho y puntal izquierdo/superior.
¿Qué estoy haciendo mal? ¿Cómo puedo cambiar el tamaño y escalar una UIView con gestos?
Todos los métodos de delegado y las conexiones se configuran correctamente. Necesito entender cómo manejar el orden en que los reconocedores aplicarían la escala y la rotación.
//makes 2 gesture recognizers behave together
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
- (IBAction)handleRotationFrom:(id)sender {
NSLog(@"Gesture rotation %.1f", rotationGestureRecognizer.rotation);
//attempt to continuously rotate the label, starting with a remembered rotation
float rotation = atan2(activeCompanionLabelView.transform.b, activeCompanionLabelView.transform.a);
NSLog(@"existing rotation %.1f", rotation);
// rotation = rotation<0?(2*M_PI)-fabs(rotation):rotation;
rotation +=rotationGestureRecognizer.rotation;
NSLog(@"*** gesture rotation %.1f sum: %.1f, saved: %.1f",rotationGestureRecognizer.rotation, rotation, activeCompanionLabelView.savedRotation);
activeCompanionLabelView.transform = CGAffineTransformMakeRotation((rotation));
activeCompanionLabelView.savedRotation = rotation;
}
- (IBAction)handlePinch:(id)sender {
NSLog(@"pinch %.2f", pinchGestureRecognizer.scale);
//resize, keeping the origin where it was before
activeCompanionLabelView.frame = CGRectMake(activeLabelContainerFrame.origin.x, activeLabelContainerFrame.origin.y, activeLabelContainerFrame.size.width*pinchGestureRecognizer.scale, activeLabelContainerFrame.size.height*pinchGestureRecognizer.scale);
}
que ya tienen este código en su sitio. Aclaré la pregunta con esta información. –
@AlexStone: ya veo. No estoy en mi Mac en este momento, pero tendría que hacer algunas pruebas con esto. Puedo enmendar mi respuesta mañana si nadie más se presenta. –
Tengo el mismo problema ahora ... ¿obtuviste una solución a esto? – Prathiba