Как сделать так, чтобы UIView появлялся мгновенно? - PullRequest
0 голосов
/ 14 апреля 2010

Я пытаюсь создать индикатор активности в приложении для iPhone. Проблема в том, что я не могу заставить его появиться до того, как фактическое задание, во время которого я хочу, чтобы оно отображалось, уже выполнено. Есть ли что-то необычное в том порядке, в котором iPhone делает вещи?

Вот мой проблемный код (в моем делегате приложения):

-(BOOL)showProgressView: (NSString *) message { 
self.progress = [[UIView alloc] initWithFrame:window.frame];

UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage    imageNamed:@"squircle.png"]];
[img setAlpha:0.5];
[img setFrame:CGRectMake(94, 173, 133, 133)];


UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(51.5, 51.5, 30, 30)];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;

[img addSubview:spinner];

[self.progress addSubview:img];


[spinner startAnimating];
[img release];
[spinner release];

[window addSubview:self.progress];

return YES;

}

Затем я называю этот код так:

if ([appDelegate showProgressView:@"Loading..:"])
{

    //My actual code loads data and stuff here but that is not important
            //drawCtrl is a UIViewController subclass that is instantiated here 


    UINavigationController *navController = [appDelegate navigationController];
    [navController pushViewController:drawCtrl animated:YES];


    [drawCtrl release];
}

Проблема в том, что мой индикатор активности не появляется, пока новый контроллер представления не будет помещен в стек navController. Могу ли я каким-то образом это контролировать?

Заранее спасибо!

-коврики

1 Ответ

1 голос
/ 22 апреля 2010

Вам необходимо периодически вызывать ваш метод загрузки через таймер. Изменения пользовательского интерфейса требуют просмотра цикла событий. Я делал это обычно в таймере, который я установил в AppDelegate, он вызывает «methodThatTakesSomeTime» каждые n секунд, метод «methodThatTakesSomeTime» выполняет некоторую работу в течение указанного промежутка времени, а затем завершается, что обычно примерно так же, как таймер Время срабатывания Это дает время цикла событий для обновления пользовательского интерфейса, а также дает время вашему методу для выполнения своих задач.

Требуется немного поработать с сохранением состояния methodThatTakesSomeTime, чтобы он мог продолжать свой путь, но это то, что нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...