diff --git a/media/ios/Classes/FeedDetailViewController.m b/media/ios/Classes/FeedDetailViewController.m index 7b45b0b1f..a6c88a173 100644 --- a/media/ios/Classes/FeedDetailViewController.m +++ b/media/ios/Classes/FeedDetailViewController.m @@ -159,9 +159,7 @@ - (void)viewDidAppear:(BOOL)animated { if (appDelegate.inStoryDetail && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { appDelegate.inStoryDetail = NO; - [appDelegate.storyPageControl.currentPage clearStory]; - [appDelegate.storyPageControl.nextPage clearStory]; - [appDelegate.storyDetailViewController clearStory]; + [appDelegate.storyPageControl resetPages]; [self checkScroll]; } } diff --git a/media/ios/Classes/NBContainerViewController.m b/media/ios/Classes/NBContainerViewController.m index 070aa4889..457dc8369 100644 --- a/media/ios/Classes/NBContainerViewController.m +++ b/media/ios/Classes/NBContainerViewController.m @@ -540,7 +540,7 @@ [self transitionFromShareView]; } - [self.storyPageControl clearStory]; + [self.storyPageControl resetPages]; self.feedDetailIsVisible = NO; CGRect vb = [self.view bounds]; diff --git a/media/ios/Classes/StoryPageControl.h b/media/ios/Classes/StoryPageControl.h index ea4476d3c..4c4668153 100644 --- a/media/ios/Classes/StoryPageControl.h +++ b/media/ios/Classes/StoryPageControl.h @@ -30,6 +30,8 @@ WEPopoverController *popoverController; Class popoverClass; + + BOOL isDraggingScrollview; } @property (nonatomic) IBOutlet NewsBlurAppDelegate *appDelegate; @@ -53,6 +55,7 @@ @property (nonatomic) IBOutlet UIBarButtonItem *originalStoryButton; @property (nonatomic, strong) IBOutlet UIBarButtonItem *subscribeButton; @property (readwrite) CGFloat inTouchMove; +@property (assign) BOOL isDraggingScrollview; @property (nonatomic, strong) WEPopoverController *popoverController; @@ -60,7 +63,7 @@ - (void)applyNewIndex:(NSInteger)newIndex pageController:(StoryDetailViewController *)pageController; - (void)transitionFromFeedDetail; -- (void)clearStory; +- (void)resetPages; - (void)setStoryFromScroll; - (void)updatePageWithActiveStory:(int)location; - (void)changePage:(NSInteger)pageIndex; diff --git a/media/ios/Classes/StoryPageControl.m b/media/ios/Classes/StoryPageControl.m index e074e4f03..33cbfe158 100644 --- a/media/ios/Classes/StoryPageControl.m +++ b/media/ios/Classes/StoryPageControl.m @@ -44,6 +44,7 @@ @synthesize popoverController; @synthesize loadingIndicator; @synthesize inTouchMove; +@synthesize isDraggingScrollview; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { @@ -127,11 +128,14 @@ self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.16f green:0.36f blue:0.46 alpha:0.9]; self.bottomPlaceholderToolbar.tintColor = [UIColor colorWithRed:0.16f green:0.36f blue:0.46 alpha:0.9]; } - + + [self.scrollView addObserver:self forKeyPath:@"contentOffset" + options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld + context:nil]; } - (void)viewWillAppear:(BOOL)animated { - [self clearStory]; + [self resetPages]; [self setNextPreviousButtons]; [appDelegate adjustStoryDetailWebView]; self.scrollView.contentOffset = CGPointMake(0, 0); @@ -158,7 +162,7 @@ } - (void)transitionFromFeedDetail { - [self performSelector:@selector(clearStory) withObject:self afterDelay:0.5]; + [self performSelector:@selector(resetPages) withObject:self afterDelay:0.5]; [appDelegate.masterContainerViewController transitionFromFeedDetail]; } @@ -166,9 +170,14 @@ [appDelegate adjustStoryDetailWebView]; } -- (void)clearStory { +- (void)resetPages { [currentPage clearStory]; [nextPage clearStory]; + + currentPage.pageIndex = -1; + nextPage.pageIndex = -1; + + self.scrollView.contentOffset = CGPointMake(0, 0); } - (void)resizeScrollView { @@ -296,11 +305,29 @@ } } +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { + self.isDraggingScrollview = YES; +} + - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)newScrollView { + self.isDraggingScrollview = NO; [self setStoryFromScroll]; } +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (keyPath == @"contentOffset" && self.isDraggingScrollview) { + CGFloat pageWidth = self.scrollView.frame.size.width; + float fractionalPage = self.scrollView.contentOffset.x / pageWidth; + NSInteger nearestNumber = lround(fractionalPage); + + int storyIndex = [appDelegate indexFromLocation:nearestNumber]; + appDelegate.activeStory = [appDelegate.activeFeedStories objectAtIndex:storyIndex]; + [appDelegate changeActiveFeedDetailRow]; + } +} + + - (void)scrollViewDidEndDecelerating:(UIScrollView *)newScrollView { [self scrollViewDidEndScrollingAnimation:newScrollView]; @@ -333,6 +360,8 @@ nextPage = swapController; } + if (currentPage.pageIndex == -1) return; + int storyIndex = [appDelegate indexFromLocation:currentPage.pageIndex]; appDelegate.activeStory = [appDelegate.activeFeedStories objectAtIndex:storyIndex]; [self updatePageWithActiveStory:currentPage.pageIndex]; diff --git a/media/ios/NewsBlur-iPhone-Info.plist b/media/ios/NewsBlur-iPhone-Info.plist index 05eda1aed..bb4db760f 100644 --- a/media/ios/NewsBlur-iPhone-Info.plist +++ b/media/ios/NewsBlur-iPhone-Info.plist @@ -49,11 +49,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.7 + 1.8 CFBundleSignature ???? CFBundleVersion - 1.7 + 1.8 LSRequiresIPhoneOS NSMainNibFile