ios - 当我给UIImageView动画时,为什么UIImage引用会更改?

标签 ios objective-c nsurlconnection nsurlrequest nsoperationqueue

我想对多个UIImageViews上的图像进行动画处理.Image是从服务器端通过Url发送的,因此我请求url并将其转换为图像,然后将动画提供给uiimageview即crossdissolve,发生了一个问题图像引用在UIImageView中的更改意味着第一次显示不同的图像,当我滚动然后在同一UIImageView上显示其他图像时,只会出现此问题,因为我维护了imagecache。关于此Bahavious吗?下面是我使用的代码。

-(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;
                 });
             });
         }

     }];
}

最佳答案

当您调用该函数时,编译器将检查代码,然后计算机将其变为现实。

这意味着=>所有写在系统任务列表中的任务,但是没有人能保证您先完成其中一项。

我的建议,将其分为几个小功能,
然后调用第一个[self perform ...],然后在每个函数完成部分中创建一个块,并在该块中将图片分配到数组中,并调用下一个函数(下一个所需的图片)。

只要当前请求完成,就不会再分配其他图片。

关于ios - 当我给UIImageView动画时,为什么UIImage引用会更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18350823/

相关文章:

ios - 无法识别 ReachabilityManager 单例类方法

ios - 在 Objective-C 中调用函数时的逻辑

ios - 如果屏幕锁定,点击暂停按钮时 avplayer 不会暂停

objective-c - 在异步 HTTP 请求的 completionHandler 中更新 View 时出现延迟

ios - NSURLConnection 有效,但 AFNetworking 无效(在特定 URL 上)

ios - 'UIViewController' 没有可见的 @interface 声明选择器

javascript - 使用 Chrome for IOS 从网站录音

ios - 尝试包含库时未知类型名称

iOS 8.1图像显示

ios - 如何在 iOS 中使用 GoogleMaps GMSCamera 更新或更改两个位置之间的相机位置?