2

Я хочу, чтобы анимация изображений на нескольких UIImageViews.Image идет с сервера с Url, поэтому я запрашиваю url и конвертирую его в изображение, и я даю анимацию uiimageview, т.е. crossdissolve, возникает одна проблема. Ссылка на изображение меняется в UIImageView означает сначала время, когда оно отображает разные изображения, и когда я прокручиваю затем другой образ на том же UIImageView. Эта проблема будет возникать только в первый раз, потому что я поддерживаю imagecache. Любая идея об этом неистово? ». Ниже приведен код, который я использовал.Почему ссылка UIImage меняется, когда я даю анимацию UIImageView?

-(void)requestForImage:(NSString*)strURL{ 

    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
    NSURLRequest *request; 
    NSString * newImageURL = [strURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    request = [NSURLRequest requestWithURL:[NSURL URLWithString:newImageURL]]; 

    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     UIImage *image = [UIImage imageWithData:data]; 

     if ([data length] > 0 && error == nil && image) //If success 
     { 
      //receive data 
      [[myImage sharedMyclass] setImage:image withKey:strURL]; 

      dispatch_queue_t queue_ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
      dispatch_async(queue_, ^{ 

       UIImage *image = [[myImage sharedMyclass] imageForURL:strURL]; //That return image from particular path 

       [self performSelectorOnMainThread:@selector(receivedImage:) withObject:image waitUntilDone:NO]; 

       [data writeToFile:[[NSUserDefaults standardUserDefaults] valueForKey:strURL] atomically:YES]; 

       dispatch_sync(dispatch_get_main_queue(), ^{ 


        [UIView transitionWithView:self 
            duration:2.0 
            options: UIViewAnimationOptionTransitionCrossDissolve|UIViewAnimationOptionAllowUserInteraction 
           animations:^{ 
             self.image = image; 

            } 
            completion:NULL]; 
        self.contentMode = UIViewContentModeScaleAspectFit; 
       }); 
      }); 
     } 

    }]; 
} 

ответ

0

Когда вы вызываете эту функцию, компилятор проверяет код, а затем машина делает это.

Это означает => все задачи, записанные в списке задач системы, но никто не может пообещать вам, какой из них будет сделан первым.

Мой совет, разделите его на несколько небольших функций, Затем вызовите первый [self perform ...], а затем сделайте блок внутри каждой секции завершения функции, а внутри этого блока назначьте изображение в массив и вызов следующей функции (следующее требуемое изображение).

Так как никакое другое изображение не будет назначено до тех пор, пока выполняется текущий запрос.