From 0620af0674b1a8b106128c134b2c6f54ceb56448 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Mon, 3 Feb 2014 16:59:08 -0800 Subject: [PATCH] Swiping back from original view works pretty well on ipad now. Needs a button and better navigation title support. Also rotation support. Also fixing iPhone. --- .../ios/Classes/NBContainerViewController.m | 22 +++-- .../ios/Classes/OriginalStoryViewController.h | 1 + .../ios/Classes/OriginalStoryViewController.m | 82 ++++++++++--------- clients/ios/Classes/Utilities.m | 13 ++- 4 files changed, 69 insertions(+), 49 deletions(-) diff --git a/clients/ios/Classes/NBContainerViewController.m b/clients/ios/Classes/NBContainerViewController.m index ecdbd9135..e574c73c2 100644 --- a/clients/ios/Classes/NBContainerViewController.m +++ b/clients/ios/Classes/NBContainerViewController.m @@ -672,6 +672,8 @@ containsObject:self.originalViewController]) { [self.originalNavigationController pushViewController:self.originalViewController animated:NO]; + } else { + [self.originalViewController viewWillAppear:YES]; } [self.view insertSubview:self.originalNavigationController.view @@ -714,6 +716,9 @@ - (void)transitionFromOriginalView { NSLog(@"Transition from Original View"); + [self.originalViewController viewWillDisappear:YES]; + self.originalNavigationController.navigationBar.alpha = 1; + [UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^ @@ -723,6 +728,7 @@ self.interactiveOriginalTransition = NO; [self.originalNavigationController removeFromParentViewController]; [self.originalNavigationController.view setHidden:YES]; + [self.originalViewController viewDidDisappear:YES]; }]; } @@ -731,11 +737,11 @@ UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; if (UIInterfaceOrientationIsPortrait(orientation) && !self.storyTitlesOnLeft) { - CGRect originalNavFrame = self.originalNavigationController.view.frame; - originalNavFrame.origin.x = vb.size.width * percentage; - self.originalNavigationController.view.frame = originalNavFrame; - self.originalViewController.view.frame = originalNavFrame; - NSLog(@"Original frame: %@", NSStringFromCGRect(self.originalViewController.view.frame)); +// CGRect originalNavFrame = self.originalNavigationController.view.frame; +// originalNavFrame.origin.x = vb.size.width * percentage; +// self.originalNavigationController.view.frame = originalNavFrame; +// self.originalViewController.view.frame = originalNavFrame; +// NSLog(@"Original frame: %@", NSStringFromCGRect(self.originalViewController.view.frame)); CGRect feedDetailFrame = self.feedDetailViewController.view.frame; feedDetailFrame.origin.x = -1 * (1-percentage) * feedDetailFrame.size.width/6; @@ -749,7 +755,7 @@ originalNavFrame.origin.x = vb.size.width * percentage * 0; // self.originalNavigationController.view.frame = originalNavFrame; // self.originalViewController.view.frame = originalNavFrame; - NSLog(@"Original frame: %@", NSStringFromCGRect([[[[self.originalNavigationController viewControllers] objectAtIndex:0] view] frame])); +// NSLog(@"Original frame: %@", NSStringFromCGRect([[[[self.originalNavigationController viewControllers] objectAtIndex:0] view] frame])); CGRect feedDetailFrame = self.masterNavigationController.view.frame; feedDetailFrame.origin.x = -1 * (1-percentage) * feedDetailFrame.size.width/6; @@ -760,6 +766,10 @@ self.storyNavigationController.view.frame = storyNavFrame; } +// self.originalNavigationController.navigationBar.alpha = 1 - percentage; +// NSLog(@"Original subviews; %@", self.originalNavigationController.view.subviews); + self.originalViewController.navigationItem.titleView.alpha = 1 - percentage; + // CGRect leftBorderFrame = leftBorder.frame; // leftBorderFrame.origin.x = storyNavFrame.origin.x - 1; // leftBorder.frame = leftBorderFrame; diff --git a/clients/ios/Classes/OriginalStoryViewController.h b/clients/ios/Classes/OriginalStoryViewController.h index d3dfd7ff2..0d84ea583 100644 --- a/clients/ios/Classes/OriginalStoryViewController.h +++ b/clients/ios/Classes/OriginalStoryViewController.h @@ -19,6 +19,7 @@ NSMutableArray *visitedUrls; UIWebView *webView; UIBarButtonItem *backBarButton; + UILabel *titleView; } @property (nonatomic) IBOutlet NewsBlurAppDelegate *appDelegate; diff --git a/clients/ios/Classes/OriginalStoryViewController.m b/clients/ios/Classes/OriginalStoryViewController.m index d13dedc92..0cf1e3dcc 100644 --- a/clients/ios/Classes/OriginalStoryViewController.m +++ b/clients/ios/Classes/OriginalStoryViewController.m @@ -29,13 +29,37 @@ - (void)viewWillAppear:(BOOL)animated { NSLog(@"Original Story View: %@", [appDelegate activeOriginalStoryURL]); + + appDelegate.originalStoryViewNavController.navigationBar.hidden = YES; +} + +- (void)viewDidAppear:(BOOL)animated { +} + +- (void)viewWillDisappear:(BOOL)animated { + +} + +- (void)viewDidDisappear:(BOOL)animated { + if ([self.webView isLoading]) { + [self.webView stopLoading]; + } + activeUrl = nil; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + return YES; +} + +- (void)viewDidLoad { +// self.navigationItem.title = [[appDelegate activeStory] objectForKey:@"story_title"]; UIImage *separatorImage = [UIImage imageNamed:@"bar-separator.png"]; UIBarButtonItem *separatorBarButton = [UIBarButtonItem barItemWithImage:separatorImage target:nil action:nil]; [separatorBarButton setEnabled:NO]; - + UIBarButtonItem *sendToBarButton = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"barbutton_sendto.png"] target:self @@ -45,43 +69,20 @@ target:self action:@selector(webViewGoBack:)]; backBarButton.enabled = NO; - + + titleView = [[UILabel alloc] init]; + titleView.textColor = UIColorFromRGB(0x303030); + titleView.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0]; + titleView.text = @"Loading..."; + [titleView sizeToFit]; + titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth; + self.navigationItem.titleView = titleView; + self.navigationItem.rightBarButtonItems = @[sendToBarButton, separatorBarButton, backBarButton ]; - - - appDelegate.originalStoryViewNavController.navigationBar.hidden = YES; -} - -- (void)viewDidAppear:(BOOL)animated { -} - -- (void)viewWillDisappear:(BOOL)animated { - if (!appDelegate.masterContainerViewController.interactiveOriginalTransition) { - [appDelegate.masterContainerViewController transitionFromOriginalView]; - } -} - -- (void)viewDidDisappear:(BOOL)animated { - if ([self.webView isLoading]) { - [self.webView stopLoading]; - } - activeUrl = nil; - NSLog(@"Original disappear: %@ - %@", NSStringFromCGRect(self.view.frame), NSStringFromCGPoint(self.view.center)); - CGRect frame = self.view.frame; - frame.origin.x = 0; - self.view.frame = frame; -} - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - return YES; -} - -- (void)viewDidLoad { -// self.navigationItem.title = [[appDelegate activeStory] objectForKey:@"story_title"]; UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; [self.view addGestureRecognizer:gesture]; @@ -91,7 +92,6 @@ CGFloat percentage = 1 - (recognizer.view.frame.size.width - recognizer.view.frame.origin.x) / recognizer.view.frame.size.width; CGPoint center = recognizer.view.center; CGPoint translation = [recognizer translationInView:recognizer.view]; - NSLog(@"Panning %f%%. (%@ - %@)", percentage, NSStringFromCGRect(recognizer.view.frame), NSStringFromCGPoint(translation)); if (recognizer.state == UIGestureRecognizerStateChanged) { center = CGPointMake(MAX(recognizer.view.frame.size.width / 2, center.x + translation.x), @@ -108,7 +108,7 @@ if ([recognizer state] == UIGestureRecognizerStateEnded || [recognizer state] == UIGestureRecognizerStateCancelled) { CGFloat velocity = [recognizer velocityInView:recognizer.view].x; - if (velocity > 0) { + if (percentage > 0.25 && velocity > 0) { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [appDelegate.masterContainerViewController transitionFromOriginalView]; } else { @@ -126,8 +126,9 @@ - (void)loadInitialStory { [self loadAddress:nil]; - self.navigationItem.title = [[appDelegate activeStory] objectForKey:@"story_title"]; - + titleView.text = [[appDelegate activeStory] objectForKey:@"story_title"]; + [titleView sizeToFit]; + [MBProgressHUD hideHUDForView:self.webView animated:YES]; MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.webView animated:YES]; HUD.labelText = @"On its way..."; @@ -196,7 +197,8 @@ - (void)updateTitle:(UIWebView*)aWebView { NSString *pageTitleValue = [aWebView stringByEvaluatingJavaScriptFromString:@"document.title"]; - self.navigationItem.title = [pageTitleValue stringByDecodingHTMLEntities]; + titleView.text = [pageTitleValue stringByDecodingHTMLEntities]; + [titleView sizeToFit]; } - (IBAction)loadAddress:(id)sender { @@ -215,8 +217,8 @@ } NSURLRequest* request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; - self.navigationItem.title = @"Loading..."; - + titleView.text = @"Loading..."; + [titleView sizeToFit]; } - (void)didReceiveMemoryWarning { diff --git a/clients/ios/Classes/Utilities.m b/clients/ios/Classes/Utilities.m index 0b23d4992..874befda5 100644 --- a/clients/ios/Classes/Utilities.m +++ b/clients/ios/Classes/Utilities.m @@ -114,7 +114,7 @@ static NSMutableDictionary *imageCache; + (void)saveimagesToDisk { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); - dispatch_async(queue, [^{ + dispatch_async(queue, ^{ for (NSString *filename in [imageCache allKeys]) { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cacheDirectory = [paths objectAtIndex:0]; @@ -126,10 +126,17 @@ static NSMutableDictionary *imageCache; NSString *path = [cacheDirectory stringByAppendingPathComponent:filename]; // Save image to disk - UIImage *image = [imageCache objectForKey:filename]; + UIImage *image; + @try { + image = [imageCache objectForKey:filename]; + } + @catch (NSException *exception) { + NSLog(@"Warning: imageCache EXC_BAD_ACCESS!!!"); + return; + } [UIImagePNGRepresentation(image) writeToFile:path atomically:YES]; } - } copy]); + }); } + (UIImage *)roundCorneredImage: (UIImage*) orig radius:(CGFloat) r {