@@ -43,6 +43,7 @@ @interface FRLayerController ()
43
43
44
44
@property (nonatomic , strong ) FRLayerChromeView *chromeView;
45
45
@property (nonatomic , strong ) UIView *borderView;
46
+ @property (nonatomic , weak ) UIView *contentView;
46
47
47
48
@end
48
49
@@ -56,8 +57,6 @@ - (id)initWithContentViewController:(UIViewController *)vc maximumWidth:(BOOL)ma
56
57
_layeredNavigationItem.layerController = self;
57
58
_contentViewController = vc;
58
59
_maximumWidth = maxWidth;
59
-
60
- [self attachContentViewController ];
61
60
}
62
61
63
62
return self;
@@ -66,12 +65,10 @@ - (id)initWithContentViewController:(UIViewController *)vc maximumWidth:(BOOL)ma
66
65
- (void )dealloc
67
66
{
68
67
self.layeredNavigationItem .layerController = nil ;
69
- [self detachContentViewController ];
70
68
}
71
69
72
70
#pragma mark - internal methods
73
71
74
-
75
72
- (void )doViewLayout {
76
73
CGRect contentFrame = CGRectZero ;
77
74
@@ -98,20 +95,9 @@ - (void)doViewLayout {
98
95
}
99
96
100
97
101
- self.contentViewController . view .frame = contentFrame;
98
+ self.contentView .frame = contentFrame;
102
99
}
103
100
104
- - (void )attachContentViewController
105
- {
106
- [self addChildViewController: self .contentViewController];
107
- [self .contentViewController didMoveToParentViewController: self ];
108
- }
109
-
110
- - (void )detachContentViewController
111
- {
112
- [self .contentViewController willMoveToParentViewController: nil ];
113
- [self .contentViewController removeFromParentViewController ];
114
- }
115
101
116
102
#pragma mark - UIViewController interface methods
117
103
@@ -133,7 +119,15 @@ - (void)loadView {
133
119
[self .view addSubview: self .chromeView];
134
120
[self .view addSubview: self .borderView];
135
121
}
136
- [self .view addSubview: self .contentViewController.view];
122
+
123
+ if (self.contentView == nil && self.contentViewController .parentViewController == self) {
124
+ /* when loaded again after a low memory view removal */
125
+ self.contentView = self.contentViewController .view ;
126
+ }
127
+
128
+ if (self.contentView != nil ) {
129
+ [self .view addSubview: self .contentView];
130
+ }
137
131
}
138
132
139
133
- (void )viewWillLayoutSubviews {
@@ -155,17 +149,51 @@ - (void)viewDidUnload
155
149
156
150
self.borderView = nil ;
157
151
self.chromeView = nil ;
152
+ self.contentView = nil ;
158
153
}
159
154
160
155
- (BOOL )shouldAutorotateToInterfaceOrientation : (UIInterfaceOrientation)interfaceOrientation
161
156
{
162
157
return YES ;
163
158
}
164
159
160
+ - (void )willMoveToParentViewController : (UIViewController *)parent
161
+ {
162
+ [super willMoveToParentViewController: parent];
163
+
164
+ if (parent != nil ) {
165
+ /* will shortly attach to parent */
166
+ [self addChildViewController: self .contentViewController];
167
+
168
+ self.contentView = self.contentViewController .view ;
169
+ [self .view addSubview: self .contentView];
170
+ } else {
171
+ /* will shortly detach from parent view controller */
172
+ [self .contentViewController willMoveToParentViewController: nil ];
173
+
174
+ [self .contentView removeFromSuperview ];
175
+ self.contentView = nil ;
176
+ }
177
+ }
178
+
179
+ - (void )didMoveToParentViewController : (UIViewController *)parent
180
+ {
181
+ [super didMoveToParentViewController: parent];
182
+
183
+ if (parent != nil ) {
184
+ /* just attached to parent view controller */
185
+ [self .contentViewController didMoveToParentViewController: self ];
186
+ } else {
187
+ /* did just detach */
188
+ [self .contentViewController removeFromParentViewController ];
189
+ }
190
+ }
191
+
165
192
@synthesize contentViewController = _contentViewController;
166
193
@synthesize maximumWidth = _maximumWidth;
167
194
@synthesize borderView = _borderView;
168
195
@synthesize chromeView = _chromeView;
169
196
@synthesize layeredNavigationItem = _layeredNavigationItem;
197
+ @synthesize contentView = _contentView;
170
198
171
199
@end
0 commit comments