Skip to content

Commit 1a97879

Browse files
author
Alfredo Uribe
committed
refresh spinner
edge hits for horizontal scrolling
1 parent 6413432 commit 1a97879

10 files changed

Lines changed: 2030 additions & 6178 deletions

File tree

EasyReader.xcodeproj/project.pbxproj

Lines changed: 1946 additions & 6161 deletions
Large diffs are not rendered by default.

EasyReader/Application/Controllers/Home/CollectionView/EZRFeedItemCollectionView.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#import <UIKit/UIKit.h>
1010
#import "FeedItem.h"
11+
#import "EZRHomeCollectionViewDelegate.h"
1112

1213
@class EZRFeedItemCollectionView;
1314

@@ -25,11 +26,14 @@
2526
*/
2627
@interface EZRFeedItemCollectionView : UICollectionView
2728

29+
@property UIActivityIndicatorView *indicator;
30+
2831
/// The feed item that is currently focused
2932
@property (nonatomic, readonly) FeedItem *currentFeedItem;
3033

3134
/// The curent visible page index
3235
@property (nonatomic, readonly) NSInteger currentPageIndex;
3336

37+
@property (nonatomic, weak) EZRHomeCollectionViewDelegate* delegate;
3438

3539
@end

EasyReader/Application/Controllers/Home/CollectionView/EZRFeedItemCollectionView.m

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#import "EZRFeedItemCollectionView.h"
1010
#import "EZRFeedItemCollectionViewCell.h"
11+
#import "EZRHomeViewController.h"
1112

1213
@implementation EZRFeedItemCollectionView
1314
{
@@ -36,9 +37,49 @@ - (id)initWithCoder:(NSCoder *)aDecoder {
3637
self.pagingEnabled = YES;
3738
}
3839

40+
[self setupTapRecognizer];
41+
[self setupRefreshIndicator];
42+
3943
return self;
4044
}
4145

46+
- (void)setupTapRecognizer {
47+
UITapGestureRecognizer *singleTapGestureRecognizer =
48+
[[UITapGestureRecognizer alloc] initWithTarget:self
49+
action:@selector(singleTap:)];
50+
singleTapGestureRecognizer.numberOfTapsRequired = 1;
51+
singleTapGestureRecognizer.enabled = YES;
52+
singleTapGestureRecognizer.cancelsTouchesInView = NO;
53+
[self addGestureRecognizer:singleTapGestureRecognizer];
54+
}
55+
56+
- (void)setupRefreshIndicator {
57+
self.indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
58+
self.indicator.frame = CGRectMake(10.0, ([self frame].size.height-40.0)/2, 40.0, 40.0);
59+
[self addSubview:self.indicator];
60+
[self bringSubviewToFront:self.indicator];
61+
[UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;
62+
self.delegate.isRefreshing = NO;
63+
}
64+
65+
- (void)singleTap:(UITapGestureRecognizer *)gesture {
66+
float viewWidth = [self frame].size.width;
67+
float x = [gesture locationInView:self].x - (viewWidth*[self currentPageIndex]);
68+
EZRHomeViewController *controller = self.delegate.controller;
69+
70+
if (x <= viewWidth/4 && [self currentPageIndex] != 0) {
71+
[self scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:[self currentPageIndex]-1 inSection:0]
72+
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
73+
animated:YES];
74+
} else if (x >= (viewWidth*3)/4 &&
75+
[self currentPageIndex] != [[[controller currentFeedsProvider] feedItems] count]-1) {
76+
[self scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:[self currentPageIndex]+1 inSection:0]
77+
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
78+
animated:YES];
79+
}
80+
}
81+
82+
4283
- (void)layoutSubviews {
4384
[super layoutSubviews];
4485

EasyReader/Application/Controllers/Home/CollectionView/EZRHomeCollectionViewDelegate.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,8 @@
1616
*/
1717
@interface EZRHomeCollectionViewDelegate : NSObject <UICollectionViewDelegate, EZRFeedItemCollectionViewCellDelegate>
1818

19+
@property (nonatomic, weak) IBOutlet EZRHomeViewController *controller;
20+
21+
@property BOOL isRefreshing;
22+
1923
@end

EasyReader/Application/Controllers/Home/CollectionView/EZRHomeCollectionViewDelegate.m

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ - (void)prefetchImagesNearIndex:(NSInteger)currentPageIndex count:(NSInteger)cou
2424

2525
@interface EZRHomeCollectionViewDelegate ()
2626

27-
@property (nonatomic, weak) IBOutlet EZRHomeViewController *controller;
28-
2927
@property (nonatomic, weak) IBOutlet EZRFeedItemCollectionView *collectionView;
3028

3129
@property (nonatomic, weak) IBOutlet UIScrollView *scrollView_vertical;
@@ -39,7 +37,6 @@ @implementation EZRHomeCollectionViewDelegate
3937
BOOL _scrollingAtStart;
4038
}
4139

