Arrastrando UITableView

Estoy trabajando en una aplicación para iPhone donde quiero arrastrar la vista de tabla (no las celdas) hasta un cierto punto de la pantalla. Tengo la vista de tabla sentada en la mitad inferior de la pantalla y tengo una imagen en la mitad superior.

Cuando me desplazo por la tabla para ver las filas de abajo, la tabla debería moverse hacia arriba y arriba de la imagen (la posición y disminuye y la altura aumentará). La tabla subirá hasta que ocupe toda la pantalla, dejando unos pocos píxeles para la imagen y se acoplará allí y, a partir de ese punto, la tabla debería desplazarse. Se espera el mismo comportamiento para desplazarse hacia abajo también.

Esto puede sonar un poco raro, pero este es un nuevo patrón de iOS que está surgiendo.

Logré hacer la primera parte utilizando el fragmento de código a continuación.

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanForScrollView:)];
panGestureRecognizer.maximumNumberOfTouches = 1;
panGestureRecognizer.delegate = self;
panGestureRecognizer.minimumNumberOfTouches = 1;
[self.tableView addGestureRecognizer:panGestureRecognizer];

- (void)handlePanForScrollView:(UIPanGestureRecognizer *)gesture {
    switch (gesture.state) {
        case UIGestureRecognizerStateBegan:
            break;
        case UIGestureRecognizerStateChanged: {

            CGPoint movement = [gesture translationInView:self.view];
            CGRect frame = self.tableView.frame;
            frame.origin.y += movement.y;
            if(frame.origin.y >= Y_OFFSET && frame.origin.y < self.original_frame.origin.y){
                frame.size.height -= movement.y;
                self.tableView.frame = frame;
                [gesture setTranslation:CGPointZero inView:self.view];
            }
            break;
        }
        case UIGestureRecognizerStateEnded:
        case UIGestureRecognizerStateCancelled:{
            //NSLog(@"End");
            break;
        }
        default:
            ;
            break;
    }
}

Esto está funcionando bien y la tabla se mueve hacia arriba y se acopla debajo de Y_OFFSET. Pero como habrías imaginado, la mesa ya no se desplaza.

Así que intenté esto

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if(self.tableView.frame.origin.y <= Y_OFFSET ||  self.tableView.frame.origin.y >= self.original_frame.origin.y){
        NSLog(@"Here");
        return YES;
    }   
    return NO;
}

El mensaje "Aquí" se imprime en la consola, pero la tabla no se desplaza.

Incluso intenté usar el panGestureRecognizer para el UITableView en lugar de mi UIPanGestureRecognizer.

self.tableView.panGestureRecognizer addTarget:self action:@selector(handlePanForScrollView:)

Pero ahora la mesa se desplaza y se mueve hacia arriba.

"Quiero que la tabla no se desplace sino que se mueva hasta cierto punto en la pantalla y luego deje de moverse y comience a desplazarse".

¿Cuál es la mejor manera de lidiar con esto?

Aclamaciones

Respuestas a la pregunta(3)

Su respuesta a la pregunta