• Stars
    star
    650
  • Rank 69,267 (Top 2 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created almost 10 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Array diffs as collection view wants it

Doppelganger

Build Status Version License Platform

TL;DR;

bad ux good ux
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: and hash 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.