Ios 当我给UIImageView设置动画时,为什么UIImage引用会更改?
我想在多个uiimageview上设置图像动画。图像来自服务器端,带有Url,因此我请求Url并将其转换为图像,然后将动画提供给uiimageview,即交叉融合,出现一个问题:UIImageView中的图像引用正在更改意味着它第一次显示不同的图像,当我滚动时,其他图像显示在同一UIImageView上。这个问题只会第一次出现,因为我维护了imagecache。你知道这个问题吗?。下面是我使用的代码Ios 当我给UIImageView设置动画时,为什么UIImage引用会更改?,ios,objective-c,nsurlconnection,nsurlrequest,nsoperationqueue,Ios,Objective C,Nsurlconnection,Nsurlrequest,Nsoperationqueue,我想在多个uiimageview上设置图像动画。图像来自服务器端,带有Url,因此我请求Url并将其转换为图像,然后将动画提供给uiimageview,即交叉融合,出现一个问题:UIImageView中的图像引用正在更改意味着它第一次显示不同的图像,当我滚动时,其他图像显示在同一UIImageView上。这个问题只会第一次出现,因为我维护了imagecache。你知道这个问题吗?。下面是我使用的代码 -(void)requestForImage:(NSString*)strURL{ N
-(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…],然后在每个函数完成部分内创建一个块,并在该块内将图片分配到数组中,然后调用下一个函数(下一个所需图片) 这就是只要当前请求完成,就不会分配其他图片的方式