我尝试添加子视图以显示活动指示符,并在我从服务器获取数据时阻止触摸。
以下是将加载视图添加到主视图控制器屏幕的代码:
+ (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上寻找类似的例子,但无法找到我想要的东西。任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
我正在阻止UI的主线程上进行提取;我以为GTM在不同的线程上做了一切,但事实并非如此。感谢那些发布帮助我朝着正确方向发展的事情的人