0

我复制了代码以显示这篇文章中的活动指示器。当我打电话hideActivityViewer时没有任何反应,并且activityView仍然存在,并且 activityIndi​​cator 仍在旋转。好像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已经存在来解决这个问题,如果存在,请不要创建新的。

4

2 回答 2

0

您可能正在从异步或线程完成块中调用您的方法“hideActivityViewer”。如果是这样,请在主线程上调用你的方法,即
[self performSelectorOnMainThread:@selector(hideActivityViewer) withObject:nil waitUntilDone:NO];

于 2013-08-29T17:15:42.227 回答
0

我的评论作为答案:

这可能是因为activityView在调用hideActivityViewer. 假设你showActivityViewer连续两次打电话,你有两个activityViews正好在彼此之上,如果你打电话,第一个永远不会被隐藏hideActivityViewer。即使在匹配数量的hideActivityViewer呼叫之后,或更多。

于 2013-08-30T07:26:27.457 回答