我想对多个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/