2012-04-23 11 views
11

Staram się animować usuwanie zawartości nagłówka/stopki tableview z animacją. Wierzę, że mogę wywołać albo removeFromSuperview na samej zawartości nagłówka, albo po prostu przypisać nagłówek do zera, ale nie wiem jak to animować. Prosty blok animacji nic nie robi - jak zejść z widoku (w tym wypadku etykieta)?Animowanie nagłówka i stopki UITableView

+0

Czy używasz instancji UITableViewController, UITableViewDelegate lub UITableViewDataSource lub innej klasy kontrolera widoku? Jeśli używasz źródła UITableViewDataSource, powinieneś użyć tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) aby pragmatycznie usunąć nagłówki i tableView: (UITableView *) tableView titleForFooterInSection: (NSInteger) sekcja, aby programowo usunąć stopki. –

+0

Używam kontrolera widoku stołu. Aby wyjaśnić, chcę wyciszyć widok nagłówka tabeli, a nie nagłówek sekcji –

Odpowiedz

24

Napisałem przykład, jak całkowicie usunąć widok nagłówka za pomocą bloków animacji.

[UIView beginAnimations:nil context:NULL]; 
[self.tableView setTableHeaderView:nil]; 
[UIView commitAnimations]; 

Zakłada to oczywiście, że ta animacja jest wywoływana w klasie UITableViewController.

Po prostu usunięcie widoku nagłówka z podglądu nie działa, ponieważ widok tabeli nie może zmienić rozmiaru, aby wypełnić widok, który był wcześniej widokiem nagłówka. Ustawienie widoku nagłówka powoduje animowane odświeżanie widoku tabeli.

Jeśli to nie działa, sprawdź przypisania obiektu tableView.

1

znalazłem następujące dwie opcje zarówno OK pracy:

opcji 1

[UIView animateWithDuration:0.15 
         delay:0.0 
     options: UIViewAnimationCurveEaseOut 
       animations:^{deleteLabel.alpha = 0;} 
      completion:nil]; 

opcja 2

[UIView beginAnimations:nil context:nil]; 
deleteLabel.alpha = 0.0; 
[UIView commitAnimations]; 
+2

Po prostu drobna uwaga dla każdego, kto podąża za tym, powyższa opcja powinna być UIViewAnimationOptionCurveEaseOut –

0

Jest to praca idealnie "jak jest", a ja nie dbałość o animację

[myPrettyViewControllerInstance letUpdatePrettyViewNow]; 
    [[self tableView] beginUpdates]; 
    [[self tableView] setTableHeaderView:[myPrettyViewControllerInstance view]]; 
    [[self tableView] endUpdates]; 

, ale jeśli nie jest to potrzebne więcej

[[self tableView] setTableHeaderView:nil]; 

to wszystko od musimy, naprawdę (jeśli nie Fadeout - sprawdzić warunki

[[self tableView] setTableHeaderView:nil]; 

i nie musimy

[UIView beginAnimations:nil context:NULL]; 
    [[self tableView] setTableHeaderView:nil]; 
    [UIView commitAnimations]; 

nop

[[self tableView] beginUpdates]; 
    [[self tableView] setTableHeaderView:nil]; 
    [[self tableView] endUpdates]; 

NOP

[[self tableView] setTableHeaderView:nil]; 
    [[self tableView] reloadData]; 

noo ..

+0

Działa to dla komórek, ale nie wydaje się, dla nagłówków tabeli. – Gujamin

+0

Przepraszam, ale działa dla nagłówków (nie wiem o komórkach). Używam tego w moim ostatnim projekcie i wszystkie działają. Czy możesz podać kod źródłowy? – WINSergey

+0

Nie działało dla wstawiania widoku nagłówka tabeli. Używanie scenorysów i układu automatycznego. Widok właśnie się pojawia. Nie jest animowany. – Gujamin

8

skończyło się następującym prostego rozwiązania. Animuje usunięcie nagłówka.

[self.tableView beginUpdates]; 
self.tableView.tableHeaderView = nil; 
[self.tableView endUpdates]; 

Zdaję sobie sprawę, że jest to wspomniane w odpowiedzi WINSergey, ale jego wyjaśnienie było nieco mylące.

1

miałem ten sam problem, chciałem kontrolować jak nagłówek jest usuwany, tu jest moja metoda:

Na viewDidLoad:

UIView *transView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 320.f, 200.f)]; 
transView.backgroundColor = [UIColor clearColor]; 
self.headerView = transView; 
[transView release]; 

[self.tableView setTableHeaderView:self.headerView]; 

Wtedy, gdy trzeba usunąć nagłówek:

[UIView animateWithDuration:.3f 
         delay:.0f 
        options: UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ 
        self.headerView.frame = CGRectMake(0.0f, 0.0f, 320.f, 0.0f); 
       } 
       completion:^(BOOL finished) { 
         [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
       }]; 
0

Musiałem umieścić 2 animacje, aby działało.

[UIView animateWithDuration:2.0f animations:^{ 
     mylbl.alpha = 0.1 ; 
    } completion:^(BOOL finished) { 
     [UIView animateWithDuration:2.0f animations:^{ 
      mylbl.alpha = 1.0 ; 
     }]; 
    }]; 
Powiązane problemy