use*_*500 32 cocoa-touch objective-c uitableview ios
你将如何动漫- reloadData的UITableView?数据源是打开的,UIFetchedResultsController所以我不能玩– insertSections:withRowAnimation:,– deleteSections:withRowAnimation:包裹– beginUpdates,– endUpdates.
编辑:我想- reloadData在NSFetchedResultsController重新获取后打电话.
use*_*500 83
我做了类别方法.
- (void)reloadData:(BOOL)animated
{
[self reloadData];
if (animated) {
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromBottom];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[animation setFillMode:kCAFillModeBoth];
[animation setDuration:.3];
[[self layer] addAnimation:animation forKey:@"UITableViewReloadDataAnimationKey"];
}
}
Run Code Online (Sandbox Code Playgroud)
Vin*_*ent 27
您可以使用以下命令制作reLoadData的基本动画:
// Reload table with a slight animation
[UIView transitionWithView:tableViewReference
duration:0.5f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^(void) {
[tableViewReference reloadData];
} completion:NULL];
Run Code Online (Sandbox Code Playgroud)
bar*_*ast 14
当您想要使用动画重新加载整个表时,可以简单地调用此行:
NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]);
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationFade];
Run Code Online (Sandbox Code Playgroud)
你不能动画reloadData.你将不得不使用表视图的insert...,delete...,move...和reloadRows...方法,从而使它动画.
使用时,这非常简单NSFetchedResultsController.该文档NSFetchedResultsControllerDelegate包含一组示例方法,您只需要适应自己的代码:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath]
atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView endUpdates];
}
Run Code Online (Sandbox Code Playgroud)
我UITableView基于此链接的解决方案创建了一个 类别方法.
它应该重新加载所有表部分.您可以使用UITableViewRowAnimation不同动画效果的选项.
- (void)reloadData:(BOOL)animated
{
[self reloadData];
if (animated)
{
[self reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.numberOfSections)] withRowAnimation:UITableViewRowAnimationBottom];
}
}
Run Code Online (Sandbox Code Playgroud)
typedef enum {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight,
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone,
UITableViewRowAnimationMiddle,
UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;
Run Code Online (Sandbox Code Playgroud)
和方法:
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30976 次 |
| 最近记录: |