2013-08-29 1 views
0

post에서 활동 표시기를 표시하는 코드를 복사했습니다. hideActivityViewer을 호출해도 아무 것도 발생하지 않으며 activityView이 그대로 있으며 activityIndicator가 여전히 회전 중입니다. 마치 hideActivityVieweractivityView에 아무 것도하지 않는 것입니다. 여기 UIActivityIndicator 및 해당 화면이 포함 된보기를 화면에서 제거 할 수 없습니다.

내가
-(void)showActivityViewer 
{ 
    WBAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    UIWindow *window = delegate.window; 

    _activityView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, window.bounds.size.width, window.bounds.size.height)]; 
    _activityView.backgroundColor = [UIColor blackColor]; 
    _activityView.alpha = 0.5; 

    UIActivityIndicatorView *activityWheel = [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(window.bounds.size.width/2 - 12, window.bounds.size.height/2 - 12, 24, 24)]; 
    activityWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; 
    activityWheel.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | 
             UIViewAutoresizingFlexibleRightMargin | 
             UIViewAutoresizingFlexibleTopMargin | 
             UIViewAutoresizingFlexibleBottomMargin); 
    [_activityView addSubview:activityWheel]; 
    [window addSubview: _activityView]; 

    [[[_activityView subviews] objectAtIndex:0] startAnimating]; 
} 

-(void)hideActivityViewer 
{ 
    NSLog(@"Profile: hiding Activity Viewer"); 
    [[[_activityView subviews] objectAtIndex:0] stopAnimating]; 
    [_activityView removeFromSuperview]; 
    _activityView = nil; 
} 

을 수정 한 코드 업데이트 : 내가 변수에 변화를 감지하고 showActivityViewer 전화를 사용하는 KVO를 사용하고 있습니다. showActivityViewer가 두 번 이상 호출되었으므로 화면에 복수 activityViewer이 표시됩니다. 따라서 하나를 제거하면 다른 하나는 계속 남아 있고 참조 할 필요가 없습니다. 나는 activityView가 이미 존재하는지 검사하고, 그렇다면 새로운 것을 만들지 않음으로써이를 해결했다.

+0

activityView를 어떻게 선언하셨습니까? – rdelmar

+1

'hideActivityViewer'를 호출하기 전에 어떤 시점에서'activityView'가 nil이되기 때문일 수 있습니다. 'showActivityViewer'를 두 번 호출하면, 두 개의'activityView'가 정확히 서로 위에 있고'hideActivityViewer'를 호출하면 첫 번째 것은 결코 숨겨지지 않을 것입니다. 'hideActivityViewer' 호출과 일치하는 숫자 이상이 된 후에도. – Rajiv

+0

어디에서'hideActivityViewer'를 호출합니까? 콘솔에'NSLog()'결과가 보입니까? – Justin

답변

0

내 의견 :

activityViewhideActivityViewer를 호출하기 전에 어떤 점에서 전무되기 때문에 그것은있을 수 있습니다. showActivityViewer 번을 두 번 연속 호출한다고하면 두 개의 activityViews이 정확하게 서로 겹치며 hideActivityViewer으로 전화하면 첫 번째 메시지는 숨겨지지 않습니다. 전화 번호가 hideActivityViewer 개 이상이라도 일치합니다.

0

비동기 또는 스레드 완료 블록에서 ur 메서드 "hideActivityViewer"를 호출 할 수 있습니다. 그렇다면 메인 스레드에서 ur 메서드를 호출합니다. 즉
[self performSelectorOnMainThread : @selector (hideActivityViewer) withObject : nil waitUntilDone : NO]; 답변으로

관련 문제