Skip to content

denkeni/Doppelganger

 
 

Repository files navigation

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"

Or Carthage, add the following line to your Cartfile:

github "Wondermall/Doppelganger"

Author

Sash Zats, sash@zats.io

License

Doppelganger is available under the MIT license. See the LICENSE file for more info.

About

Array diffs as collection view wants it

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 89.9%
  • Ruby 10.1%