2

我想動畫多個UIImageViews.Image上的圖像來自服務器端與Url,所以我請求URL並將其轉換爲圖像,我給動畫uiimageview即crossdissolve,出現一個問題圖像參考在UIImageView中更改意味着第一它顯示不同的圖像,當我滾動然後其他圖像顯示在相同的UIImageView.This問題將發生只有第一次,因爲我保持imagecache.Any有關這個bahavious的想法?以下是我使用的代碼。爲UIImageView提供動畫時,爲什麼UIImage引用會改變?

-(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 ...],然後在每個函數完成部分內創建一個塊,並在該塊內部將圖片分配到數組中,並且調用下一個函數(下一個需要的圖片)。

只要當前請求完成,就不會再分配其他圖片。

相關問題