2013-08-29 52 views
0

我複製了代碼以顯示此post的活動指示器。當我打電話給hideActivityViewer時,什麼也沒有發生,activityView仍然存在,activityIndi​​cator仍在旋轉。就好像hideActivityViewer完全不會對activityView做任何事情。無法從屏幕上刪除UIActivityIndi​​cator和包含它的視圖

這裏是我已經修改

-(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。 原來,showActivityViewer被多次調用,結果在屏幕上有多個activityViewer,所以當我刪除一個時,另一個仍然存在,我沒有參考它。我通過檢查activityView是否已經存在解決了這個問題,如果沒有,請創建一個新的。

+0

你是怎麼聲明activityView的? – rdelmar

+1

這可能是因爲'activityView'在調用'hideActivityViewer'之前的某個時刻變成了零。假設你兩次調用'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];