Permalink
Browse files

Bug fix for scrolling, while reloading

  • Loading branch information...
1 parent e4de3da commit b71046df9f1b96a10b1a67e17c83fece43895c09 @devindoty devindoty committed Dec 10, 2009
View
26 Demo/TableViewPull/Classes/EGORefreshTableHeaderView.h 100644 → 100755
@@ -5,19 +5,39 @@
// Created by Devin Doty on 10/14/09October14.
// Copyright 2009 enormego. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import <UIKit/UIKit.h>
-
+#import <QuartzCore/QuartzCore.h>
@interface EGORefreshTableHeaderView : UIView {
UILabel *lastUpdatedLabel;
UILabel *statusLabel;
- UIImageView *arrowImage;
+ CALayer *arrowImage;
UIActivityIndicatorView *activityView;
-
+
BOOL isFlipped;
+
}
+
@property BOOL isFlipped;
- (void)flipImageAnimated:(BOOL)animated;
View
65 Demo/TableViewPull/Classes/EGORefreshTableHeaderView.m 100644 → 100755
@@ -5,9 +5,26 @@
// Created by Devin Doty on 10/14/09October14.
// Copyright 2009 enormego. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import "EGORefreshTableHeaderView.h"
-#import <QuartzCore/QuartzCore.h>
#define kReleaseToReloadStatus 0
#define kPullToReloadStatus 1
@@ -21,27 +38,31 @@ @implementation EGORefreshTableHeaderView
@synthesize isFlipped;
+
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
+
+ self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
- lastUpdatedLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 30.0f, 320.0f, 20.0f)];
+ lastUpdatedLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 30.0f, self.frame.size.width, 20.0f)];
+ lastUpdatedLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
lastUpdatedLabel.font = [UIFont systemFontOfSize:12.0f];
lastUpdatedLabel.textColor = TEXT_COLOR;
lastUpdatedLabel.shadowColor = [UIColor colorWithWhite:0.9f alpha:1.0f];
lastUpdatedLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
lastUpdatedLabel.backgroundColor = [UIColor clearColor];
lastUpdatedLabel.textAlignment = UITextAlignmentCenter;
[self addSubview:lastUpdatedLabel];
-
+ [lastUpdatedLabel release];
+
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"EGORefreshTableView_LastRefresh"]) {
lastUpdatedLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"EGORefreshTableView_LastRefresh"];
} else {
[self setCurrentDate];
}
- [lastUpdatedLabel release];
-
statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 48.0f, 320.0f, 20.0f)];
+ statusLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
statusLabel.font = [UIFont boldSystemFontOfSize:13.0f];
statusLabel.textColor = TEXT_COLOR;
statusLabel.shadowColor = [UIColor colorWithWhite:0.9f alpha:1.0f];
@@ -52,11 +73,11 @@ - (id)initWithFrame:(CGRect)frame {
[self addSubview:statusLabel];
[statusLabel release];
- arrowImage = [[UIImageView alloc] initWithFrame:CGRectMake(25.0f, frame.size.height - 65.0f, 30.0f, 55.0f)];
- arrowImage.contentMode = UIViewContentModeScaleAspectFit;
- arrowImage.image = [UIImage imageNamed:@"blueArrow.png"];
- [arrowImage layer].transform = CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 1.0f);
- [self addSubview:arrowImage];
+ arrowImage = [[CALayer alloc] init];
+ arrowImage.frame = CGRectMake(25.0f, frame.size.height - 65.0f, 30.0f, 55.0f);
+ arrowImage.contentsGravity = kCAGravityResizeAspect;
+ arrowImage.contents = (id)[UIImage imageNamed:@"blueArrow.png"].CGImage;
+ [[self layer] addSublayer:arrowImage];
[arrowImage release];
activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
@@ -66,7 +87,6 @@ - (id)initWithFrame:(CGRect)frame {
[activityView release];
isFlipped = NO;
-
}
return self;
}
@@ -83,10 +103,17 @@ - (void)drawRect:(CGRect)rect{
- (void)flipImageAnimated:(BOOL)animated{
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDuration:animated ? .18 : 0.0];
- [arrowImage layer].transform = isFlipped ? CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 1.0f) : CATransform3DMakeRotation(M_PI * 2, 0.0f, 0.0f, 1.0f);
- [UIView commitAnimations];
+ if (!animated) {
+ [arrowImage removeAllAnimations];
+ } else {
+ CABasicAnimation *animation = [CABasicAnimation animation];
+ animation.fromValue = isFlipped ? [NSValue valueWithCATransform3D:CATransform3DMakeRotation((M_PI / 180.0) * 179.9, 0.0f, 0.0f, 1.0f)] : [NSValue valueWithCATransform3D:CATransform3DIdentity];
+ animation.toValue = isFlipped ? [NSValue valueWithCATransform3D:CATransform3DIdentity] : [NSValue valueWithCATransform3D:CATransform3DMakeRotation((M_PI / 180.0) * 179.9, 0.0f, 0.0f, 1.0f)];
+ animation.duration = animated ? .18 : 0.0;
+ animation.removedOnCompletion = NO;
+ animation.fillMode = kCAFillModeForwards;
+ [arrowImage addAnimation:animation forKey:@"transform"];
+ }
isFlipped = !isFlipped;
}
@@ -119,15 +146,21 @@ - (void)setStatus:(int)status{
}
- (void)toggleActivityView{
+
+ [CATransaction begin];
+ [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; // kill layers implicit fade animation
+
if ([activityView isAnimating]) {
[activityView stopAnimating];
arrowImage.hidden = NO;
+ [self setStatus:kPullToReloadStatus];
} else {
[activityView startAnimating];
arrowImage.hidden = YES;
[self setStatus:kLoadingStatus];
}
-
+
+ [CATransaction commit];
}
- (void)dealloc {
View
22 Demo/TableViewPull/Classes/EGOTableViewPullRefresh.h 100644 → 100755
@@ -5,6 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright 2009 enormego. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@@ -14,8 +32,8 @@
@interface EGOTableViewPullRefresh : UITableView <UITableViewDelegate>{
EGORefreshTableHeaderView *refreshHeaderView;
- BOOL reloading;
- BOOL checkForRefresh;
+ BOOL reloading; // should be pulled from datasource
+
}
- (void)dataSourceDidFinishLoadingNewData;
@end
View
49 Demo/TableViewPull/Classes/EGOTableViewPullRefresh.m 100644 → 100755
@@ -5,7 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright 2009 enormego. All rights reserved.
//
-
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import "EGOTableViewPullRefresh.h"
#import "EGORefreshTableHeaderView.h"
@@ -17,6 +34,7 @@
@implementation EGOTableViewPullRefresh
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
+
if (self = [super initWithFrame:frame style:style]){
refreshHeaderView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.bounds.size.height, 320.0f, self.bounds.size.height)];
refreshHeaderView.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:237.0/255.0 alpha:1.0];
@@ -27,47 +45,46 @@ - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
return self;
}
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;{
- checkForRefresh = YES; // only check offset when dragging
-}
-
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
- if (checkForRefresh) {
+
+ if (scrollView.isDragging) {
if (refreshHeaderView.isFlipped && scrollView.contentOffset.y > -65.0f && scrollView.contentOffset.y < 0.0f && !reloading) {
[refreshHeaderView flipImageAnimated:YES];
[refreshHeaderView setStatus:kPullToReloadStatus];
- } else if (!refreshHeaderView.isFlipped && scrollView.contentOffset.y < -65.0f) {
+ } else if (!refreshHeaderView.isFlipped && scrollView.contentOffset.y < -65.0f && !reloading) {
[refreshHeaderView flipImageAnimated:YES];
[refreshHeaderView setStatus:kReleaseToReloadStatus];
}
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
- if (scrollView.contentOffset.y <= - 65.0f) {
+
+ if (scrollView.contentOffset.y <= - 65.0f && !reloading) {
if([self.dataSource respondsToSelector:@selector(reloadTableViewDataSource)]){
reloading = YES;
[(id)self.dataSource reloadTableViewDataSource];
[refreshHeaderView toggleActivityView];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.2];
- self.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 00.0f, 0.0f);
+ self.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f);
[UIView commitAnimations];
}
- }
- checkForRefresh = NO;
+ }
}
- (void)dataSourceDidFinishLoadingNewData{
+
reloading = NO;
- [refreshHeaderView flipImageAnimated:NO];
+
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.3];
- [self setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 00.0f, 0.0f)];
- [refreshHeaderView setStatus:kPullToReloadStatus];
- [refreshHeaderView toggleActivityView];
+ [self setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)];
[UIView commitAnimations];
- [refreshHeaderView setCurrentDate];
+
+ [refreshHeaderView flipImageAnimated:NO]; // reset view
+ [refreshHeaderView toggleActivityView]; // reset view
+ [refreshHeaderView setCurrentDate]; // should check if data reload was successful
}
- (void)dealloc {
View
19 Demo/TableViewPull/Classes/RootViewController.h
@@ -5,6 +5,25 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright enormego 2009. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
@class EGOTableViewPullRefresh;
@interface RootViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{
EGOTableViewPullRefresh *egoTableView;
View
27 Demo/TableViewPull/Classes/RootViewController.m
@@ -5,6 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright enormego 2009. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import "RootViewController.h"
#import "EGOTableViewPullRefresh.h"
@@ -19,6 +37,7 @@ - (void)viewDidLoad {
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
egoTableView = [[EGOTableViewPullRefresh alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
+ egoTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
egoTableView.dataSource = self;
egoTableView.delegate = egoTableView;
[self.view addSubview:egoTableView];
@@ -46,13 +65,13 @@ - (void)viewDidDisappear:(BOOL)animated {
}
*/
-/*
+
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
- return (interfaceOrientation == UIInterfaceOrientationPortrait);
+ return YES;
}
- */
+
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
@@ -96,7 +115,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
}
- (void)reloadTableViewDataSource{
- [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:1.0];
+ [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];
}
View
18 Demo/TableViewPull/Classes/TableViewPullAppDelegate.h
@@ -5,6 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright enormego 2009. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
@interface TableViewPullAppDelegate : NSObject <UIApplicationDelegate> {
View
18 Demo/TableViewPull/Classes/TableViewPullAppDelegate.m
@@ -5,6 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright enormego 2009. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import "TableViewPullAppDelegate.h"
#import "RootViewController.h"
View
176 Demo/TableViewPull/TableViewPull.xcodeproj/codekeeper.mode1v3
@@ -216,7 +216,90 @@
</dict>
</array>
<key>OpenEditors</key>
- <array/>
+ <array>
+ <dict>
+ <key>Content</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>3A451E5410D1755B00C10A50</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>EGORefreshTableHeaderView.m</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>3A451E5510D1755B00C10A50</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>EGORefreshTableHeaderView.m</string>
+ <key>_historyCapacity</key>
+ <integer>0</integer>
+ <key>bookmark</key>
+ <string>3ABDA77C10D1862E003ABED5</string>
+ <key>history</key>
+ <array>
+ <string>3A451E9C10D176CB00C10A50</string>
+ <string>3A451F1910D181A300C10A50</string>
+ </array>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>Geometry</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 20}, {1310, 836}}</string>
+ <key>PBXModuleWindowStatusBarHidden2</key>
+ <false/>
+ <key>RubberWindowFrame</key>
+ <string>1796 21 1310 877 1680 -99 1680 1050 </string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Content</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>3A451C2010D1570500C10A50</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>EGOTableViewPullRefresh.m</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>3A451C2110D1570500C10A50</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>EGOTableViewPullRefresh.m</string>
+ <key>_historyCapacity</key>
+ <integer>0</integer>
+ <key>bookmark</key>
+ <string>3ABDA77D10D1862E003ABED5</string>
+ <key>history</key>
+ <array>
+ <string>3A451EBA10D1775100C10A50</string>
+ <string>3A451F1A10D181A300C10A50</string>
+ </array>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>Geometry</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 20}, {1310, 836}}</string>
+ <key>PBXModuleWindowStatusBarHidden2</key>
+ <false/>
+ <key>RubberWindowFrame</key>
+ <string>1834 62 1310 877 1680 -99 1680 1050 </string>
+ </dict>
+ </dict>
+ </array>
<key>PerspectiveWidths</key>
<array>
<integer>-1</integer>
@@ -248,8 +331,6 @@
<key>Layout</key>
<array>
<dict>
- <key>BecomeActive</key>
- <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXBottomSmartGroupGIDs</key>
@@ -296,9 +377,6 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
- <integer>6</integer>
- <integer>5</integer>
- <integer>1</integer>
<integer>0</integer>
</array>
</array>
@@ -322,7 +400,7 @@
<real>331</real>
</array>
<key>RubberWindowFrame</key>
- <string>121 232 1283 793 0 0 1680 1028 </string>
+ <string>128 235 1283 793 0 0 1680 1028 </string>
</dict>
<key>Module</key>
<string>PBXSmartGroupTreeModule</string>
@@ -333,35 +411,39 @@
<key>Dock</key>
<array>
<dict>
+ <key>BecomeActive</key>
+ <true/>
<key>ContentConfiguration</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>1CE0B20306471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
- <string>EGORefreshTableHeaderView.h</string>
+ <string>EGORefreshTableHeaderView.m</string>
<key>PBXSplitModuleInNavigatorKey</key>
<dict>
<key>Split0</key>
<dict>
<key>PBXProjectModuleGUID</key>
<string>1CE0B20406471E060097A5F4</string>
<key>PBXProjectModuleLabel</key>
- <string>EGORefreshTableHeaderView.h</string>
+ <string>EGORefreshTableHeaderView.m</string>
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>3AC3B09210974574009D9249</string>
+ <string>3ABDA77A10D1862E003ABED5</string>
<key>history</key>
<array>
- <string>3A2586091088EDA100126784</string>
- <string>3A25860A1088EDA100126784</string>
- <string>3A25860B1088EDA100126784</string>
- <string>3A25860C1088EDA100126784</string>
- <string>3AC3B0891097456F009D9249</string>
- <string>3AC3B08B1097456F009D9249</string>
- <string>3AC3B08C1097456F009D9249</string>
- <string>3AC3B08D1097456F009D9249</string>
- <string>3AC3B08E1097456F009D9249</string>
+ <string>3A451E9110D176B300C10A50</string>
+ <string>3ABDA76A10D18625003ABED5</string>
+ <string>3ABDA76C10D18625003ABED5</string>
+ <string>3ABDA76D10D18625003ABED5</string>
+ <string>3ABDA76E10D18625003ABED5</string>
+ <string>3ABDA76F10D18625003ABED5</string>
+ <string>3ABDA77010D18625003ABED5</string>
+ <string>3ABDA77110D18625003ABED5</string>
+ <string>3ABDA77210D18625003ABED5</string>
+ <string>3ABDA77710D1862E003ABED5</string>
+ <string>3ABDA77810D1862E003ABED5</string>
</array>
</dict>
<key>SplitCount</key>
@@ -373,14 +455,14 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 0}, {930, 558}}</string>
+ <string>{{0, 0}, {930, 548}}</string>
<key>RubberWindowFrame</key>
- <string>121 232 1283 793 0 0 1680 1028 </string>
+ <string>128 235 1283 793 0 0 1680 1028 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
- <string>558pt</string>
+ <string>548pt</string>
</dict>
<dict>
<key>ContentConfiguration</key>
@@ -393,14 +475,14 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
- <string>{{0, 563}, {930, 189}}</string>
+ <string>{{0, 553}, {930, 199}}</string>
<key>RubberWindowFrame</key>
- <string>121 232 1283 793 0 0 1680 1028 </string>
+ <string>128 235 1283 793 0 0 1680 1028 </string>
</dict>
<key>Module</key>
<string>XCDetailModule</string>
<key>Proportion</key>
- <string>189pt</string>
+ <string>199pt</string>
</dict>
</array>
<key>Proportion</key>
@@ -419,9 +501,9 @@
</array>
<key>TableOfContents</key>
<array>
- <string>3AC3B0601097432F009D9249</string>
+ <string>3ABDA75A10D185DB003ABED5</string>
<string>1CE0B1FE06471DED0097A5F4</string>
- <string>3AC3B0611097432F009D9249</string>
+ <string>3ABDA75B10D185DB003ABED5</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@@ -542,7 +624,7 @@
<key>StatusbarIsVisible</key>
<true/>
<key>TimeStamp</key>
- <real>278349172.110636</real>
+ <real>282166830.54056698</real>
<key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string>
<key>ToolbarDisplayMode</key>
@@ -559,13 +641,13 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
- <string>1C78EAAD065D492600B07095</string>
- <string>1CD10A99069EF8BA00B06720</string>
<string>3A2581631088BE7100126784</string>
- <string>/Users/codekeeper/Desktop/enormego-EGOTableViewPullRefresh-516fbed-1/Demo/TableViewPull/TableViewPull.xcodeproj</string>
+ <string>3A451C2010D1570500C10A50</string>
+ <string>3A451E5410D1755B00C10A50</string>
+ <string>/Users/codekeeper/EGOTableViewPullRefresh/Demo/TableViewPull/TableViewPull.xcodeproj</string>
</array>
<key>WindowString</key>
- <string>121 232 1283 793 0 0 1680 1028 </string>
+ <string>128 235 1283 793 0 0 1680 1028 </string>
<key>WindowToolsV3</key>
<array>
<dict>
@@ -644,7 +726,7 @@
<key>TableOfContents</key>
<array>
<string>3A2581631088BE7100126784</string>
- <string>3AC3B05B10974251009D9249</string>
+ <string>3ABDA75E10D185DB003ABED5</string>
<string>1CD0528F0623707200166675</string>
<string>XCMainBuildResultsModuleGUID</string>
</array>
@@ -688,8 +770,8 @@
<string>yes</string>
<key>sizes</key>
<array>
- <string>{{0, 0}, {316, 194}}</string>
- <string>{{316, 0}, {378, 194}}</string>
+ <string>{{0, 0}, {316, 198}}</string>
+ <string>{{316, 0}, {378, 198}}</string>
</array>
</dict>
<key>VerticalSplitView</key>
@@ -704,8 +786,8 @@
<string>yes</string>
<key>sizes</key>
<array>
- <string>{{0, 0}, {694, 194}}</string>
- <string>{{0, 194}, {694, 187}}</string>
+ <string>{{0, 0}, {694, 198}}</string>
+ <string>{{0, 198}, {694, 183}}</string>
</array>
</dict>
</dict>
@@ -738,7 +820,7 @@
<real>148</real>
</array>
<key>Frame</key>
- <string>{{316, 0}, {378, 194}}</string>
+ <string>{{316, 0}, {378, 198}}</string>
<key>RubberWindowFrame</key>
<string>886 411 694 422 0 0 1680 1028 </string>
</dict>
@@ -766,13 +848,13 @@
<key>TableOfContents</key>
<array>
<string>1CD10A99069EF8BA00B06720</string>
- <string>3AC3B06C1097432F009D9249</string>
+ <string>3A451BE710D1541A00C10A50</string>
<string>1C162984064C10D400B95A72</string>
- <string>3AC3B06D1097432F009D9249</string>
- <string>3AC3B06E1097432F009D9249</string>
- <string>3AC3B06F1097432F009D9249</string>
- <string>3AC3B0701097432F009D9249</string>
- <string>3AC3B0711097432F009D9249</string>
+ <string>3A451BE810D1541A00C10A50</string>
+ <string>3A451BE910D1541A00C10A50</string>
+ <string>3A451BEA10D1541A00C10A50</string>
+ <string>3A451BEB10D1541A00C10A50</string>
+ <string>3A451BEC10D1541A00C10A50</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.debugV3</string>
@@ -913,7 +995,7 @@
<key>Frame</key>
<string>{{0, 0}, {650, 209}}</string>
<key>RubberWindowFrame</key>
- <string>886 583 650 250 0 0 1680 1028 </string>
+ <string>0 680 650 250 0 0 1680 1028 </string>
</dict>
<key>Module</key>
<string>PBXDebugCLIModule</string>
@@ -936,13 +1018,13 @@
<key>TableOfContents</key>
<array>
<string>1C78EAAD065D492600B07095</string>
- <string>3AC3B0721097432F009D9249</string>
+ <string>3A451BED10D1541A00C10A50</string>
<string>1C78EAAC065D492600B07095</string>
</array>
<key>ToolbarConfiguration</key>
<string>xcode.toolbar.config.consoleV3</string>
<key>WindowString</key>
- <string>886 583 650 250 0 0 1680 1028 </string>
+ <string>0 680 650 250 0 0 1680 1028 </string>
<key>WindowToolGUID</key>
<string>1C78EAAD065D492600B07095</string>
<key>WindowToolIsVisible</key>
View
287 Demo/TableViewPull/TableViewPull.xcodeproj/codekeeper.pbxuser
@@ -2,16 +2,16 @@
{
1D3623240D0F684500981E51 /* TableViewPullAppDelegate.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {600, 260}}";
- sepNavSelRange = "{125, 0}";
- sepNavVisRange = "{0, 459}";
+ sepNavIntBoundsRect = "{{0, 0}, {869, 516}}";
+ sepNavSelRange = "{1245, 0}";
+ sepNavVisRange = "{0, 1549}";
};
};
1D3623250D0F684500981E51 /* TableViewPullAppDelegate.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {516, 585}}";
- sepNavSelRange = "{125, 0}";
- sepNavVisRange = "{0, 340}";
+ sepNavIntBoundsRect = "{{0, 0}, {869, 806}}";
+ sepNavSelRange = "{811, 0}";
+ sepNavVisRange = "{0, 1539}";
};
};
1D6058900D05DD3D006BFB54 /* TableViewPull */ = {
@@ -22,17 +22,17 @@
};
28C286DF0D94DF7D0034E888 /* RootViewController.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {677, 245}}";
- sepNavSelRange = "{119, 0}";
- sepNavVisRange = "{0, 395}";
+ sepNavIntBoundsRect = "{{0, 0}, {869, 516}}";
+ sepNavSelRange = "{1240, 0}";
+ sepNavVisRange = "{0, 1486}";
sepNavWindowFrame = "{{15, 90}, {1310, 933}}";
};
};
28C286E00D94DF7D0034E888 /* RootViewController.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {908, 2223}}";
- sepNavSelRange = "{2433, 0}";
- sepNavVisRange = "{2156, 428}";
+ sepNavIntBoundsRect = "{{0, 0}, {1048, 2418}}";
+ sepNavSelRange = "{1240, 0}";
+ sepNavVisRange = "{0, 1751}";
sepNavWindowFrame = "{{168, 95}, {1310, 933}}";
};
};
@@ -105,20 +105,28 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 278348307;
- PBXWorkspaceStateSaveDate = 278348307;
+ PBXPerProjectTemplateStateSaveDate = 282166744;
+ PBXWorkspaceStateSaveDate = 282166744;
};
perUserProjectItems = {
- 3A2586091088EDA100126784 /* PBXTextBookmark */ = 3A2586091088EDA100126784 /* PBXTextBookmark */;
- 3A25860A1088EDA100126784 /* PBXTextBookmark */ = 3A25860A1088EDA100126784 /* PBXTextBookmark */;
- 3A25860B1088EDA100126784 /* PBXTextBookmark */ = 3A25860B1088EDA100126784 /* PBXTextBookmark */;
- 3A25860C1088EDA100126784 /* PBXTextBookmark */ = 3A25860C1088EDA100126784 /* PBXTextBookmark */;
- 3AC3B0891097456F009D9249 /* PBXTextBookmark */ = 3AC3B0891097456F009D9249 /* PBXTextBookmark */;
- 3AC3B08B1097456F009D9249 /* PBXTextBookmark */ = 3AC3B08B1097456F009D9249 /* PBXTextBookmark */;
- 3AC3B08C1097456F009D9249 /* PBXTextBookmark */ = 3AC3B08C1097456F009D9249 /* PBXTextBookmark */;
- 3AC3B08D1097456F009D9249 /* PBXTextBookmark */ = 3AC3B08D1097456F009D9249 /* PBXTextBookmark */;
- 3AC3B08E1097456F009D9249 /* PBXTextBookmark */ = 3AC3B08E1097456F009D9249 /* PBXTextBookmark */;
- 3AC3B09210974574009D9249 /* PBXTextBookmark */ = 3AC3B09210974574009D9249 /* PBXTextBookmark */;
+ 3A451E9110D176B300C10A50 /* PBXBookmark */ = 3A451E9110D176B300C10A50 /* PBXBookmark */;
+ 3A451E9C10D176CB00C10A50 /* PBXTextBookmark */ = 3A451E9C10D176CB00C10A50 /* PBXTextBookmark */;
+ 3A451EBA10D1775100C10A50 /* PBXTextBookmark */ = 3A451EBA10D1775100C10A50 /* PBXTextBookmark */;
+ 3A451F1910D181A300C10A50 /* PBXTextBookmark */ = 3A451F1910D181A300C10A50 /* PBXTextBookmark */;
+ 3A451F1A10D181A300C10A50 /* PBXTextBookmark */ = 3A451F1A10D181A300C10A50 /* PBXTextBookmark */;
+ 3ABDA76A10D18625003ABED5 /* PBXTextBookmark */ = 3ABDA76A10D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA76C10D18625003ABED5 /* PBXTextBookmark */ = 3ABDA76C10D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA76D10D18625003ABED5 /* PBXTextBookmark */ = 3ABDA76D10D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA76E10D18625003ABED5 /* PBXTextBookmark */ = 3ABDA76E10D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA76F10D18625003ABED5 /* PBXTextBookmark */ = 3ABDA76F10D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA77010D18625003ABED5 /* PBXTextBookmark */ = 3ABDA77010D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA77110D18625003ABED5 /* PBXTextBookmark */ = 3ABDA77110D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA77210D18625003ABED5 /* PBXTextBookmark */ = 3ABDA77210D18625003ABED5 /* PBXTextBookmark */;
+ 3ABDA77710D1862E003ABED5 /* PBXTextBookmark */ = 3ABDA77710D1862E003ABED5 /* PBXTextBookmark */;
+ 3ABDA77810D1862E003ABED5 /* PBXTextBookmark */ = 3ABDA77810D1862E003ABED5 /* PBXTextBookmark */;
+ 3ABDA77A10D1862E003ABED5 /* PBXTextBookmark */ = 3ABDA77A10D1862E003ABED5 /* PBXTextBookmark */;
+ 3ABDA77C10D1862E003ABED5 /* PBXTextBookmark */ = 3ABDA77C10D1862E003ABED5 /* PBXTextBookmark */;
+ 3ABDA77D10D1862E003ABED5 /* PBXTextBookmark */ = 3ABDA77D10D1862E003ABED5 /* PBXTextBookmark */;
};
sourceControlManager = 3A25814B1088BD1000126784 /* Source Control */;
userBuildSettings = {
@@ -168,140 +176,229 @@
};
3A2581531088BD8100126784 /* EGOTableViewPullRefresh.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {869, 526}}";
- sepNavSelRange = "{179, 0}";
- sepNavVisRange = "{0, 542}";
+ sepNavIntBoundsRect = "{{0, 0}, {869, 598}}";
+ sepNavSelRange = "{1245, 0}";
+ sepNavVisRange = "{0, 1567}";
sepNavWindowFrame = "{{1826, -89}, {1310, 933}}";
};
};
3A2581541088BD8100126784 /* EGOTableViewPullRefresh.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1132, 1040}}";
- sepNavSelRange = "{888, 0}";
- sepNavVisRange = "{155, 1610}";
- sepNavWindowFrame = "{{370, 95}, {1310, 933}}";
+ sepNavIntBoundsRect = "{{0, 0}, {1251, 1209}}";
+ sepNavSelRange = "{3373, 0}";
+ sepNavVisRange = "{399, 2646}";
+ sepNavWindowFrame = "{{153, 95}, {1310, 933}}";
};
};
3A25815B1088BDAC00126784 /* EGORefreshTableHeaderView.h */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {869, 526}}";
- sepNavSelRange = "{173, 0}";
- sepNavVisRange = "{0, 520}";
+ sepNavIntBoundsRect = "{{0, 0}, {869, 637}}";
+ sepNavSelRange = "{1238, 0}";
+ sepNavVisRange = "{0, 1484}";
sepNavWindowFrame = "{{15, 82}, {1568, 944}}";
};
};
3A25815C1088BDAC00126784 /* EGORefreshTableHeaderView.m */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {880, 1716}}";
- sepNavSelRange = "{877, 0}";
- sepNavVisRange = "{514, 1837}";
- sepNavWindowFrame = "{{349, 95}, {1310, 933}}";
+ sepNavIntBoundsRect = "{{0, 0}, {1419, 2158}}";
+ sepNavSelRange = "{6082, 0}";
+ sepNavVisRange = "{3169, 2484}";
+ sepNavWindowFrame = "{{89, 95}, {1310, 933}}";
};
};
- 3A2586091088EDA100126784 /* PBXTextBookmark */ = {
+ 3A451E9110D176B300C10A50 /* PBXBookmark */ = {
+ isa = PBXBookmark;
+ fRef = 3A2585541088E97000126784 /* whiteArrow.png */;
+ };
+ 3A451E9C10D176CB00C10A50 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 28C286E00D94DF7D0034E888 /* RootViewController.m */;
- name = "RootViewController.m: 6";
- rLen = 8;
- rLoc = 111;
+ fRef = 3A25815B1088BDAC00126784 /* EGORefreshTableHeaderView.h */;
+ name = "EGORefreshTableHeaderView.h: 23";
+ rLen = 0;
+ rLoc = 1503;
rType = 0;
- vrLen = 483;
+ vrLen = 552;
vrLoc = 0;
};
- 3A25860A1088EDA100126784 /* PBXTextBookmark */ = {
+ 3A451EBA10D1775100C10A50 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 28C286DF0D94DF7D0034E888 /* RootViewController.h */;
- name = "RootViewController.h: 6";
+ fRef = 3A2581531088BD8100126784 /* EGOTableViewPullRefresh.h */;
+ name = "EGOTableViewPullRefresh.h: 20";
rLen = 0;
- rLoc = 119;
+ rLoc = 1560;
rType = 0;
- vrLen = 395;
+ vrLen = 557;
vrLoc = 0;
};
- 3A25860B1088EDA100126784 /* PBXTextBookmark */ = {
+ 3A451F1910D181A300C10A50 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 1D3623240D0F684500981E51 /* TableViewPullAppDelegate.h */;
- name = "TableViewPullAppDelegate.h: 6";
+ fRef = 3A25815C1088BDAC00126784 /* EGORefreshTableHeaderView.m */;
+ name = "EGORefreshTableHeaderView.m: 133";
rLen = 0;
- rLoc = 125;
+ rLoc = 6082;
rType = 0;
- vrLen = 459;
- vrLoc = 0;
+ vrLen = 2083;
+ vrLoc = 3224;
};
- 3A25860C1088EDA100126784 /* PBXTextBookmark */ = {
+ 3A451F1A10D181A300C10A50 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 1D3623250D0F684500981E51 /* TableViewPullAppDelegate.m */;
- name = "TableViewPullAppDelegate.m: 6";
+ fRef = 3A2581541088BD8100126784 /* EGOTableViewPullRefresh.m */;
+ name = "EGOTableViewPullRefresh.m: 69";
rLen = 0;
- rLoc = 125;
+ rLoc = 3373;
rType = 0;
- vrLen = 340;
- vrLoc = 0;
+ vrLen = 2085;
+ vrLoc = 363;
};
- 3AC3B0891097456F009D9249 /* PBXTextBookmark */ = {
+ 3ABDA76A10D18625003ABED5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3AC3B08A1097456F009D9249 /* EGORefreshTableHeaderView.m */;
- name = "EGORefreshTableHeaderView.m: 1";
+ fRef = 3ABDA76B10D18625003ABED5 /* NSArrayHelper.m */;
+ name = "NSArrayHelper.m: 17";
rLen = 0;
- rLoc = 0;
+ rLoc = 733;
rType = 0;
- vrLen = 1436;
+ vrLen = 1661;
vrLoc = 0;
};
- 3AC3B08A1097456F009D9249 /* EGORefreshTableHeaderView.m */ = {
+ 3ABDA76B10D18625003ABED5 /* NSArrayHelper.m */ = {
isa = PBXFileReference;
- name = EGORefreshTableHeaderView.m;
- path = "/Users/codekeeper/Desktop/enormego-EGOTableViewPullRefresh-516fbed-1/EGOTableViewPullRefresh/Classes/EGORefreshTableHeaderView.m";
+ name = NSArrayHelper.m;
+ path = "/Users/codekeeper/Downloads/enormego-cocoa-helpers-842d0df/NSArray/NSArrayHelper.m";
sourceTree = "<absolute>";
};
- 3AC3B08B1097456F009D9249 /* PBXTextBookmark */ = {
+ 3ABDA76C10D18625003ABED5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 3A2581541088BD8100126784 /* EGOTableViewPullRefresh.m */;
- name = "EGOTableViewPullRefresh.m: 29";
+ name = "EGOTableViewPullRefresh.m: 25";
rLen = 0;
- rLoc = 888;
+ rLoc = 1244;
rType = 0;
- vrLen = 1610;
- vrLoc = 155;
+ vrLen = 1847;
+ vrLoc = 0;
};
- 3AC3B08C1097456F009D9249 /* PBXTextBookmark */ = {
+ 3ABDA76D10D18625003ABED5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3A2581531088BD8100126784 /* EGOTableViewPullRefresh.h */;
- name = "EGOTableViewPullRefresh.h: 9";
+ fRef = 3A25815C1088BDAC00126784 /* EGORefreshTableHeaderView.m */;
+ name = "EGORefreshTableHeaderView.m: 26";
rLen = 0;
- rLoc = 179;
+ rLoc = 1238;
rType = 0;
- vrLen = 542;
+ vrLen = 1636;
+ vrLoc = 3;
+ };
+ 3ABDA76E10D18625003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3A25815B1088BDAC00126784 /* EGORefreshTableHeaderView.h */;
+ name = "EGORefreshTableHeaderView.h: 26";
+ rLen = 0;
+ rLoc = 1238;
+ rType = 0;
+ vrLen = 1484;
vrLoc = 0;
};
- 3AC3B08D1097456F009D9249 /* PBXTextBookmark */ = {
+ 3ABDA76F10D18625003ABED5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3A25815C1088BDAC00126784 /* EGORefreshTableHeaderView.m */;
- name = "EGORefreshTableHeaderView.m: 29";
+ fRef = 28C286E00D94DF7D0034E888 /* RootViewController.m */;
+ name = "RootViewController.m: 26";
rLen = 0;
- rLoc = 877;
+ rLoc = 1240;
rType = 0;
- vrLen = 1837;
- vrLoc = 514;
+ vrLen = 1751;
+ vrLoc = 0;
};
- 3AC3B08E1097456F009D9249 /* PBXTextBookmark */ = {
+ 3ABDA77010D18625003ABED5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3A25815B1088BDAC00126784 /* EGORefreshTableHeaderView.h */;
- name = "EGORefreshTableHeaderView.h: 10";
+ fRef = 28C286DF0D94DF7D0034E888 /* RootViewController.h */;
+ name = "RootViewController.h: 26";
rLen = 0;
- rLoc = 173;
+ rLoc = 1240;
rType = 0;
- vrLen = 520;
+ vrLen = 1486;
vrLoc = 0;
};
- 3AC3B09210974574009D9249 /* PBXTextBookmark */ = {
+ 3ABDA77110D18625003ABED5 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
- fRef = 3A25815B1088BDAC00126784 /* EGORefreshTableHeaderView.h */;
- name = "EGORefreshTableHeaderView.h: 10";
+ fRef = 1D3623240D0F684500981E51 /* TableViewPullAppDelegate.h */;
+ name = "TableViewPullAppDelegate.h: 25";
+ rLen = 0;
+ rLoc = 1245;
+ rType = 0;
+ vrLen = 1549;
+ vrLoc = 0;
+ };
+ 3ABDA77210D18625003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 1D3623250D0F684500981E51 /* TableViewPullAppDelegate.m */;
+ name = "TableViewPullAppDelegate.m: 18";
rLen = 0;
- rLoc = 173;
+ rLoc = 811;
rType = 0;
- vrLen = 520;
+ vrLen = 1539;
vrLoc = 0;
};
+ 3ABDA77710D1862E003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3A2581531088BD8100126784 /* EGOTableViewPullRefresh.h */;
+ name = "EGOTableViewPullRefresh.h: 26";
+ rLen = 0;
+ rLoc = 1245;
+ rType = 0;
+ vrLen = 1567;
+ vrLoc = 0;
+ };
+ 3ABDA77810D1862E003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3ABDA77910D1862E003ABED5 /* EGORefreshTableHeaderView.m */;
+ rLen = 0;
+ rLoc = 9223372036854776897;
+ rType = 0;
+ };
+ 3ABDA77910D1862E003ABED5 /* EGORefreshTableHeaderView.m */ = {
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.objc;
+ name = EGORefreshTableHeaderView.m;
+ path = /Users/codekeeper/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/EGORefreshTableHeaderView.m;
+ sourceTree = "<absolute>";
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {869, 2405}}";
+ sepNavSelRange = "{1238, 0}";
+ sepNavVisRange = "{0, 1638}";
+ };
+ };
+ 3ABDA77A10D1862E003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3ABDA77B10D1862E003ABED5 /* EGORefreshTableHeaderView.m */;
+ name = "EGORefreshTableHeaderView.m: 26";
+ rLen = 0;
+ rLoc = 1238;
+ rType = 0;
+ vrLen = 1638;
+ vrLoc = 0;
+ };
+ 3ABDA77B10D1862E003ABED5 /* EGORefreshTableHeaderView.m */ = {
+ isa = PBXFileReference;
+ name = EGORefreshTableHeaderView.m;
+ path = /Users/codekeeper/EGOTableViewPullRefresh/EGOTableViewPullRefresh/Classes/EGORefreshTableHeaderView.m;
+ sourceTree = "<absolute>";
+ };
+ 3ABDA77C10D1862E003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3A25815C1088BDAC00126784 /* EGORefreshTableHeaderView.m */;
+ name = "EGORefreshTableHeaderView.m: 151";
+ rLen = 0;
+ rLoc = 6082;
+ rType = 0;
+ vrLen = 2484;
+ vrLoc = 3169;
+ };
+ 3ABDA77D10D1862E003ABED5 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 3A2581541088BD8100126784 /* EGOTableViewPullRefresh.m */;
+ name = "EGOTableViewPullRefresh.m: 86";
+ rLen = 0;
+ rLoc = 3373;
+ rType = 0;
+ vrLen = 2646;
+ vrLoc = 399;
+ };
}
View
BIN Demo/TableViewPull/blackArrow.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN Demo/TableViewPull/blueArrow.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN Demo/TableViewPull/whiteArrow.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
26 EGOTableViewPullRefresh/Classes/EGORefreshTableHeaderView.h
@@ -5,19 +5,39 @@
// Created by Devin Doty on 10/14/09October14.
// Copyright 2009 enormego. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import <UIKit/UIKit.h>
-
+#import <QuartzCore/QuartzCore.h>
@interface EGORefreshTableHeaderView : UIView {
UILabel *lastUpdatedLabel;
UILabel *statusLabel;
- UIImageView *arrowImage;
+ CALayer *arrowImage;
UIActivityIndicatorView *activityView;
-
+
BOOL isFlipped;
+
}
+
@property BOOL isFlipped;
- (void)flipImageAnimated:(BOOL)animated;
View
65 EGOTableViewPullRefresh/Classes/EGORefreshTableHeaderView.m
@@ -5,9 +5,26 @@
// Created by Devin Doty on 10/14/09October14.
// Copyright 2009 enormego. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import "EGORefreshTableHeaderView.h"
-#import <QuartzCore/QuartzCore.h>
#define kReleaseToReloadStatus 0
#define kPullToReloadStatus 1
@@ -21,27 +38,31 @@ @implementation EGORefreshTableHeaderView
@synthesize isFlipped;
+
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
+
+ self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
- lastUpdatedLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 30.0f, 320.0f, 20.0f)];
+ lastUpdatedLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 30.0f, self.frame.size.width, 20.0f)];
+ lastUpdatedLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
lastUpdatedLabel.font = [UIFont systemFontOfSize:12.0f];
lastUpdatedLabel.textColor = TEXT_COLOR;
lastUpdatedLabel.shadowColor = [UIColor colorWithWhite:0.9f alpha:1.0f];
lastUpdatedLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
lastUpdatedLabel.backgroundColor = [UIColor clearColor];
lastUpdatedLabel.textAlignment = UITextAlignmentCenter;
[self addSubview:lastUpdatedLabel];
-
+ [lastUpdatedLabel release];
+
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"EGORefreshTableView_LastRefresh"]) {
lastUpdatedLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"EGORefreshTableView_LastRefresh"];
} else {
[self setCurrentDate];
}
- [lastUpdatedLabel release];
-
statusLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 48.0f, 320.0f, 20.0f)];
+ statusLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth;
statusLabel.font = [UIFont boldSystemFontOfSize:13.0f];
statusLabel.textColor = TEXT_COLOR;
statusLabel.shadowColor = [UIColor colorWithWhite:0.9f alpha:1.0f];
@@ -52,11 +73,11 @@ - (id)initWithFrame:(CGRect)frame {
[self addSubview:statusLabel];
[statusLabel release];
- arrowImage = [[UIImageView alloc] initWithFrame:CGRectMake(25.0f, frame.size.height - 65.0f, 30.0f, 55.0f)];
- arrowImage.contentMode = UIViewContentModeScaleAspectFit;
- arrowImage.image = [UIImage imageNamed:@"blueArrow.png"];
- [arrowImage layer].transform = CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 1.0f);
- [self addSubview:arrowImage];
+ arrowImage = [[CALayer alloc] init];
+ arrowImage.frame = CGRectMake(25.0f, frame.size.height - 65.0f, 30.0f, 55.0f);
+ arrowImage.contentsGravity = kCAGravityResizeAspect;
+ arrowImage.contents = (id)[UIImage imageNamed:@"blueArrow.png"].CGImage;
+ [[self layer] addSublayer:arrowImage];
[arrowImage release];
activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
@@ -66,7 +87,6 @@ - (id)initWithFrame:(CGRect)frame {
[activityView release];
isFlipped = NO;
-
}
return self;
}
@@ -83,10 +103,17 @@ - (void)drawRect:(CGRect)rect{
- (void)flipImageAnimated:(BOOL)animated{
- [UIView beginAnimations:nil context:NULL];
- [UIView setAnimationDuration:animated ? .18 : 0.0];
- [arrowImage layer].transform = isFlipped ? CATransform3DMakeRotation(M_PI, 0.0f, 0.0f, 1.0f) : CATransform3DMakeRotation(M_PI * 2, 0.0f, 0.0f, 1.0f);
- [UIView commitAnimations];
+ if (!animated) {
+ [arrowImage removeAllAnimations];
+ } else {
+ CABasicAnimation *animation = [CABasicAnimation animation];
+ animation.fromValue = isFlipped ? [NSValue valueWithCATransform3D:CATransform3DMakeRotation((M_PI / 180.0) * 179.9, 0.0f, 0.0f, 1.0f)] : [NSValue valueWithCATransform3D:CATransform3DIdentity];
+ animation.toValue = isFlipped ? [NSValue valueWithCATransform3D:CATransform3DIdentity] : [NSValue valueWithCATransform3D:CATransform3DMakeRotation((M_PI / 180.0) * 179.9, 0.0f, 0.0f, 1.0f)];
+ animation.duration = animated ? .18 : 0.0;
+ animation.removedOnCompletion = NO;
+ animation.fillMode = kCAFillModeForwards;
+ [arrowImage addAnimation:animation forKey:@"transform"];
+ }
isFlipped = !isFlipped;
}
@@ -119,15 +146,21 @@ - (void)setStatus:(int)status{
}
- (void)toggleActivityView{
+
+ [CATransaction begin];
+ [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; // kill layers implicit fade animation
+
if ([activityView isAnimating]) {
[activityView stopAnimating];
arrowImage.hidden = NO;
+ [self setStatus:kPullToReloadStatus];
} else {
[activityView startAnimating];
arrowImage.hidden = YES;
[self setStatus:kLoadingStatus];
}
-
+
+ [CATransaction commit];
}
- (void)dealloc {
View
22 EGOTableViewPullRefresh/Classes/EGOTableViewPullRefresh.h
@@ -5,6 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright 2009 enormego. All rights reserved.
//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@@ -14,8 +32,8 @@
@interface EGOTableViewPullRefresh : UITableView <UITableViewDelegate>{
EGORefreshTableHeaderView *refreshHeaderView;
- BOOL reloading;
- BOOL checkForRefresh;
+ BOOL reloading; // should be pulled from datasource
+
}
- (void)dataSourceDidFinishLoadingNewData;
@end
View
45 EGOTableViewPullRefresh/Classes/EGOTableViewPullRefresh.m
@@ -5,7 +5,24 @@
// Created by Devin Doty on 10/16/09October16.
// Copyright 2009 enormego. All rights reserved.
//
-
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
#import "EGOTableViewPullRefresh.h"
#import "EGORefreshTableHeaderView.h"
@@ -17,6 +34,7 @@
@implementation EGOTableViewPullRefresh
- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
+
if (self = [super initWithFrame:frame style:style]){
refreshHeaderView = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.bounds.size.height, 320.0f, self.bounds.size.height)];
refreshHeaderView.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:237.0/255.0 alpha:1.0];
@@ -27,24 +45,22 @@ - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
return self;
}
-- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;{
- checkForRefresh = YES; // only check offset when dragging
-}
-
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
- if (checkForRefresh) {
+
+ if (scrollView.isDragging) {
if (refreshHeaderView.isFlipped && scrollView.contentOffset.y > -65.0f && scrollView.contentOffset.y < 0.0f && !reloading) {
[refreshHeaderView flipImageAnimated:YES];
[refreshHeaderView setStatus:kPullToReloadStatus];
- } else if (!refreshHeaderView.isFlipped && scrollView.contentOffset.y < -65.0f) {
+ } else if (!refreshHeaderView.isFlipped && scrollView.contentOffset.y < -65.0f && !reloading) {
[refreshHeaderView flipImageAnimated:YES];
[refreshHeaderView setStatus:kReleaseToReloadStatus];
}
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
- if (scrollView.contentOffset.y <= - 65.0f) {
+
+ if (scrollView.contentOffset.y <= - 65.0f && !reloading) {
if([self.dataSource respondsToSelector:@selector(reloadTableViewDataSource)]){
reloading = YES;
[(id)self.dataSource reloadTableViewDataSource];
@@ -54,20 +70,21 @@ - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL
self.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f);
[UIView commitAnimations];
}
- }
- checkForRefresh = NO;
+ }
}
- (void)dataSourceDidFinishLoadingNewData{
+
reloading = NO;
- [refreshHeaderView flipImageAnimated:NO];
+
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:.3];
[self setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)];
- [refreshHeaderView setStatus:kPullToReloadStatus];
- [refreshHeaderView toggleActivityView];
[UIView commitAnimations];
- [refreshHeaderView setCurrentDate];
+
+ [refreshHeaderView flipImageAnimated:NO]; // reset view
+ [refreshHeaderView toggleActivityView]; // reset view
+ [refreshHeaderView setCurrentDate]; // should check if data reload was successful
}
- (void)dealloc {
View
BIN EGOTableViewPullRefresh/Resources/blackArrow.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN EGOTableViewPullRefresh/Resources/blueArrow.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN EGOTableViewPullRefresh/Resources/whiteArrow.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit b71046d

Please sign in to comment.