mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
iOS: done #1100 (scroll vertically between stories)
Added a new "Scroll horizontally" preference (in the "Reading Stories" section of the prefs). Defaults off. Note that this is a change in behavior from before; you might want to default it on to avoid confusing existing users. I do prefer the new vertical scrolling behavior.
This commit is contained in:
parent
8db922e20b
commit
3ce5f1dc5a
12 changed files with 157 additions and 40 deletions
|
@ -80,6 +80,7 @@
|
|||
self.webView.scalesPageToFit = YES;
|
||||
// self.webView.multipleTouchEnabled = NO;
|
||||
|
||||
[self.webView.scrollView setAlwaysBounceVertical:appDelegate.storyPageControl.isHorizontal];
|
||||
[self.webView.scrollView setDelaysContentTouches:NO];
|
||||
[self.webView.scrollView setDecelerationRate:UIScrollViewDecelerationRateNormal];
|
||||
[self.webView.scrollView setAutoresizesSubviews:(UIViewAutoresizingFlexibleWidth |
|
||||
|
@ -1286,10 +1287,10 @@
|
|||
} completion:^(BOOL finished) {
|
||||
|
||||
}];
|
||||
} else if (singlePage) {
|
||||
} else if (singlePage || !appDelegate.storyPageControl.isHorizontal) {
|
||||
appDelegate.storyPageControl.traverseView.alpha = 1;
|
||||
NSLog(@" ---> Bottom position: %d", bottomPosition);
|
||||
if (bottomPosition >= 0) {
|
||||
if (bottomPosition >= 0 || !appDelegate.storyPageControl.isHorizontal) {
|
||||
// appDelegate.storyPageControl.traverseView.frame = CGRectMake(tvf.origin.x,
|
||||
// self.webView.scrollView.frame.size.height - tvf.size.height - safeBottomMargin,
|
||||
// tvf.size.width, tvf.size.height);
|
||||
|
|
|
@ -75,6 +75,7 @@
|
|||
@property (nonatomic) MBProgressHUD *storyHUD;
|
||||
@property (nonatomic, strong) NBNotifier *notifier;
|
||||
@property (nonatomic) NSInteger scrollingToPage;
|
||||
@property (nonatomic, readonly) BOOL isHorizontal;
|
||||
|
||||
- (void)resizeScrollView;
|
||||
- (void)applyNewIndex:(NSInteger)newIndex pageController:(StoryDetailViewController *)pageController;
|
||||
|
|
|
@ -95,6 +95,8 @@
|
|||
[self.scrollView setScrollEnabled:YES];
|
||||
[self.scrollView setShowsHorizontalScrollIndicator:NO];
|
||||
[self.scrollView setShowsVerticalScrollIndicator:NO];
|
||||
[self.scrollView setAlwaysBounceHorizontal:self.isHorizontal];
|
||||
[self.scrollView setAlwaysBounceVertical:!self.isHorizontal];
|
||||
// NSLog(@"Scroll view frame post: %@", NSStringFromCGRect(self.scrollView.frame));
|
||||
// NSLog(@"Scroll view parent: %@", NSStringFromCGRect(currentPage.view.frame));
|
||||
[self.scrollView sizeToFit];
|
||||
|
@ -468,6 +470,10 @@
|
|||
[self performSelector:@selector(unhighlightButton:) withObject:sender afterDelay:0.2];
|
||||
}
|
||||
|
||||
- (BOOL)isHorizontal {
|
||||
return [[[NSUserDefaults standardUserDefaults] objectForKey:@"scroll_stories_horizontally"] boolValue];
|
||||
}
|
||||
|
||||
- (void)resetPages {
|
||||
self.navigationItem.titleView = nil;
|
||||
|
||||
|
@ -520,8 +526,15 @@
|
|||
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
||||
frame = self.scrollView.bounds;
|
||||
}
|
||||
frame.origin.x = frame.size.width * currentIndex;
|
||||
frame.origin.y = 0;
|
||||
|
||||
if (self.isHorizontal) {
|
||||
frame.origin.x = frame.size.width * currentIndex;
|
||||
frame.origin.y = 0;
|
||||
} else {
|
||||
frame.origin.x = 0;
|
||||
frame.origin.y = frame.size.height * currentIndex;
|
||||
}
|
||||
|
||||
[self.scrollView scrollRectToVisible:frame animated:NO];
|
||||
// NSLog(@"---> Scrolling to story at: %@ %d-%d", NSStringFromCGRect(frame), currentPage.pageIndex, currentIndex);
|
||||
[MBProgressHUD hideHUDForView:self.view animated:YES];
|
||||
|
@ -546,13 +559,20 @@
|
|||
}
|
||||
|
||||
- (void)resizeScrollView {
|
||||
NSInteger widthCount = appDelegate.storiesCollection.storyLocationsCount;
|
||||
if (widthCount == 0) {
|
||||
widthCount = 1;
|
||||
NSInteger storyCount = appDelegate.storiesCollection.storyLocationsCount;
|
||||
if (storyCount == 0) {
|
||||
storyCount = 1;
|
||||
}
|
||||
self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width
|
||||
* widthCount,
|
||||
self.scrollView.bounds.size.height);
|
||||
|
||||
if (self.isHorizontal) {
|
||||
self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width
|
||||
* storyCount,
|
||||
self.scrollView.bounds.size.height);
|
||||
} else {
|
||||
self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width,
|
||||
self.scrollView.bounds.size.height
|
||||
* storyCount);
|
||||
}
|
||||
}
|
||||
|
||||
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
|
||||
|
@ -628,27 +648,37 @@
|
|||
|
||||
if (!outOfBounds) {
|
||||
CGRect pageFrame = pageController.view.bounds;
|
||||
pageFrame.origin.y = 0;
|
||||
pageFrame.origin.x = CGRectGetWidth(self.scrollView.bounds) * newIndex;
|
||||
if (self.isHorizontal) {
|
||||
pageFrame.origin.y = 0;
|
||||
pageFrame.origin.x = CGRectGetWidth(self.scrollView.bounds) * newIndex;
|
||||
} else {
|
||||
pageFrame.origin.y = CGRectGetHeight(self.scrollView.bounds) * newIndex;
|
||||
pageFrame.origin.x = 0;
|
||||
}
|
||||
pageFrame.size.height = CGRectGetHeight(self.scrollView.bounds);
|
||||
pageFrame.size.width = CGRectGetWidth(self.scrollView.bounds);
|
||||
pageController.view.hidden = NO;
|
||||
pageController.view.frame = pageFrame;
|
||||
} else {
|
||||
// NSLog(@"Out of bounds: was %d, now %d", pageController.pageIndex, newIndex);
|
||||
// NSLog(@"Out of bounds: was %@, now %@", @(pageController.pageIndex), @(newIndex));
|
||||
CGRect pageFrame = pageController.view.bounds;
|
||||
pageFrame.origin.x = CGRectGetWidth(self.scrollView.bounds) * newIndex;
|
||||
pageFrame.origin.y = CGRectGetHeight(self.scrollView.bounds);
|
||||
if (self.isHorizontal) {
|
||||
pageFrame.origin.x = CGRectGetWidth(self.scrollView.bounds) * newIndex;
|
||||
pageFrame.origin.y = CGRectGetHeight(self.scrollView.bounds);
|
||||
} else {
|
||||
pageFrame.origin.x = 0;
|
||||
pageFrame.origin.y = CGRectGetHeight(self.scrollView.bounds) * newIndex;
|
||||
}
|
||||
pageFrame.size.height = CGRectGetHeight(self.scrollView.bounds);
|
||||
pageFrame.size.width = CGRectGetWidth(self.scrollView.bounds);
|
||||
pageController.view.hidden = YES;
|
||||
pageController.view.frame = pageFrame;
|
||||
}
|
||||
// NSLog(@"---> Story page control orient page: %@ (%d-%d)", NSStringFromCGRect(self.scrollView.bounds), pageController.pageIndex, suppressRedraw);
|
||||
// NSLog(@"---> Story page control orient page: %@ (%@-%@)", NSStringFromCGRect(self.scrollView.bounds), @(pageController.pageIndex), suppressRedraw ? @"supress" : @"redraw");
|
||||
|
||||
if (suppressRedraw) return;
|
||||
|
||||
// NSInteger wasIndex = pageController.pageIndex;
|
||||
NSInteger wasIndex = pageController.pageIndex;
|
||||
pageController.pageIndex = newIndex;
|
||||
// NSLog(@"Applied Index to %@: Was %ld, now %ld (%ld/%ld/%ld) [%lu stories - %d] %@", pageController, (long)wasIndex, (long)newIndex, (long)previousPage.pageIndex, (long)currentPage.pageIndex, (long)nextPage.pageIndex, (unsigned long)[appDelegate.storiesCollection.activeFeedStoryLocations count], outOfBounds, NSStringFromCGRect(self.scrollView.frame));
|
||||
|
||||
|
@ -658,7 +688,7 @@
|
|||
!appDelegate.feedDetailViewController.pageFinished &&
|
||||
!appDelegate.feedDetailViewController.pageFetching) {
|
||||
[appDelegate.feedDetailViewController fetchNextPage:^() {
|
||||
// NSLog(@"Fetched next page, %d stories", [appDelegate.activeFeedStoryLocations count]);
|
||||
// NSLog(@"Fetched next page, %@ stories", @([appDelegate.storiesCollection.activeFeedStoryLocations count]));
|
||||
[self applyNewIndex:newIndex pageController:pageController];
|
||||
}];
|
||||
} else if (!appDelegate.feedDetailViewController.pageFinished &&
|
||||
|
@ -681,7 +711,7 @@
|
|||
__block StoryDetailViewController *blockPageController = pageController;
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul), ^{
|
||||
if (blockPageController.activeStoryId && ![blockPageController.activeStoryId isEqualToString:originalStoryId]) {
|
||||
NSLog(@"Stale story, already drawn. Was: %@, Now: %@", originalStoryId, blockPageController.activeStoryId);
|
||||
// NSLog(@"Stale story, already drawn. Was: %@, Now: %@", originalStoryId, blockPageController.activeStoryId);
|
||||
return;
|
||||
}
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
|
@ -709,8 +739,10 @@
|
|||
- (void)scrollViewDidScroll:(UIScrollView *)sender {
|
||||
// [sender setContentOffset:CGPointMake(sender.contentOffset.x, 0)];
|
||||
if (inRotation) return;
|
||||
CGFloat pageWidth = self.scrollView.frame.size.width;
|
||||
float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
|
||||
CGSize size = self.scrollView.frame.size;
|
||||
CGPoint offset = self.scrollView.contentOffset;
|
||||
CGFloat pageAmount = self.isHorizontal ? size.width : size.height;
|
||||
float fractionalPage = (self.isHorizontal ? offset.x : offset.y) / pageAmount;
|
||||
|
||||
NSInteger lowerNumber = floor(fractionalPage);
|
||||
NSInteger upperNumber = lowerNumber + 1;
|
||||
|
@ -719,7 +751,7 @@
|
|||
NSInteger storyCount = [appDelegate.storiesCollection.activeFeedStoryLocations count];
|
||||
if (storyCount == 0 || lowerNumber > storyCount) return;
|
||||
|
||||
// NSLog(@"Did Scroll: %f = %d (%d/%d/%d)", fractionalPage, lowerNumber, previousPage.pageIndex, currentPage.pageIndex, nextPage.pageIndex);
|
||||
// NSLog(@"Did Scroll: %@ = %@ (%@/%@/%@)", @(fractionalPage), @(lowerNumber), @(previousPage.pageIndex), @(currentPage.pageIndex), @(nextPage.pageIndex));
|
||||
if (lowerNumber == currentPage.pageIndex) {
|
||||
if (upperNumber != nextPage.pageIndex) {
|
||||
// NSLog(@"Next was %d, now %d (A)", nextPage.pageIndex, upperNumber);
|
||||
|
@ -795,8 +827,10 @@
|
|||
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)newScrollView
|
||||
{
|
||||
self.isDraggingScrollview = NO;
|
||||
CGFloat pageWidth = self.scrollView.frame.size.width;
|
||||
float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
|
||||
CGSize size = self.scrollView.frame.size;
|
||||
CGPoint offset = self.scrollView.contentOffset;
|
||||
CGFloat pageAmount = self.isHorizontal ? size.width : size.height;
|
||||
float fractionalPage = (self.isHorizontal ? offset.x : offset.y) / pageAmount;
|
||||
NSInteger nearestNumber = lround(fractionalPage);
|
||||
self.scrollingToPage = nearestNumber;
|
||||
[self setStoryFromScroll];
|
||||
|
@ -809,12 +843,16 @@
|
|||
if (!self.isPhoneOrCompact &&
|
||||
[keyPath isEqual:@"contentOffset"] &&
|
||||
self.isDraggingScrollview) {
|
||||
CGFloat pageWidth = self.scrollView.frame.size.width;
|
||||
float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
|
||||
CGSize size = self.scrollView.frame.size;
|
||||
CGPoint offset = self.scrollView.contentOffset;
|
||||
CGFloat pageAmount = self.isHorizontal ? size.width : size.height;
|
||||
float fractionalPage = (self.isHorizontal ? offset.x : offset.y) / pageAmount;
|
||||
NSInteger nearestNumber = lround(fractionalPage);
|
||||
|
||||
if (![appDelegate.storiesCollection.activeFeedStories count]) return;
|
||||
|
||||
// NSLog(@"observe content offset: fractional page %@", @(fractionalPage)); // log
|
||||
|
||||
NSInteger storyIndex = [appDelegate.storiesCollection indexFromLocation:nearestNumber];
|
||||
if (storyIndex != [appDelegate.storiesCollection indexOfActiveStory] && storyIndex != NSNotFound) {
|
||||
appDelegate.activeStory = [appDelegate.storiesCollection.activeFeedStories
|
||||
|
@ -829,14 +867,25 @@
|
|||
if (!self.isPhoneOrCompact &&
|
||||
!self.isAnimatedIntoPlace) {
|
||||
CGRect frame = self.scrollView.frame;
|
||||
frame.origin.x = frame.size.width;
|
||||
|
||||
if (self.isHorizontal) {
|
||||
frame.origin.x = frame.size.width;
|
||||
} else {
|
||||
frame.origin.y = frame.size.height;
|
||||
}
|
||||
|
||||
self.scrollView.frame = frame;
|
||||
|
||||
[UIView animateWithDuration:(animated ? .22 : 0) delay:0
|
||||
options:UIViewAnimationOptionCurveEaseInOut
|
||||
animations:^
|
||||
{
|
||||
CGRect frame = self.scrollView.frame;
|
||||
frame.origin.x = 0;
|
||||
if (self.isHorizontal) {
|
||||
frame.origin.x = 0;
|
||||
} else {
|
||||
frame.origin.y = 0;
|
||||
}
|
||||
self.scrollView.frame = frame;
|
||||
} completion:^(BOOL finished) {
|
||||
self.isAnimatedIntoPlace = YES;
|
||||
|
@ -849,12 +898,20 @@
|
|||
}
|
||||
|
||||
- (void)changePage:(NSInteger)pageIndex animated:(BOOL)animated {
|
||||
// NSLog(@"changePage to %d (animated: %d)", pageIndex, animated);
|
||||
// NSLog(@"changePage to %@ (%@animated)", @(pageIndex), animated ? @"" : @"not ");
|
||||
|
||||
// update the scroll view to the appropriate page
|
||||
[self resizeScrollView];
|
||||
CGRect frame = self.scrollView.frame;
|
||||
frame.origin.x = frame.size.width * pageIndex;
|
||||
frame.origin.y = 0;
|
||||
CGPoint offset = self.scrollView.contentOffset;
|
||||
|
||||
if (self.isHorizontal) {
|
||||
frame.origin.x = frame.size.width * pageIndex;
|
||||
frame.origin.y = 0;
|
||||
} else {
|
||||
frame.origin.x = 0;
|
||||
frame.origin.y = frame.size.height * pageIndex;
|
||||
}
|
||||
|
||||
self.scrollingToPage = pageIndex;
|
||||
[self.currentPage hideNoStoryMessage];
|
||||
|
@ -862,7 +919,7 @@
|
|||
[self.previousPage hideNoStoryMessage];
|
||||
|
||||
// Check if already on the selected page
|
||||
if (self.scrollView.contentOffset.x == frame.origin.x) {
|
||||
if (self.isHorizontal ? offset.x == frame.origin.x : offset.y == frame.origin.y) {
|
||||
[self applyNewIndex:pageIndex pageController:currentPage];
|
||||
[self setStoryFromScroll];
|
||||
} else {
|
||||
|
@ -899,26 +956,30 @@
|
|||
}
|
||||
|
||||
- (void)setStoryFromScroll:(BOOL)force {
|
||||
CGFloat pageWidth = self.scrollView.bounds.size.width;
|
||||
float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
|
||||
CGSize size = self.scrollView.bounds.size;
|
||||
CGPoint offset = self.scrollView.contentOffset;
|
||||
CGFloat pageAmount = self.isHorizontal ? size.width : size.height;
|
||||
float fractionalPage = (self.isHorizontal ? offset.x : offset.y) / pageAmount;
|
||||
NSInteger nearestNumber = lround(fractionalPage);
|
||||
|
||||
// NSLog(@"setStoryFromScroll: fractional page %@", @(fractionalPage)); // log
|
||||
|
||||
if (!force && currentPage.pageIndex >= 0 &&
|
||||
currentPage.pageIndex == nearestNumber &&
|
||||
currentPage.pageIndex != self.scrollingToPage) {
|
||||
// NSLog(@"Skipping setStoryFromScroll: currentPage is %d (%d, %d)", currentPage.pageIndex, nearestNumber, self.scrollingToPage);
|
||||
// NSLog(@"Skipping setStoryFromScroll: currentPage is %@ (%@, %@)", @(currentPage.pageIndex), @(nearestNumber), @(self.scrollingToPage));
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentPage.pageIndex < nearestNumber) {
|
||||
// NSLog(@"Swap next into current, current into previous: %d / %d", currentPage.pageIndex, nearestNumber);
|
||||
// NSLog(@"Swap next into current, current into previous: %@ / %@", @(currentPage.pageIndex), @(nearestNumber));
|
||||
StoryDetailViewController *swapCurrentController = currentPage;
|
||||
StoryDetailViewController *swapPreviousController = previousPage;
|
||||
currentPage = nextPage;
|
||||
previousPage = swapCurrentController;
|
||||
nextPage = swapPreviousController;
|
||||
} else if (currentPage.pageIndex > nearestNumber) {
|
||||
// NSLog(@"Swap previous into current: %d / %d", currentPage.pageIndex, nearestNumber);
|
||||
// NSLog(@"Swap previous into current: %@ / %@", @(currentPage.pageIndex), @(nearestNumber));
|
||||
StoryDetailViewController *swapCurrentController = currentPage;
|
||||
StoryDetailViewController *swapNextController = nextPage;
|
||||
currentPage = previousPage;
|
||||
|
@ -926,7 +987,7 @@
|
|||
previousPage = swapNextController;
|
||||
}
|
||||
|
||||
// NSLog(@"Set Story from scroll: %f = %d (%d/%d/%d)", fractionalPage, nearestNumber, previousPage.pageIndex, currentPage.pageIndex, nextPage.pageIndex);
|
||||
// NSLog(@"Set Story from scroll: %@ = %@ (%@/%@/%@)", @(fractionalPage), @(nearestNumber), @(previousPage.pageIndex), @(currentPage.pageIndex), @(nextPage.pageIndex));
|
||||
|
||||
nextPage.webView.scrollView.scrollsToTop = NO;
|
||||
previousPage.webView.scrollView.scrollsToTop = NO;
|
||||
|
@ -941,6 +1002,11 @@
|
|||
if (currentPage.pageIndex == -2) return;
|
||||
self.scrollingToPage = -1;
|
||||
NSInteger storyIndex = [appDelegate.storiesCollection indexFromLocation:currentPage.pageIndex];
|
||||
|
||||
if (storyIndex < 0) {
|
||||
NSLog(@"invalid story index: %@ for page index: %@", @(storyIndex), @(currentPage.pageIndex)); // log
|
||||
}
|
||||
|
||||
appDelegate.activeStory = [appDelegate.storiesCollection.activeFeedStories objectAtIndex:storyIndex];
|
||||
[self updatePageWithActiveStory:currentPage.pageIndex];
|
||||
if ([appDelegate.storiesCollection isStoryUnread:appDelegate.activeStory]) {
|
||||
|
@ -1024,8 +1090,12 @@
|
|||
[buttonPrevious setEnabled:YES];
|
||||
}
|
||||
|
||||
[buttonPrevious setBackgroundImage:[[ThemeManager themeManager] themedImage:[UIImage imageNamed:@"traverse_previous.png"]]
|
||||
NSString *previousName = self.isHorizontal ? @"traverse_previous.png" : @"traverse_previous_vert.png";
|
||||
NSString *previousNameOff = self.isHorizontal ? @"traverse_previous_off.png" : @"traverse_previous_off_vert.png";
|
||||
[buttonPrevious setBackgroundImage:[[ThemeManager themeManager] themedImage:[UIImage imageNamed:previousName]]
|
||||
forState:UIControlStateNormal];
|
||||
[buttonPrevious setBackgroundImage:[[ThemeManager themeManager] themedImage:[UIImage imageNamed:previousNameOff]]
|
||||
forState:UIControlStateDisabled];
|
||||
|
||||
// setting up the NEXT UNREAD STORY BUTTON
|
||||
buttonNext.enabled = YES;
|
||||
|
@ -1034,8 +1104,9 @@
|
|||
BOOL pageFinished = appDelegate.feedDetailViewController.pageFinished;
|
||||
if ((nextIndex == -1 && unreadCount > 0 && !pageFinished) ||
|
||||
nextIndex != -1) {
|
||||
NSString *nextName = self.isHorizontal ? @"traverse_next.png" : @"traverse_next_vert.png";
|
||||
[buttonNext setTitle:[@"Next" uppercaseString] forState:UIControlStateNormal];
|
||||
[buttonNext setBackgroundImage:[[ThemeManager themeManager] themedImage:[UIImage imageNamed:@"traverse_next.png"]]
|
||||
[buttonNext setBackgroundImage:[[ThemeManager themeManager] themedImage:[UIImage imageNamed:nextName]]
|
||||
forState:UIControlStateNormal];
|
||||
} else {
|
||||
[buttonNext setTitle:[@"Done" uppercaseString] forState:UIControlStateNormal];
|
||||
|
|
|
@ -68,6 +68,12 @@
|
|||
17C5BA701CA39EA400F5961C /* unread_yellow_icn@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C5BA6A1CA39EA400F5961C /* unread_yellow_icn@3x.png */; };
|
||||
17C5BA731CA39EE400F5961C /* unread_blue_icn.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C5BA711CA39EE400F5961C /* unread_blue_icn.png */; };
|
||||
17C5BA741CA39EE400F5961C /* unread_blue_icn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C5BA721CA39EE400F5961C /* unread_blue_icn@2x.png */; };
|
||||
17C67D9E2138B2D20027CCAE /* traverse_previous_off_vert@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C67D982138B2CF0027CCAE /* traverse_previous_off_vert@2x.png */; };
|
||||
17C67D9F2138B2D20027CCAE /* traverse_previous_vert@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C67D992138B2D00027CCAE /* traverse_previous_vert@2x.png */; };
|
||||
17C67DA02138B2D20027CCAE /* traverse_next_vert@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C67D9A2138B2D00027CCAE /* traverse_next_vert@2x.png */; };
|
||||
17C67DA12138B2D20027CCAE /* traverse_previous_vert.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C67D9B2138B2D10027CCAE /* traverse_previous_vert.png */; };
|
||||
17C67DA22138B2D20027CCAE /* traverse_previous_off_vert.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C67D9C2138B2D10027CCAE /* traverse_previous_off_vert.png */; };
|
||||
17C67DA32138B2D20027CCAE /* traverse_next_vert.png in Resources */ = {isa = PBXBuildFile; fileRef = 17C67D9D2138B2D10027CCAE /* traverse_next_vert.png */; };
|
||||
17CBD3BC1BF66B07003FCCAE /* MarkReadMenuViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17CBD3BB1BF66B07003FCCAE /* MarkReadMenuViewController.xib */; };
|
||||
17CBD3BF1BF66B6C003FCCAE /* MarkReadMenuViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 17CBD3BE1BF66B6C003FCCAE /* MarkReadMenuViewController.m */; };
|
||||
17CBD3C21BF6ED2C003FCCAE /* menu_icn_markread.png in Resources */ = {isa = PBXBuildFile; fileRef = 17CBD3C01BF6ED2C003FCCAE /* menu_icn_markread.png */; };
|
||||
|
@ -691,6 +697,12 @@
|
|||
17C5BA6A1CA39EA400F5961C /* unread_yellow_icn@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unread_yellow_icn@3x.png"; sourceTree = "<group>"; };
|
||||
17C5BA711CA39EE400F5961C /* unread_blue_icn.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unread_blue_icn.png; sourceTree = "<group>"; };
|
||||
17C5BA721CA39EE400F5961C /* unread_blue_icn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unread_blue_icn@2x.png"; sourceTree = "<group>"; };
|
||||
17C67D982138B2CF0027CCAE /* traverse_previous_off_vert@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "traverse_previous_off_vert@2x.png"; sourceTree = "<group>"; };
|
||||
17C67D992138B2D00027CCAE /* traverse_previous_vert@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "traverse_previous_vert@2x.png"; sourceTree = "<group>"; };
|
||||
17C67D9A2138B2D00027CCAE /* traverse_next_vert@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "traverse_next_vert@2x.png"; sourceTree = "<group>"; };
|
||||
17C67D9B2138B2D10027CCAE /* traverse_previous_vert.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = traverse_previous_vert.png; sourceTree = "<group>"; };
|
||||
17C67D9C2138B2D10027CCAE /* traverse_previous_off_vert.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = traverse_previous_off_vert.png; sourceTree = "<group>"; };
|
||||
17C67D9D2138B2D10027CCAE /* traverse_next_vert.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = traverse_next_vert.png; sourceTree = "<group>"; };
|
||||
17CBD3BB1BF66B07003FCCAE /* MarkReadMenuViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MarkReadMenuViewController.xib; sourceTree = "<group>"; };
|
||||
17CBD3BD1BF66B6C003FCCAE /* MarkReadMenuViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkReadMenuViewController.h; sourceTree = "<group>"; };
|
||||
17CBD3BE1BF66B6C003FCCAE /* MarkReadMenuViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MarkReadMenuViewController.m; sourceTree = "<group>"; };
|
||||
|
@ -1878,10 +1890,16 @@
|
|||
FF688E4D16E6B3E1003B7B42 /* traverse_done@2x.png */,
|
||||
FF5D4019179A03E700349659 /* traverse_previous_off.png */,
|
||||
FF5D401A179A03E700349659 /* traverse_previous_off@2x.png */,
|
||||
17C67D9C2138B2D10027CCAE /* traverse_previous_off_vert.png */,
|
||||
17C67D982138B2CF0027CCAE /* traverse_previous_off_vert@2x.png */,
|
||||
FF688E4816E6AFD3003B7B42 /* traverse_previous.png */,
|
||||
FF688E4916E6AFD3003B7B42 /* traverse_previous@2x.png */,
|
||||
17C67D9B2138B2D10027CCAE /* traverse_previous_vert.png */,
|
||||
17C67D992138B2D00027CCAE /* traverse_previous_vert@2x.png */,
|
||||
FF688E4416E6ADB1003B7B42 /* traverse_next.png */,
|
||||
FF688E4516E6ADB1003B7B42 /* traverse_next@2x.png */,
|
||||
17C67D9D2138B2D10027CCAE /* traverse_next_vert.png */,
|
||||
17C67D9A2138B2D00027CCAE /* traverse_next_vert@2x.png */,
|
||||
FF22FE7416E557D80046165A /* toolbar_tall_background.png */,
|
||||
FF22FE7516E557D80046165A /* toolbar_tall_background@2x.png */,
|
||||
FF22FE7016E554FD0046165A /* barbutton_sendto.png */,
|
||||
|
@ -2844,6 +2862,7 @@
|
|||
43A4C49A15B00A26008787B5 /* warning.gif in Resources */,
|
||||
43A4C49B15B00A26008787B5 /* warning.png in Resources */,
|
||||
17E265DE1C0D17340060655F /* storyDetailViewDark.css in Resources */,
|
||||
17C67D9F2138B2D20027CCAE /* traverse_previous_vert@2x.png in Resources */,
|
||||
43A4C49C15B00A26008787B5 /* world.png in Resources */,
|
||||
43C1680B15B3D99B00428BA3 /* 7-location-place.png in Resources */,
|
||||
43B6A27515B6952F00CEA2E6 /* group.png in Resources */,
|
||||
|
@ -2864,6 +2883,7 @@
|
|||
43A4BADE15C866FA00F3B8D4 /* popoverArrowLeft.png in Resources */,
|
||||
FFC486AC19CA410000F4758F /* logo_50.png in Resources */,
|
||||
176129601C630AEB00702FE4 /* mute_feed_off.png in Resources */,
|
||||
17C67DA12138B2D20027CCAE /* traverse_previous_vert.png in Resources */,
|
||||
FFB9BE4817F4B65B00FE0A36 /* logo_152.png in Resources */,
|
||||
43A4BADF15C866FA00F3B8D4 /* popoverArrowLeft@2x.png in Resources */,
|
||||
1750658F1C5730FB00072BF5 /* barbutton_selection_off.png in Resources */,
|
||||
|
@ -2924,6 +2944,7 @@
|
|||
FF03B00219F881380063002A /* ARChromeActivity@3x~ipad.png in Resources */,
|
||||
17C5BA6E1CA39EA400F5961C /* unread_yellow_icn.png in Resources */,
|
||||
FF5F3A82162B82B5008DBE3E /* rainbow.png in Resources */,
|
||||
17C67DA22138B2D20027CCAE /* traverse_previous_off_vert.png in Resources */,
|
||||
FF5F3A85162B831A008DBE3E /* user_orange.png in Resources */,
|
||||
1740C69F1C1110BA005EA453 /* theme_color_light-sel@2x.png in Resources */,
|
||||
FF5F3A87162B834E008DBE3E /* bin_closed.png in Resources */,
|
||||
|
@ -2992,6 +3013,7 @@
|
|||
FFC5F31116E2D2C2007AC72C /* story_share_facebook.png in Resources */,
|
||||
FFC5F31216E2D2C2007AC72C /* story_share_facebook@2x.png in Resources */,
|
||||
FF03AFE519F87A770063002A /* g_icn_folder_read@2x.png in Resources */,
|
||||
17C67D9E2138B2D20027CCAE /* traverse_previous_off_vert@2x.png in Resources */,
|
||||
FF6281FA1A09614C00271FDB /* all@3x.png in Resources */,
|
||||
FFC5F31316E2D2C2007AC72C /* story_share_twitter_active.png in Resources */,
|
||||
FFC5F31416E2D2C2007AC72C /* story_share_twitter_active@2x.png in Resources */,
|
||||
|
@ -3087,6 +3109,7 @@
|
|||
1740C6881C10FD75005EA453 /* theme_color_dark.png in Resources */,
|
||||
FFDD848016E887D3000AA0A2 /* g_icn_hidden.png in Resources */,
|
||||
FF21B11C1C8228740053938A /* disclosure_border_medium.png in Resources */,
|
||||
17C67DA02138B2D20027CCAE /* traverse_next_vert@2x.png in Resources */,
|
||||
FFDD848116E887D3000AA0A2 /* g_icn_hidden@2x.png in Resources */,
|
||||
FFB7050C1925921F0052101C /* line_spacing_s.png in Resources */,
|
||||
1740C69E1C1110BA005EA453 /* theme_color_light-sel.png in Resources */,
|
||||
|
@ -3098,6 +3121,7 @@
|
|||
17C5BA6B1CA39EA400F5961C /* unread_green_icn.png in Resources */,
|
||||
1740C6A01C1110BA005EA453 /* theme_color_medium-sel.png in Resources */,
|
||||
FFDD848A16E8EBF8000AA0A2 /* train.png in Resources */,
|
||||
17C67DA32138B2D20027CCAE /* traverse_next_vert.png in Resources */,
|
||||
FFDD848B16E8EBF8000AA0A2 /* train@2x.png in Resources */,
|
||||
FFB9BE4A17F4B65B00FE0A36 /* logo_40.png in Resources */,
|
||||
FFDD848E16E8ED75000AA0A2 /* menu_icn_share.png in Resources */,
|
||||
|
|
|
@ -624,6 +624,16 @@
|
|||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Scroll horizontally</string>
|
||||
<key>Key</key>
|
||||
<string>scroll_stories_horizontally</string>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
|
|
|
@ -644,6 +644,16 @@
|
|||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
<key>Title</key>
|
||||
<string>Scroll horizontally</string>
|
||||
<key>Key</key>
|
||||
<string>scroll_stories_horizontally</string>
|
||||
<key>DefaultValue</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Type</key>
|
||||
<string>PSToggleSwitchSpecifier</string>
|
||||
|
|
BIN
clients/ios/Resources/traverse_next_vert.png
Normal file
BIN
clients/ios/Resources/traverse_next_vert.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
clients/ios/Resources/traverse_next_vert@2x.png
Normal file
BIN
clients/ios/Resources/traverse_next_vert@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
clients/ios/Resources/traverse_previous_off_vert.png
Normal file
BIN
clients/ios/Resources/traverse_previous_off_vert.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
clients/ios/Resources/traverse_previous_off_vert@2x.png
Normal file
BIN
clients/ios/Resources/traverse_previous_off_vert@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
BIN
clients/ios/Resources/traverse_previous_vert.png
Normal file
BIN
clients/ios/Resources/traverse_previous_vert.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
clients/ios/Resources/traverse_previous_vert@2x.png
Normal file
BIN
clients/ios/Resources/traverse_previous_vert@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
Loading…
Add table
Reference in a new issue