Pred zmiznutím by som chcel v aplikácii pre iPhone vyblednúť zobrazenie buniek v tabuľke. Keď sa má objaviť, používam
- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath
na zmenu alfa z nuly na 1 pri animácii 0,3 sekundy.
Chcel by som to isté, ale od 1 do 0, keď sa má stratiť. Je to nejaká metóda podobná metóde vyššie alebo ako inak to môžem urobiť?
Nechcem používať štandardné iOS UITableViewRowAnimationFade
pretože pri načítavaní tabuľky nechcem žiadne ďalšie prechody.
EDIT: Preberám obsah zobrazenia tabuľky. Povedzme, že mám tlačidlo, na ktoré kliknem a znova načíta údaje v mojej tabuľke. To je, keď chcem vyblednúť existujúce bunky a vyblednúť nové.
Ovládač, ktorý používam, je základný UIViewController
vykonávacie UITableViewDataSource
UITableViewDelegate
UIScrollViewDelegate
protokoly.
odpovede:
2 pre odpoveď č. 1Našiel som riešenie.
Tesne pred volaním [self.tableView reloadData]
Animujem všetky viditeľné bunky, aby vybledli. Dostanem všetky viditeľné bunky a opakujem ich
for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows])
{
// here I animate cells to fade out
}
(ďakujem @AlexKoren za to, že mi ukázal cestu k iterácii cez viditeľné bunky).
Pretože som používal [self.tableView reloadData]
bez akejkoľvek ďalšej vstavanej animácie pre iOS bunky jednoducho zmizli. Takže teraz miznú najskôr a potom moje nové bunky miznú s animáciou definovanou v
- (void) tableView: (UITableView *) tableView
willDisplayCell: (UITableViewCell *) cell
forRowAtIndexPath: (NSIndexPath *) indexPath
dôležitý: Po dokončení animácie načítam zobrazenie tabuľky. Keby som volal [self.tableView reloadData]
hneď po iterácii cez bunky načíta tabuľku pred zobrazením animácie. Pretože viem, ako dlho trvá dokončenie animácie, ktorú používam
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
{
[self.tableView reloadData];
});
s delay
vypočítané predtým.
1 pre odpoveď č. 2
Toto je trochu hack, ale malo by to fungovať:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//loop through visible indexPaths
for (NSIndexPath *indexPath in [self.tableView indexPathsForVisibleRows]) {
//get each cell
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
//get its location
CGRect rectInTableView = [self.tableView rectForRowAtIndexPath:indexPath];
//set its alpha based on whether or not its going off the screen at the top.
cell.alpha = 1 + rectInTableView.origin.y / rectInTableView.size.height;
}
}
0 pre odpoveď č. 3
Už ste to vyskúšali?
- (void)tableView:(UITableView *)tableView
didEndDisplayingCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
Myslím, že to je to, čo chcete.