나는 이것을 수행하는 방법을 찾기 위해 일주일을 보냈습니다.하위보기가 표시 될 때까지 기다렸다가 처리 한 다음 하위보기를 제거합니다.
내가하고 싶은 일은 서브 뷰를 표시 한 다음 http 호출을 백엔드로 호출 한 다음 서브 뷰를 제거하는 것입니다.
...
//Display view
[superView addSubview:blurredOverlay];
[superView bringSubviewToFront:blurredOverlay];
//After blurredOverlay is displayed, Try to login the user
dispatch_group_t d_group = dispatch_group_create();
dispatch_queue_t bg_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_async(d_group, bg_queue, ^{
//Try to login user
success = [self loginUser];
NSLog(@"Success=%i", success);
[NSThread sleepForTimeInterval:10.0]; //here to force thread to not return immediatly
});
dispatch_group_wait(d_group, DISPATCH_TIME_FOREVER);
//Remove the view after the thread is done processing
[blurredOverlay removeFromSuperview];
이것은 작동하지 않습니다. 내가 가지고있는 경우
[blurredOverlay removeFromSuperview];
주석 처리되지 않은 상태에서는 blurredOverlay가 표시되지 않습니다. 내가 주석 처리하면 blurredOvleray가 표시되지만 분명히 제거 할 수는 없습니다.
먼저 blurredOverlay를 표시 한 다음 blurredOverlay가 표시되어있는 동안 사용자를 로그인하고 loginUser가 반환 한 후에 흐린 표시를 제거해야합니다.
여러 가지 다양한 dispatch_group_async 변형을 시도했지만 새로운 스레딩과 도움이되지 않았습니다. – lr100
dispatch_groups를 사용하는 대신 NSURLSession 또는 NSURLConnection의 sendAsynchronousRequest를 사용하고 완료 블록에서 오버레이를 제거하십시오. – rdelmar