This repository has been archived by the owner on Jan 3, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 166
/
Copy pathHANavigationViewController.m
121 lines (93 loc) · 4.19 KB
/
HANavigationViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// HANavigationViewController.m
// Paper
//
// Created by Istvan Balogh on 15/10/14.
// Copyright (c) 2014 Heberti Almeida. All rights reserved.
//
#import "HANavigationViewController.h"
#import "HASmallCollectionViewController.h"
#import "HACollectionViewSmallLayout.h"
@interface HANavigationViewController ()<UINavigationControllerDelegate, HATransitionControllerDelegate>
@property (nonatomic, strong) HATransitionController *transitionController;
@end
@implementation HANavigationViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.delegate = self;
[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
self.navigationBar.barTintColor = [UIColor whiteColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
}
-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
if ([viewController isKindOfClass:[HASmallCollectionViewController class]] && !self.transitionController) {
HASmallCollectionViewController *collectionViewController = (HASmallCollectionViewController*)viewController;
self.transitionController = [[HATransitionController alloc] initWithCollectionView:collectionViewController.collectionView];
self.transitionController.delegate = self;
}
}
-(UIViewController *)popViewControllerAnimated:(BOOL)animated{
if ([self.topViewController isKindOfClass:[HASmallCollectionViewController class]]) {
self.transitionController = nil;
}
return [super popViewControllerAnimated:animated];
}
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
- (void)interactionBeganAtPoint:(CGPoint)point
{
// Very basic communication between the transition controller and the top view controller
// It would be easy to add more control, support pop, push or no-op
HASmallCollectionViewController *presentingVC = (HASmallCollectionViewController *)[self topViewController];
HASmallCollectionViewController *presentedVC = (HASmallCollectionViewController *)[presentingVC nextViewControllerAtPoint:point];
if (presentedVC!=nil)
{
[self pushViewController:presentedVC animated:YES];
}
else
{
[self popViewControllerAnimated:YES];
}
}
- (id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>) animationController
{
if (animationController==self.transitionController) {
return self.transitionController;
}
return nil;
}
- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController *)fromVC
toViewController:(UIViewController *)toVC
{
if (![fromVC isKindOfClass:[UICollectionViewController class]] || ![toVC isKindOfClass:[UICollectionViewController class]])
{
return nil;
}
if (!self.transitionController.hasActiveInteraction)
{
return nil;
}
self.transitionController.navigationOperation = operation;
return self.transitionController;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end