42-
4340
/**
4441
* Fires when the collection view scrolls
4542
* Determines the current page index, and if it's changed it sets the appropriate page control
@@ -73,10 +70,15 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView
7370

7471
-(void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
7572
{
76-
if (_scrollingAtStart) {
77-
[EZRFeedItemUpdateService requestFiveMinutesOfFeedItems:self];
73+
if (_scrollingAtStart && !self.isRefreshing) {
74+
self.isRefreshing = YES;
75+
76+
[self.collectionView.indicator startAnimating];
77+
[EZRFeedItemUpdateService requestFiveMinutesOfFeedItemsWithCompletion:^void (BOOL success) {
78+
[self.collectionView.indicator stopAnimating];
79+
self.isRefreshing = NO;
80+
}];
7881
}
79-
8082
}
8183

8284
/**

EasyReader/Application/Controllers/Home/EZRHomeViewController.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#import "EZRFeedItemCollectionView.h"
1414
#import "CSNestableScrollView.h"
1515

16+
#import "EZRCurrentFeedsProvider.h"
17+
1618
// View Controllers
1719
#import "CSBaseViewController.h"
1820
#import "EZRNestableWebView.h"
@@ -46,6 +48,9 @@
4648

4749
# pragma mark - Properties
4850

51+
/// The current feeds provider object
52+
@property (nonatomic, strong) EZRCurrentFeedsProvider *currentFeedsProvider;
53+
4954
/// Feed Item currently visible
5055
@property (nonatomic, readonly) FeedItem *currentFeedItem;
5156

EasyReader/Application/Controllers/Home/EZRHomeViewController.m

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#import "EZRHomeScrollViewDelegate.h"
3636
#import "EZRHomePageControlDataSource.h"
3737
#import "EZRHomeWebViewDelegate.h"
38-
#import "EZRCurrentFeedsProvider.h"
3938

4039
#import "CLDArrayCollectionViewDataSource.h"
4140

@@ -51,10 +50,6 @@ @interface EZRHomeViewController()
5150

5251
@property User *currentUser;
5352

54-
55-
/// The current feeds provider object
56-
@property (nonatomic, strong) EZRCurrentFeedsProvider *currentFeedsProvider;
57-
5853
/// The social sharing toolbar
5954
@property (nonatomic, weak) IBOutlet CLDSocialShareToolbar *socialShareToolbar;
6055

EasyReader/Application/Services/EZRFeedItemUpdateService.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
/**
2222
* Requests five minutes of feed items
2323
*/
24-
+ (void)requestFiveMinutesOfFeedItems:(id)sender;
24+
+ (void)requestFiveMinutesOfFeedItemsWithCompletion:(void (^)(BOOL success)) completion;
2525

2626
@end

EasyReader/Application/Services/EZRFeedItemUpdateService.m

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
// Copyright (c) 2014 Cloudspace. All rights reserved.
77
//
88

9+
#import "EZRFeedItemCollectionView.h"
910
#import "EZRFeedItemUpdateService.h"
1011
#import "FeedItem.h"
1112
#import "Feed.h"
@@ -46,14 +47,18 @@ + (void) feedInvocations
4647

4748
+ (void)requestFiveMinutesOfFeedItems:(id)sender
4849
{
50+
[self requestFiveMinutesOfFeedItemsWithCompletion:nil];
51+
}
52+
53+
+ (void)requestFiveMinutesOfFeedItemsWithCompletion:(void (^)(BOOL success)) completion {
4954
NSCalendar *calendar = [NSCalendar currentCalendar];
5055
NSDate *today = [NSDate date];
5156

5257
NSDateComponents *fiveMinutesAgoComponents = [[NSDateComponents alloc] init];
5358
[fiveMinutesAgoComponents setMinute:-5];
5459
NSDate *fiveMinutesAgo = [calendar dateByAddingComponents:fiveMinutesAgoComponents toDate:today options:0];
5560

56-
[self requestFeedItemsSince:fiveMinutesAgo];
61+
[self requestFeedItemsSince:fiveMinutesAgo withCompletion:completion];
5762

5863
NSLog(@"Invocation ran!");
5964
}
@@ -74,15 +79,26 @@ + (void)requestOneWeekOfFeedItems
7479

7580
+ (void)requestFeedItemsSince:(NSDate *)since
7681
{
82+
[self requestFeedItemsSince:since withCompletion:nil];
83+
}
84+
85+
+ (void)requestFeedItemsSince:(NSDate *)since withCompletion:(void (^)(BOOL success)) completion {
7786
[FeedItem requestFeedItemsFromFeeds:[[User current] feeds]
7887
since:since
7988
success:^(id responseData, NSInteger httpStatus){
8089
NSInteger count = [responseData[@"feed_items"] count];
81-
8290
if (count > 0) {
83-
NSLog(@"%ld feed Items have been added", (long)count);
91+
NSLog(@"%ld feed Items have been added", (long)count);
92+
}
93+
94+
if (completion ) {
95+
completion(YES);
96+
}
97+
}failure:^(id responseObject, NSInteger httpStatus, NSError *error) {
98+
if (completion ) {
99+
completion(NO);
84100
}
85-
}failure:nil
101+
}
86102
];
87103
}
88104

EasyReader/Supporting Files/Staging-Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</dict>
3737
</array>
3838
<key>CFBundleVersion</key>
39-
<string>2.0.46</string>
39+
<string>2.0.47</string>
4040
<key>LSApplicationCategoryType</key>
4141
<string></string>
4242
<key>LSRequiresIPhoneOS</key>

0 commit comments

Comments
 (0)