Animación de objects desde la pérdida de respuesta de la pantalla.

Tengo un UIViewController . Dentro de eso es un UITableView que se dibuja en origen 0,0 . También tengo un UIScrollView que se dibuja en 0,-80 para que esté apagado y no visible.

Cuando se presiona un button de menu, UIViewController el marco del UIViewController 80px para revelar el UIScrollView .

El problema aquí es que UIScrollView no responde en absoluto.

Si dibujo el UIScrollView en say 0,0 , donde ES visible en la carga, funciona bien. Incluso puedo animarlo fuera de la pantalla y luego en la pantalla sin problemas.


Así es como se ve mi vista antes de animar:

  _____________________________ | | Frame -> (0,-80, 320, 80) | ScrollView | **Offscreen** |_____________________________| | | <- Original view (0,0,320,480) | | | | | | | | | | | Original View | | | | | | | | | | | | | | | | | | | | | |_____________________________| 

Cuando animo hago lo siguiente:

 [UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseIn) animations:^{ self.view.frame = CGRectMake(0.0, (self.view.frame.origin.y + container.frame.size.height), self.view.frame.size.width, self.view.frame.size.height); scroll.userInteractionEnabled = YES; } completion:^(BOOL finished) { if (scrollLoaded == NO) { [self loadFavorites]; scrollLoaded = YES; } }]; 

Ahora mi vista se ve así después de animar:

  _____________________________ | | Frame -> (0, -80, 320, 80) | ScrollView | |_____________________________| | | <- Original view (0, 80, 320, 480) | | | | | | | | | | | Original View | | | | | | | | | | | | | | | |_____________________________| | | | **Offscreen** | |_____________________________| 

He subclasificado mi scrollView para escuchar más de cerca los events:

.marido

 #import <UIKit/UIKit.h> @interface UIScrollView_ExtraTouch : UIScrollView @end 

.metro

 #import "UIScrollView+ExtraTouch.h" @implementation UIScrollView_ExtraTouch - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"scrollview touchesBegan"); [self.nextResponder touchesBegan:touches withEvent:event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"scrollview touchesMoved"); if(!self.dragging){ [self.nextResponder touchesMoved:touches withEvent:event]; } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"scrollview touchesEnded"); [self.nextResponder touchesEnded:touches withEvent:event]; } @end 

Nada va al logging después de la animation. Lo que creo que significa que, dado que el marco está a -80 , cree que está fuera de pantalla, por lo tanto, no recibe ningún tipo de acción.

¿Es esto correcto? Si es así, ¿hay alguna forma de solucionarlo?

La vista de desplazamiento está fuera de la vista original, por lo que no puede reactjsr con ella. Para corregir, cree una vista de contenedor que sea lo suficientemente grande como para contener todo el área de contenido (con scrollView y tableView como subViews), agréguelo a la vista original y anime esta vista de contenedor en lugar de la vista original.

Entonces, la vista del contenedor será 320×560 y en 0, -80 en la vista original. Luego muévelo hacia arriba y hacia abajo 80 según sea necesario.