Przeciąganie UITableView

Pracuję na aplikacji na iPhone'a, w której chcę przeciągnąć widok tabeli (nie komórki) do pewnego punktu na ekranie. Mam widok tabeli w dolnej połowie ekranu i mam obraz w górnej połowie.

Kiedy przewijam tabelę, aby zobaczyć wiersze poniżej, tabela powinna się rzeczywiście przesuwać w górę nad obrazem (y pos zmniejsza się, a wysokość wzrasta). Tabela będzie rosła, aż wypełni cały ekran, pozostawiając kilka pikseli na obraz i dokuje się tam i od tego momentu tabela powinna się przewijać. Oczekuje się również tego samego zachowania przy przewijaniu w dół.

Może to brzmieć trochę dziwnie, ale pojawia się nowy wzór iOS.

Udało mi się wykonać pierwszą część, używając poniższego fragmentu kodu.

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;
    }
}

To działa dobrze, a tabela przesuwa się w górę i dokuje poniżej Y_OFFSET. Ale jak sobie wyobrażałeś, stół nie przewija się.

Więc spróbowałem tego

- (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;
}

Wiadomość „Here” jest drukowana na konsoli, ale tabela nie przewija się.

Próbowałem nawet użyć panGestureRecognizer dla UITableView zamiast mojego UIPanGestureRecognizer.

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

Ale teraz stół przewija się i przesuwa w górę.

„Chcę, aby stół nie przewijał się, ale poruszał się do pewnego punktu na ekranie, a następnie przestał się poruszać i zaczął przewijać.”

Jaki jest najlepszy sposób, aby sobie z tym poradzić?

Twoje zdrowie

questionAnswers(3)

yourAnswerToTheQuestion