gpt4 book ai didi

ios - 使用 coredata 时 Tableview 行平滑动画

转载 作者:行者123 更新时间:2023-11-28 18:33:32 25 4
gpt4 key购买 nike

当我从 coredata 获得回调时,我正在使用插入行到 TableView

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.contentTableView endUpdates];
}

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {

//other code
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];

//other code
}

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {

[self.contentTableView beginUpdates];
}

由于多次调用didchangeobject,tableview行插入动画不流畅(video attached)。知道如何使动画流畅。

最佳答案

尝试这样的事情来排队您的更改。

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
{
if (type == NSFetchedResultsChangeInsert) {
if ([self.insertedSectionIndexes containsIndex:newIndexPath.section]) {
// If we've already been told that we're adding a section for this inserted row we skip it since it will handled by the section insertion.
return;
}

[self.insertedRowIndexPaths addObject:newIndexPath];
} else if (type == NSFetchedResultsChangeDelete) {
if ([self.deletedSectionIndexes containsIndex:indexPath.section]) {
// If we've already been told that we're deleting a section for this deleted row we skip it since it will handled by the section deletion.
return;
}

[self.deletedRowIndexPaths addObject:indexPath];
} else if (type == NSFetchedResultsChangeMove) {
if ([self.insertedSectionIndexes containsIndex:newIndexPath.section] == NO) {
[self.insertedRowIndexPaths addObject:newIndexPath];
}

if ([self.deletedSectionIndexes containsIndex:indexPath.section] == NO) {
[self.deletedRowIndexPaths addObject:indexPath];
}
} else if (type == NSFetchedResultsChangeUpdate) {
[self.updatedRowIndexPaths addObject:indexPath];
}
}

- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo atIndex:(NSUInteger)sectionIndex
forChangeType:(NSFetchedResultsChangeType)type
{
switch (type) {
case NSFetchedResultsChangeInsert:
[self.insertedSectionIndexes addIndex:sectionIndex];
break;
case NSFetchedResultsChangeDelete:
[self.deletedSectionIndexes addIndex:sectionIndex];
break;
default:
; // Shouldn't have a default
break;
}
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
NSInteger totalChanges = [self.deletedSectionIndexes count] +
[self.insertedSectionIndexes count] +
[self.deletedRowIndexPaths count] +
[self.insertedRowIndexPaths count] +
[self.updatedRowIndexPaths count];
if (totalChanges > 50) {
[self.tableView reloadData];
return;
}

[self.tableView beginUpdates];

[self.tableView deleteSections:self.deletedSectionIndexes withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView insertSections:self.insertedSectionIndexes withRowAnimation:UITableViewRowAnimationAutomatic];

[self.tableView deleteRowsAtIndexPaths:self.deletedRowIndexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView insertRowsAtIndexPaths:self.insertedRowIndexPaths withRowAnimation:UITableViewRowAnimationRight];
[self.tableView reloadRowsAtIndexPaths:self.updatedRowIndexPaths withRowAnimation:UITableViewRowAnimationAutomatic];

[self.tableView endUpdates];

// nil out the collections so their ready for their next use.
self.insertedSectionIndexes = nil;
self.deletedSectionIndexes = nil;
self.deletedRowIndexPaths = nil;
self.insertedRowIndexPaths = nil;
self.updatedRowIndexPaths = nil;
}

#pragma mark - Overridden Getters

- (NSMutableIndexSet *)deletedSectionIndexes
{
if (_deletedSectionIndexes == nil) {
_deletedSectionIndexes = [[NSMutableIndexSet alloc] init];
}

return _deletedSectionIndexes;
}

- (NSMutableIndexSet *)insertedSectionIndexes
{
if (_insertedSectionIndexes == nil) {
_insertedSectionIndexes = [[NSMutableIndexSet alloc] init];
}

return _insertedSectionIndexes;
}

- (NSMutableArray *)deletedRowIndexPaths
{
if (_deletedRowIndexPaths == nil) {
_deletedRowIndexPaths = [[NSMutableArray alloc] init];
}

return _deletedRowIndexPaths;
}

- (NSMutableArray *)insertedRowIndexPaths
{
if (_insertedRowIndexPaths == nil) {
_insertedRowIndexPaths = [[NSMutableArray alloc] init];
}

return _insertedRowIndexPaths;
}

- (NSMutableArray *)updatedRowIndexPaths
{
if (_updatedRowIndexPaths == nil) {
_updatedRowIndexPaths = [[NSMutableArray alloc] init];
}

return _updatedRowIndexPaths;
}

关于ios - 使用 coredata 时 Tableview 行平滑动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23466631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com