Наложение вида поверх ключевого окна быстро исчезает (iOS) - PullRequest
3 голосов
/ 14 сентября 2011

При запуске мое приложение проверяет наличие обновлений. Если это возможно, я пытаюсь поместить наложение поверх друг друга с помощью этой инструкции:

[[[UIApplication sharedApplication] keyWindow] addSubview:overlay];

Вид наложения отображается, но быстро исчезает, а я хочу удалить его, когда завершится процесс обновления. Вместо этого, если я добавляю представление наложения как подпредставление текущего представления, представление наложения остается на вершине, пока процесс обновления не завершится.

Я должен поместить вид наложения поверх ключевых окон, поскольку в моем приложении есть панель вкладок, поэтому, если я наложу вид наложения поверх текущего вида, вид наложения исчезнет, ​​если пользователь коснется другого элемента в панель вкладок.

Может быть из-за того, что я перенес проверку на обновление в отдельном задании с NSInvocation? Вот мой соответствующий код:

[в viewDidLoad]

    NSOperationQueue *queue = [NSOperationQueue new];

    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(checkForUpdate) object:nil];

    [queue addOperation:operation];
    [operation release];

[в checkForUpdate]

    if (![localVersion isEqualToString:remoteVersion])
    {
        [self performSelectorOnMainThread:@selector(doUpdate) withObject:nil waitUntilDone:NO];
    }

[в doUpdate]

UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Update" message:@"Download the latest version of...?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];

[alertView show];
[alertView release];

[в завещании увольнения с индексом кнопки]

if (buttonIndex == 1)
{
    CGRect overlayFrame = [[UIApplication sharedApplication] keyWindow].bounds;
    overlay = [[UIView alloc] initWithFrame:overlayFrame];
    overlay.backgroundColor = [UIColor blackColor];
    overlay.alpha = 0.7;

    // Do other staff...

    [[[UIApplication sharedApplication] keyWindow] addSubview:overlay];

    NSURL *url = [NSURL URLWithString:@"http:www.testserver.com/test/UpdatePack.zip"];
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:300.0];

    connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    connection = nil;
}

[в соединенииDidFinishLoading]

[overlay removeFromSuperview];

1 Ответ

3 голосов
/ 15 сентября 2011

Я решил проблему, добавив оверлей к представлению tabbarViewController:

[self.tabBarController.view addSubview:overlay];
...