Я создаю приложение, которое показывает анимированный UIImageView как пользовательский способ указать, что приложение занято. Я использую NSOperationQueue для загрузки файлов, и я хотел бы показать UIImageView, когда в очереди есть что-то. Когда все операции в очереди завершаются, я хочу удалить UIImageView.Удалить анимацию UIImageView после завершения NSOperationQueue
Я думал, что это действительно легко сделать, но я застрял в последний час. Показать UIImageView очень просто, но я не могу его удалить. Это, наверное, что-то действительно простое, что я просто не замечаю. Вот мой код. Спасибо! :)
- (void)viewDidLoad {
//set up the uiimageview
self.spinnerView = [[UIImageView alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width-44,0,44,44)];
self.spinnerView.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"0.gif"],
[UIImage imageNamed:@"1.gif"],
[UIImage imageNamed:@"2.gif"],
[UIImage imageNamed:@"3.gif"],
[UIImage imageNamed:@"4.gif"], nil];
self.spinnerView.animationDuration = 0.5f;
self.spinnerView.tag = 998;
self.spinnerView.animationRepeatCount = 0;
[self.view addSubview: self.spinnerView];
//set up the queue
self.uploadQueue = [[NSOperationQueue alloc] init];
[self.uploadQueue setMaxConcurrentOperationCount:1];
//set up observer for the queue
[self.uploadQueue addObserver:self forKeyPath:@"operationCount" options:NSKeyValueObservingOptionNew context:NULL];
}
- (void)newUpload:(NSData*)data {
[self.spinnerView startAnimating];
//....
//request is a NSURLRequest that's set up in this method
[NSURLConnection sendAsynchronousRequest:request queue:self.uploadQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
}];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
if (object == self.uploadQueue && [keyPath isEqualToString:@"operationCount"]) {
if (self.uploadQueue.operationCount == 0) {
[self.spinnerView stopAnimating];
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
Выполняю ли я это правильно? Есть ли лучший способ сделать это? Я застрял здесь некоторое время, и я начинаю думать, что, возможно, это не UIImageView, а то, что я добавляю NSURLRequests к NSOperationQueue.
Еще раз спасибо!
Я не вижу нигде в вашем коде, где вы удаляете счетчик. Если вы остановите анимацию, вы должны иметь [self.spinnerView removeFromSuperview]; – rdelmar
Вы видели мой ответ? –