ios7 - significado - paneo sinonimo
La conversión de gestos de paneo se restablece entre should-begin y handler(con el estado iniciado) en iOS7 (2)
Tengo un reconocedor de gestos de paneo para arrastrar un panel hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha. Cuando la dirección de la bandeja no es posible, no permito que el reconocedor comience para que los toques puedan ir a otros elementos de la interfaz de usuario dentro del panel.
Sin embargo, en iOS7, la traducción a veces se restablece entre el gestor de handlePan:
gestos de handlePan:
y mi controlador de gestos de handlePan:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer*)panGR
{
CGPoint trans = [panGR translationInView:self.view];
NSLog(@"should begin trans: (%.2f, %.2f)", trans.x, trans.y);
...
Este registro: should begin trans: (18.00, 0.00)
- (void)handlePan:(UIPanGestureRecognizer*)panGR
{
CGPoint trans = [panGR translationInView:self.view];
switch(panGR.state)
{
case UIGestureRecognizerStateBegan:
NSLog(@"handlePan began trans: (%.2f, %.2f)", trans.x, trans.y);
...
Estos registros: handlePan began trans: (0.00, 0.00)
Lo que significa que el código compartido para determinar la dirección de la bandeja (a la derecha, en este caso) funciona en gestos handlePan:
y permite que el gesto comience, pero luego no puede determinarse en handlePan:
cuando el state
es UIGestureRecognizerStateBegan
.
¿Se trata de un error en iOS7 o el comportamiento ha cambiado deliberadamente para adaptarse a los nuevos tipos de gestos? Además, ¿alguien puede sugerir una buena forma de solucionar este problema?
Puede determinar la dirección en handlePan:
comprobando si la traducción horizontal es superior o inferior a 0. Pero al final de handlePan:
necesita restablecer el CGPoint
de la traducción como la nueva referencia para la próxima traducción.
- (void)handlePan:(UIPanGestureRecognizer*)panGR
{
CGPoint translation = [gr translationInView:self.view];
if (translation.x > 0) {
//Direction: Right
} else if (translation.x < 0) {
//Direction: Left
}
[gr setTranslation:CGPointZero
inView:self.view];
}
UIPanGestureRecognizer
siempre está configurando la traducción a (0,0) después de alcanzar el estado UIGestureRecognizerStateBegan
, ya que incluso la más mínima traducción se reconoce, está diseñada para funcionar solo como un disparador (si configura un umbral grande para comenzar el reconocimiento como (50,50 ) obviamente obtendrás un "retraso" en el comportamiento de la interfaz de usuario; como una solución sugeriría almacenar el valor de la traducción y luego utilizar una animación UIView para desplazar el objeto de forma más fluida). Debe usar UIGestureRecognizerStateChanged
para actualizar la traducción, y UIGestureRecognizerStateRecognized
para establecer el punto final de la bandeja.