CocoaPods trunk is moving to be read-only. Read more on the blog, there are 17 months to go.
TestsTested | ✗ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Dec 2014 |
Maintained by Suyu Zhang.
A fully customizable pull-to-refresh control for iOS inspired by Storehouse iOS app
You can use any shape through a plist
file, like this one which is my company's logo:
You only need to include CBStoreHouseRefreshControl (.h .m)
and BarItem (.h .m)
in your project.
CocoaPods support is coming very soon!
You can attach it to any UIScrollView
like UITableView
or UICollectionView
using following simple static method:
+ (CBStoreHouseRefreshControl*)attachToScrollView:(UIScrollView *)scrollView
target:(id)target
refreshAction:(SEL)refreshAction
plist:(NSString *)plist;
self.storeHouseRefreshControl = [CBStoreHouseRefreshControl attachToScrollView:self.tableView target:self refreshAction:@selector(refreshTriggered:) plist:@"storehouse"];
Or, using this method for more configurable options:
+ (CBStoreHouseRefreshControl*)attachToScrollView:(UIScrollView *)scrollView
target:(id)target
refreshAction:(SEL)refreshAction
plist:(NSString *)plist
color:(UIColor *)color
lineWidth:(CGFloat)lineWidth
dropHeight:(CGFloat)dropHeight
scale:(CGFloat)scale
horizontalRandomness:(CGFloat)horizontalRandomness
reverseLoadingAnimation:(BOOL)reverseLoadingAnimation
internalAnimationFactor:(CGFloat)internalAnimationFactor;
self.storeHouseRefreshControl = [CBStoreHouseRefreshControl attachToScrollView:self.tableView target:self refreshAction:@selector(refreshTriggered:) plist:@"storehouse" color:[UIColor whiteColor] lineWidth:1.5 dropHeight:80 scale:1 horizontalRandomness:150 reverseLoadingAnimation:YES internalAnimationFactor:0.5];
Then, implement UIScrollViewDelegate
in your UIViewController
if you haven't already, and pass the calls through to the refresh control:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self.storeHouseRefreshControl scrollViewDidScroll];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[self.storeHouseRefreshControl scrollViewDidEndDragging];
}
Lastly, make sure you've implemented the refreshAction
you passed it earlier to listen for refresh triggers:
- (void)refreshTriggered
{
//call your loading method here
//Finshed loading the data, reset the refresh control
[self.storeHouseRefreshControl finishedLoading];
}
For more details, please check out the demo app's code.
The CBStoreHouseRefreshControl's shape contains bunch of BarItem
for animation, each BarItem
is running its own animation, you need to provide startPoint
and endPoint
through a plist file.
All BarItem
will share one coordinate system whose origin is at the top-left corner. For example if you want to draw a square, the plist will look like this:
The result will look like this:
Note:
startPoints
and endPoints
.{x,y}
) for coordinates.reverseLoadingAnimation
to reverse the animation.startPoint
and endPoint
, more info here.Play with following parameters to configure CBStoreHouseRefreshControl's view and animation:
color
parameterlineWidth
parameterdropHeight
parameterscale
parameterhorizontalRandomness
parameterreverseLoadingAnimation
parameter, if set to YES
, the last bar item will be highlighted firstly.internalAnimationFactor
parameter, for example if internalAnimationFactor
is 1 all bar items will appear/disappear all together.Suyu Zhang
[email protected]
suyuzhang.com
Copyright (c) 2014 Suyu Zhang [email protected]. See the LICENSE file for license rights and limitations (MIT).