Doppelganger
TL;DR;
Bad UX | Good UX1 |
1: Slowed down intentionally to demonstrate the awesomeness
Problems it solves
- Calculating mutations is too hard and you're just calling
reloadData
on your collection or table view? - Users, confused where did that row disappear?
- Rows, jumping out of nowhere?
- Lost scroll position?
Doppelganger is here to help!
Usage
NSArray *oldDataSource = self.dataSource;
self.dataSource = [self _updatedDataSource];
NSArray *diffs = [WMLArrayDiffUtility diffForCurrentArray:self.dataSource
previousArray:oldDataSource];
[self.tableView wml_applyBatchChangesForRows:diffs
inSection:0
withRowAnimation:UITableViewRowAnimationRight];
Implementation details
- Currently, doppelganger supports only array of unique elements, e.g. if you have duplicated elements in your array, result is unpredictable.
- If you are using custom classes, make sure that it implements correctly
isEqual:
andhash
methods: http://nshipster.com/equality/
TODOs
- Improve on O(n2) when calculating moved elements.
- Abstract API from
NSArray
. - Your issue / pull request.
Installation
Doppelganger is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "Doppelganger"
Author
Sash Zats, [email protected]
License
Doppelganger is available under the MIT license. See the LICENSE file for more info.