2013-02-06 7 views
11

Czy istnieje sposób na zmianę czasu trwania animacji [table beginUpdates]/[table endUpdates]?Zmień czas trwania animacji UITableView (Wstaw/Usuń wiersze z tabelą beginUpdates)

To co próbowałem, bez powodzenia:

Wariant 1:

[UIView animateWithDuration:5.0 delay:0.0 options:(UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionOverrideInheritedDuration) animations:^{ 

    [self.tableView beginUpdates]; 

    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:indexPaths] withRowAnimation:UITableViewRowAnimationTop]; 

    [self.tableView endUpdates]; 


} completion:^(BOOL finished) { 
}]; 

Opcja 2:

[CATransaction begin]; 

[CATransaction setCompletionBlock:^{ 
    NSLog(@"I actually get called!"); 
}]; 

[CATransaction setAnimationDuration:5.0]; //but I don't work 

[self.tableView beginUpdates]; 

[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:indexPaths] withRowAnimation:UITableViewRowAnimationTop]; 

[self.tableView endUpdates]; 

[CATransaction commit]; 
+0

Sprawdź to pytanie: http://stackoverflow.com/questions/3832474/uitableview-row-animation-duration-and-completion-callback/13041475#13041475 Wykorzystuje CATransaction aby osiągnąć to, co chcesz: -) –

+0

Widziałem to pytanie. To by działało, ale moim problemem jest to, że potrzebuję konkretnie czasu, który nie działa. 01.etj. W opcji 2 w tym pytaniu potrzebuję linii '[CATransaction setAnimationDuration: 5.0];' do pracy, a nie działa. –

+0

@TomRedman kiedykolwiek dostaniesz dobre rozwiązanie dla tego problemu? Widzę w pytaniu powiązanym z Benem, że teraz wydaje się, że działa on w systemie iOS 7, ale nie 6 ... –

Odpowiedz

11

dlaczego nie wypróbujesz animację UIView.

[UIView animateWithDuration:2 delay:0.2 options:UIViewAnimationOptionCurveEaseInEaseOut animations:^{ 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} completion:^(BOOL finished) { 
    // code 
}]; 
+1

Działa na mnie na iOS 7 i iOS 8! –

+0

To jest odpowiedź! Działa również na iOS 9. – silvansky

+0

Działa w ios 9, ale sprawia, że ​​inne animacje zachowują się dziwnie. – Miniroo

1

@Gautam Rozwiązanie Jaina jest świetne. Ma jednak problem, przynajmniej w systemie iOS 9: blok zakończenia zostanie wykonany natychmiast, ale nie po zakończeniu animacji.

Ja zwykle lubię poniżej, z nieco więcej kodu, ale działa lepiej.

[UIView beginAnimations:@“animation” context:nil]; 
[UIView setAnimationDuration:0.25]; 
[CATransaction begin]; 
[CATransaction setCompletionBlock:^{ 
    // completion block 
}]; 

[self.tableView beginUpdates]; 
// updates 
[self.tableView endUpdates]; 

[CATransaction commit]; 
[UIView commitAnimations]; 
Powiązane problemy