2016-12-14 8 views
0

이것은 웹 브라우저에 관한 것입니다.하위보기를 제거 할 수 없습니까?

웹 페이지를 처리하는 사용자 지정 클래스가 있습니다.

SNBrowserView 
SNBrowserViewPage 

SNBrowserViewPages에는 두 개의 개체가 있습니다.

WKWebView 
UIImageView // Snapshot of the WKWebView 

메모리 관리를위한 페이지를 유지하거나 복구하는 기능입니다.

(테스트) 페이지가 선택 될 때마다 복구 기능이 호출됩니다.

선택 :

- (void)browserView:(SNBrowserView *)browserView didSelectPage:(SNBrowserViewPage *)page 
{ 
     if (page.sustained) { 

      [page recoverAnimated:NO]; 
     } 
} 

서스테인 (Sustain) : 복구

- (void)sustain 
{ 
    _sustained = YES; 

    if (_webView) { 

     _webView = nil; 

     [_webView removeFromSuperview]; 
    } 

    _snapshotView = [[UIImageView alloc] init]; 

    _snapshotView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height); 

    _snapshotView.image = _snapshot; 

    [self addSubview:_snapshotView]; 
} 

:

- (void)recoverAnimated:(BOOL)animated 
{ 
    _sustained = NO; 

    _webView = [[WKWebView alloc] init]; 

    _webView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height); 

    _webView.navigationDelegate = self; 

    _webView.UIDelegate = self; 

    [self addSubview:_webView]; 

    [self sendSubviewToBack:_webView]; 

    [self loadURL:_initialURL]; // Start loading as early as possible. 

    if (animated) { 

     [UIView animateWithDuration:0.3 
         animations:^{ 

          _snapshotView.alpha = 0.0; 
         } 
         completion:^(BOOL finished){ 

          _snapshotView = nil; 

          [_snapshotView removeFromSuperview]; 
         }]; 
    } 
    else { 

     _snapshotView = nil; 

     [_snapshotView removeFromSuperview]; 
    } 
} 

을 나는 그것을에서 제거 snapshotView가 전무로 설정하거나하지 않은 페이지를 복구 할 때 슈퍼 뷰.

어떻게 가능합니까?

심지어이 작동하지 않습니다

- (void)recoverAnimated:(BOOL)animated 
{ 
    _snapshotView = nil; 

    [_snapshotView removeFromSuperview]; 
} 

snapshotView는 하위 뷰, removeFromSuperview 항상 작동합니다, 이유에 가? 무슨 일을하는 것은 _viewnil에 설정 한 후 수퍼에서 nil을 제거하기 때문에 내가 제안

+1

'_snapshotView = nil'을 호출하기 전에'[_snapshotView removeFromSuperview]'를 호출 해 주시겠습니까? – Randy

+0

나는이 실수를 반복해서 해왔다. 지금은 효과가있다! – Vulkan

답변

0

당신은

[_view removeFromSuperview]; 

_view = nil; 

_view = nil; 

[_view removeFromSuperview]; 

을 모두 교체하려고합니다.