显示阻止触摸的加载视图

时间:2015-02-09 14:14:40

标签: ios objective-c ipad loading fetch

我尝试添加子视图以显示活动指示符,并在我从服务器获取数据时阻止触摸。

以下是将加载视图添加到主视图控制器屏幕的代码:

+ (void)showLoadingView {
    ViewController *vc = [AppDelegate mainViewController];
    if (!vc._activityViewContainer) {
       LoadingView *loadingView = [[LoadingView alloc] initWithFrame:vc.view.bounds];
       [vc.view addSubview:loadingView];
       vc._activityViewContainer = loadingView;
    }
}

+ (void)stopLoadingView {
    ViewController *vc = [AppDelegate mainViewController];
    if (vc._activityViewContainer) {
        [vc._activityViewContainer removeFromSuperview];
        vc._activityViewContainer = nil;
    }
}

这是我的加载视图:

@implementation LoadingView

- (id)initWithFrame:(CGRect)frame {    
    if (self == [super initWithFrame:frame]) {
        self.userInteractionEnabled = YES;
        self.backgroundColor = [UIColor lightGrayColor];
        self.alpha = 0.6;
        self.layer.zPosition = 10000;
        UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc]    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        NSUInteger avSize = 100;
        CGRect activityViewFrame = CGRectMake((frame.size.width - avSize) / 2, (frame.size.height - avSize) / 2, avSize, avSize);
        activityView.frame = activityViewFrame;
        [self addSubview:activityView];
        [activityView startAnimating];    
    }    
    return self; 
}

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    return [self pointInside:point withEvent:event] ? self : nil; }
@end

我尝试制作它,以便加载视图吸收/阻止对其他同级视图的所有触摸。当我通过呈现它而不进行任何提取来测试它时,它正常工作,它进入加载视图的hitTest方法并阻止触摸。但是,当我实际从服务器进行任何类型的提取时,它似乎无法正常工作。触摸延迟了几秒钟,并且不会被LoadingView截获。

我正在使用GTMHTTPFetcher&#39>

- (BOOL)beginFetchWithCompletionHandler:(void (^)(NSData *data, NSError *error))handler

我不确定发生了什么,我尝试在SO上寻找类似的例子,但无法找到我想要的东西。任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

我正在阻止UI的主线程上进行提取;我以为GTM在不同的线程上做了一切,但事实并非如此。感谢那些发布帮助我朝着正确方向发展的事情的人