Skip to content

Commit fc38e78

Browse files
Alfredo UribeAlfredo Uribe
authored andcommitted
Merge branch '67944744_page_controller_redesign' into setup_feed_search_merge_into
Conflicts: EasyReader/Application/Api/CSFakedDataRequestor.m
2 parents 998f0c4 + 5fbcd69 commit fc38e78

9 files changed

Lines changed: 270 additions & 87 deletions

File tree

EasyReader.xcodeproj/project.pbxproj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
2751F4E218DA0D3000339C96 /* CSFeedItemCollectionViewDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2751F4DD18DA0D3000339C96 /* CSFeedItemCollectionViewDataSource.m */; };
2727
2751F4E318DA0D3000339C96 /* CSFeedItemCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2751F4DF18DA0D3000339C96 /* CSFeedItemCell.m */; };
2828
2751F4E418DA0D3000339C96 /* CSFeedItemCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2751F4E118DA0D3000339C96 /* CSFeedItemCollectionView.m */; };
29+
8E685AA718DC733B00309270 /* CSCollectionPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E685AA618DC733B00309270 /* CSCollectionPageControl.m */; };
30+
8E685AA818DC733B00309270 /* CSCollectionPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E685AA618DC733B00309270 /* CSCollectionPageControl.m */; };
31+
8E685AA918DC733B00309270 /* CSCollectionPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E685AA618DC733B00309270 /* CSCollectionPageControl.m */; };
2932
8E7F403218D3596C00A6FED6 /* CSResponsiveApiRequestor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E7F403118D3596C00A6FED6 /* CSResponsiveApiRequestor.m */; };
3033
8E7F81F018D0BF8500BC50C2 /* CSBaseObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E7F81EF18D0BF8500BC50C2 /* CSBaseObject.m */; };
3134
9D140BF5171F68E000CDD319 /* button_add@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D140BF4171F68E000CDD319 /* button_add@2x.png */; };
@@ -257,6 +260,8 @@
257260
2751F4E118DA0D3000339C96 /* CSFeedItemCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSFeedItemCollectionView.m; sourceTree = "<group>"; };
258261
5CECD14CAE964A1994399D15 /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = SOURCE_ROOT; };
259262
8E1CE42418D0F5A00090028E /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
263+
8E685AA518DC733B00309270 /* CSCollectionPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSCollectionPageControl.h; path = EasyReader/Application/Controls/CSCollectionPageControl.h; sourceTree = SOURCE_ROOT; };
264+
8E685AA618DC733B00309270 /* CSCollectionPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CSCollectionPageControl.m; path = EasyReader/Application/Controls/CSCollectionPageControl.m; sourceTree = SOURCE_ROOT; };
260265
8E7F403018D3596C00A6FED6 /* CSResponsiveApiRequestor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSResponsiveApiRequestor.h; path = Api/CSResponsiveApiRequestor.h; sourceTree = "<group>"; };
261266
8E7F403118D3596C00A6FED6 /* CSResponsiveApiRequestor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CSResponsiveApiRequestor.m; path = Api/CSResponsiveApiRequestor.m; sourceTree = "<group>"; };
262267
8E7F81EE18D0BF8500BC50C2 /* CSBaseObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSBaseObject.h; sourceTree = "<group>"; };
@@ -461,6 +466,15 @@
461466
name = Api;
462467
sourceTree = "<group>";
463468
};
469+
8E685AA418DC724000309270 /* Controls */ = {
470+
isa = PBXGroup;
471+
children = (
472+
8E685AA518DC733B00309270 /* CSCollectionPageControl.h */,
473+
8E685AA618DC733B00309270 /* CSCollectionPageControl.m */,
474+
);
475+
name = Controls;
476+
sourceTree = "<group>";
477+
};
464478
9D16D30A18DA2E49001E9C38 /* Application */ = {
465479
isa = PBXGroup;
466480
children = (
@@ -693,6 +707,7 @@
693707
9DAC1717170A043200383722 /* Application */ = {
694708
isa = PBXGroup;
695709
children = (
710+
8E685AA418DC724000309270 /* Controls */,
696711
2751F4D118DA02C100339C96 /* Categories */,
697712
2767394818CFA6AC00110C33 /* Api */,
698713
9DAC1718170A043200383722 /* AppDelegates */,
@@ -1125,6 +1140,7 @@
11251140
9D79270F18DA1D0300E1D3E1 /* NSObject+CSReflectionAdditions.m in Sources */,
11261141
9D79271018DA1D0300E1D3E1 /* CSBaseObject.m in Sources */,
11271142
9D79271118DA1D0300E1D3E1 /* CSFeedItemCell.m in Sources */,
1143+
8E685AA818DC733B00309270 /* CSCollectionPageControl.m in Sources */,
11281144
9D79271218DA1D0300E1D3E1 /* CSRootViewController.m in Sources */,
11291145
9D79271318DA1D0300E1D3E1 /* FeedItem.m in Sources */,
11301146
9D79271418DA1D0300E1D3E1 /* User.m in Sources */,
@@ -1159,6 +1175,7 @@
11591175
9D79275318DA1D3800E1D3E1 /* NSObject+CSReflectionAdditions.m in Sources */,
11601176
9D79275418DA1D3800E1D3E1 /* CSBaseObject.m in Sources */,
11611177
9D79275518DA1D3800E1D3E1 /* CSFeedItemCell.m in Sources */,
1178+
8E685AA918DC733B00309270 /* CSCollectionPageControl.m in Sources */,
11621179
9D79275618DA1D3800E1D3E1 /* CSRootViewController.m in Sources */,
11631180
9D79275718DA1D3800E1D3E1 /* FeedItem.m in Sources */,
11641181
9D79275818DA1D3800E1D3E1 /* User.m in Sources */,
@@ -1202,6 +1219,7 @@
12021219
2751F4D718DA02C100339C96 /* NSObject+CSReflectionAdditions.m in Sources */,
12031220
8E7F81F018D0BF8500BC50C2 /* CSBaseObject.m in Sources */,
12041221
2751F4E318DA0D3000339C96 /* CSFeedItemCell.m in Sources */,
1222+
8E685AA718DC733B00309270 /* CSCollectionPageControl.m in Sources */,
12051223
9D8C6C5D170CA12500B18012 /* CSRootViewController.m in Sources */,
12061224
0DE51FF418CF911000454E51 /* FeedItem.m in Sources */,
12071225
0D79879E18DB4AE1004440C3 /* CSFeedSearcher.m in Sources */,

EasyReader/Application/Api/CSFeedItemUpdater.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ - (void) start
3232
[myInvocation setTarget:self];
3333
[myInvocation setSelector:@selector(requestFiveMinutesOfFeedItems:)];
3434

35-
int interval = 60 * 1;
35+
int interval = 120 * 1;
3636
[NSTimer scheduledTimerWithTimeInterval:interval invocation:myInvocation repeats:YES];
3737
}
3838

EasyReader/Application/Controllers/Home/CSHomeViewController.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,24 @@
88

99
#import <UIKit/UIKit.h>
1010
#import "CSBaseViewController.h"
11+
#import "CSCollectionPageControl.h"
12+
#import "CSFeedItemCollectionViewDataSource.h"
1113

1214
@class User;
1315

1416
@interface CSHomeViewController : CSBaseViewController<UICollectionViewDelegate,UIScrollViewDelegate>
1517

1618
@property (weak, nonatomic) IBOutlet UIScrollView *verticalScrollView;
1719
@property (strong, nonatomic) IBOutlet UIButton *button_leftMenu;
20+
@property (strong, nonatomic) IBOutlet CSCollectionPageControl *pageControl_itemIndicator;
1821
@property (nonatomic, strong) UIWebView *feedItemWebView;
19-
@property (nonatomic, strong) NSSet *feedItems;
22+
@property (nonatomic, strong) NSMutableSet *feedItems;
23+
2024
@property User* currentUser;
25+
@property CSFeedItemCollectionViewDataSource *feedCollectionViewDataSource;
26+
@property FeedItem *currentFeedItem;
27+
@property int collectionCellGoingTo;
28+
29+
- (void)scrollToCurrentFeedItem;
2130

2231
@end

EasyReader/Application/Controllers/Home/CSHomeViewController.m

Lines changed: 93 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717
#import "User.h"
1818

1919
@interface CSHomeViewController (){
20-
CSFeedItemCollectionViewDataSource *feedCollectionViewDataSource;
21-
FeedItem *currentFeedItem;
22-
NSString *currentURL;
20+
NSString *currentURL;
2321
}
2422

2523
/// The collection view which holds the individual feed items
@@ -32,11 +30,14 @@ @implementation CSHomeViewController
3230

3331
- (void)viewDidLoad
3432
{
35-
[super viewDidLoad];
36-
[self setUpCollectionView];
37-
[self setUpWebView];
38-
[self setupFeedItemObserver];
39-
// Do any additional setup after loading the view.
33+
[super viewDidLoad];
34+
_feedItems = [[NSMutableSet alloc] init];
35+
[_pageControl_itemIndicator setUpFadesOnView:[_pageControl_itemIndicator superview]];
36+
_pageControl_itemIndicator.controller_owner = self;
37+
[self setUpCollectionView];
38+
[self setUpWebView];
39+
[self setupFeedItemObserver];
40+
// Do any additional setup after loading the view.
4041
}
4142

4243
- (void)viewDidLayoutSubviews
@@ -46,75 +47,88 @@ - (void)viewDidLayoutSubviews
4647

4748
- (void) setupFeedItemObserver
4849
{
49-
_currentUser = [User current];
50-
[self observeRelationship:@keypath(self.currentUser.feeds)
51-
changeBlock:^(__weak CSHomeViewController *self, NSSet *old, NSSet *new) {
52-
NSMutableArray *addedFeeds = [[new allObjects] mutableCopy];
53-
NSMutableArray *removedFeeds = [[old allObjects] mutableCopy];
54-
55-
[addedFeeds removeObjectsInArray:[old allObjects]];
56-
[removedFeeds removeObjectsInArray:[new allObjects]];
57-
58-
for ( Feed *feed in removedFeeds ){
59-
[feed removeAllObservations];
60-
}
61-
62-
for ( Feed *feed in addedFeeds ){
63-
[feed observeRelationship:@"feedItems"
64-
changeBlock:^(__weak Feed *feed, NSSet *old, NSSet *new) {
65-
if(!new) {
66-
NSLog(@"startup?");
67-
} else {
68-
NSMutableArray *addedFeedItems = [[new allObjects] mutableCopy];
69-
NSMutableArray *removedFeedItems = [[old allObjects] mutableCopy];
70-
71-
[addedFeedItems removeObjectsInArray:[old allObjects]];
72-
[removedFeedItems removeObjectsInArray:[new allObjects]];
73-
74-
for( FeedItem *item in removedFeedItems ){
75-
[[(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems] removeObject:item];
76-
}
77-
78-
for( FeedItem *item in addedFeedItems ){
79-
[[(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems] addObject:item];
80-
}
50+
_currentUser = [User current];
51+
52+
[self observeRelationship:@keypath(self.currentUser.feeds)
53+
changeBlock:^(__weak CSHomeViewController *self, NSSet *old, NSSet *new) {
54+
NSMutableArray *addedFeeds = [[new allObjects] mutableCopy];
55+
NSMutableArray *removedFeeds = [[old allObjects] mutableCopy];
56+
57+
[addedFeeds removeObjectsInArray:[old allObjects]];
58+
[removedFeeds removeObjectsInArray:[new allObjects]];
59+
60+
for ( Feed *feed in removedFeeds ){
61+
[feed removeAllObservations];
62+
}
63+
64+
for ( Feed *feed in addedFeeds ){
65+
[feed observeRelationship:@"feedItems"
66+
changeBlock:^(__weak Feed *feed, NSSet *old, NSSet *new) {
67+
68+
_feedItems = [(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems];
69+
70+
if(!new) {
71+
NSLog(@"There are no feeds here");
72+
} else {
73+
NSMutableArray *addedFeedItems = [[new allObjects] mutableCopy];
74+
NSMutableArray *removedFeedItems = [[old allObjects] mutableCopy];
75+
76+
[addedFeedItems removeObjectsInArray:[old allObjects]];
77+
[removedFeedItems removeObjectsInArray:[new allObjects]];
78+
79+
for( FeedItem *item in removedFeedItems ){
80+
[_feedItems removeObject:item];
8181
}
8282

83-
//redraw the collection with the changes to the feed items
84-
[feedCollectionViewDataSource sortFeedItems];
85-
[_collectionView_feedItems reloadData];
86-
if(currentFeedItem){
87-
[self scrollToCurrentFeedItem];
83+
for( FeedItem *item in addedFeedItems ){
84+
[_feedItems addObject:item];
8885
}
86+
87+
[_pageControl_itemIndicator.button_newItem setHidden:NO];
8988
}
90-
insertionBlock:nil
91-
removalBlock:nil
92-
replacementBlock:nil];
93-
}
94-
95-
//properties:@[@"title", @"summary", @"updatedAt", @"publishedAt", @"createdAt", @"image", @"url"]
96-
}
97-
insertionBlock:nil
98-
removalBlock:nil
99-
replacementBlock:nil
100-
];
89+
90+
//redraw the collection with the changes to the feed items
91+
[_feedCollectionViewDataSource sortFeedItems];
92+
[_collectionView_feedItems reloadData];
93+
_pageControl_itemIndicator.numberOfPages = [_feedItems count] < 6 ? [_feedItems count] : 5;
94+
95+
if(_currentFeedItem){
96+
[self scrollToCurrentFeedItem];
97+
[_pageControl_itemIndicator setPageControllerPageAtIndex:[_feedCollectionViewDataSource.sortedFeedItems indexOfObject:_currentFeedItem]
98+
forCollection:_feedItems];
99+
} else {
100+
[_pageControl_itemIndicator setPageControllerPageAtIndex:0 forCollection:_feedItems];
101+
}
102+
}
103+
insertionBlock:nil
104+
removalBlock:nil
105+
replacementBlock:nil];
106+
}
107+
}
108+
insertionBlock:nil
109+
removalBlock:nil
110+
replacementBlock:nil
111+
];
112+
NSLog(@"observer added");
101113
}
102114

115+
// Sets up collection view on controller start up
103116
- (void)setUpCollectionView
104117
{
105-
User *current = [User current];
106-
NSSet *feedItems = current.feedItems;
107-
108-
feedCollectionViewDataSource =
109-
[[CSFeedItemCollectionViewDataSource alloc] initWithFeedItems:feedItems
110-
reusableCellIdentifier:@"feedItemCell"
111-
configureBlock:[self configureFeedItem]];
112-
113-
self.collectionView_feedItems.dataSource = feedCollectionViewDataSource;
114-
self.collectionView_feedItems.delegate = self;
118+
User *current = [User current];
119+
NSSet *feedItems = current.feedItems;
120+
121+
_feedCollectionViewDataSource =
122+
[[CSFeedItemCollectionViewDataSource alloc] initWithFeedItems:feedItems
123+
reusableCellIdentifier:@"feedItemCell"
124+
configureBlock:[self configureFeedItem]];
125+
126+
self.collectionView_feedItems.dataSource = _feedCollectionViewDataSource;
127+
self.collectionView_feedItems.delegate = self;
128+
129+
115130
}
116131

117-
118132
#pragma mark - IBActions
119133

120134
// Receives left menu link click
@@ -166,8 +180,8 @@ - (void)scrollViewDidEndDecelerating:(UIScrollView *)sender {
166180
// If we are scrolling in the collectionView only
167181
if([sender isMemberOfClass:[CSFeedItemCollectionView class]]) {
168182
// unload the webView if we have moved to a new feedItem
169-
if(currentFeedItem != self.collectionView_feedItems.currentFeedItem){
170-
currentFeedItem = self.collectionView_feedItems.currentFeedItem;
183+
if(_currentFeedItem != self.collectionView_feedItems.currentFeedItem){
184+
_currentFeedItem = self.collectionView_feedItems.currentFeedItem;
171185
[self.feedItemWebView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil];
172186
}
173187
}
@@ -176,12 +190,20 @@ - (void)scrollViewDidEndDecelerating:(UIScrollView *)sender {
176190
// Scroll to the currentFeedItem when the feedItems update
177191
- (void)scrollToCurrentFeedItem
178192
{
179-
NSUInteger index = [feedCollectionViewDataSource.sortedFeedItems indexOfObject:currentFeedItem];
193+
NSUInteger index = [_feedCollectionViewDataSource.sortedFeedItems indexOfObject:_currentFeedItem];
180194
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
181195
[_collectionView_feedItems scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];
182196
}
183197

184-
-(void)loadFeedItemWebView
198+
199+
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
200+
{
201+
int newIndex = indexPath.row+((indexPath.row-self.collectionCellGoingTo)*-1);
202+
[_pageControl_itemIndicator setPageControllerPageAtIndex:newIndex
203+
forCollection:_feedItems];
204+
}
205+
206+
- (void)loadFeedItemWebView
185207
{
186208
// Check if this is a new url
187209
if(currentURL != self.collectionView_feedItems.currentFeedItem.url){

EasyReader/Application/Controllers/Home/FeedItemCollectionView/CSFeedItemCollectionViewDataSource.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
#import "CSFeedItemCollectionViewDataSource.h"
10+
#import "CSHomeViewController.h"
1011
#import "FeedItem.h"
1112
#import "CSFeedItemCell.h"
1213

@@ -87,9 +88,10 @@ - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cell
8788
forIndexPath:indexPath];
8889

8990
FeedItem *item = [_sortedFeedItems objectAtIndex:indexPath.row];
90-
9191
_configureFeedItemCell(cell, item);
9292

93+
[(CSHomeViewController*)collectionView.delegate setCollectionCellGoingTo:indexPath.row];
94+
9395
return cell;
9496
}
9597

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// CSCollectionPageControl.h
3+
// EasyReader
4+
//
5+
// Created by Alfredo Uribe on 3/21/14.
6+
// Copyright (c) 2014 Cloudspace. All rights reserved.
7+
//
8+
9+
#import <UIKit/UIKit.h>
10+
@class CSHomeViewController;
11+
12+
@interface CSCollectionPageControl : UIPageControl
13+
14+
@property CSHomeViewController *controller_owner;
15+
@property UIButton *button_newItem;
16+
@property UIView *view_maskLayer;
17+
@property UIView *view_leftFade;
18+
@property UIView *view_rightFade;
19+
20+
- (void)setPageControllerPageAtIndex:(int)index forCollection:(NSSet*)collection;
21+
- (void)setUpFadesOnView:(UIView*)mask;
22+
23+
@end

0 commit comments

Comments
 (0)