我复制了代码以显示此post中的活动指示符。当我打电话hideActivityViewer
时没有任何事情发生,activityView
仍在那里,而且activityIndicator仍在旋转。就好像hideActivityViewer
根本不对activityView
做任何事情。
这是我修改过的代码
-(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;
}
更新
我正在使用KVO来检测变量的变化并使用它来调用showActivityViewer
。
事实证明,showActivityViewer
被多次调用,因此屏幕上有多个activityViewer
,所以当我删除一个时,另一个仍然在那里,我没有引用它。我通过检查activityView
是否已经存在来解决这个问题,如果不存在则不会创建一个新的。
答案 0 :(得分:0)
您可能正在从异步或线程完成块中调用ur方法“hideActivityViewer”。 如果是这样,请在mainthread上调用ur方法,即 [self performSelectorOnMainThread:@selector(hideActivityViewer)withObject:nil waitUntilDone:NO];
答案 1 :(得分:0)
我的评论作为答案:
可能是因为activityView
在调用hideActivityViewer
之前的某个时刻变为零。让我们说你连续两次打showActivityViewer
,你有两个activityViews
完全相同,如果你打hideActivityViewer
,第一个永远不会被隐藏。即使在匹配hideActivityViewer
次来电之后,或者更多。