加载iOS时隐藏图像

时间:2015-02-12 16:22:26

标签: ios uiimageview uiimage

我正在使用UIPicker选择图像,当用户选择时,下载将开始。我正从我的服务器下载78张图片来制作动画。如何在下载图像时隐藏当前图像(imageview),以及下载完成后显示图像(imageview)。我尝试了这个,但它没有用。

- (void)viewDidLoad

{
 [super viewDidLoad]
 // Load starting image, otherwise screen is blank
  self.radar_1 = [[UIImageView alloc]initWithFrame:CGRectMake(0, 65, self.view.frame.size.width, self.view.frame.size.width-70)];

    radar_1.image = [UIImage animatedImageWithAnimatedGIFURL:[NSURL URLWithString:@"<|SERVER LINK|>"]];

    [self.view addSubview:radar_1];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

{

  if (row == 2) {
        self.radar_1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 65, self.view.frame.size.width, self.view.frame.size.width-70)];

        self.radar_1.hidden = YES;

        radar_1.animationImages = [NSArray arrayWithObjects:

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"<|SERVER LINK|> "]]],

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"<|SERVER LINK|> "]]],

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"<|SERVER LINK|>"]]],

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"<|SERVER LINK|>"]]],
{...} // Doing the same 77 times...

        radar_1.hidden = NO;

        radar_1.animationDuration = 20.0f;

        radar_1.animationRepeatCount = 0;

        [radar_1 startAnimating];

        [self.view addSubview: radar_1];
}

1 个答案:

答案 0 :(得分:1)

从用户体验的角度来看,从NSURL同步下载70张图像可能不是最佳选择。有没有理由你不能将所有图像放在一个精灵表中并下载一个图像,然后在客户端处理它以显示你的动画?

如果您确实需要抓取70张图片,最好以异步方式执行此操作,以便UI保持响应。以下是可以使用的简单异步映像加载的示例:

    - (void)downloadImageWithURL:(NSURL *)url completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               if ( !error )
                               {
                                    UIImage *image = [[UIImage alloc] initWithData:data];
                                    completionBlock(YES,image);
                                } else{
                                    completionBlock(NO,nil);
                                }
                           }];
}

您可以保存计数器变量并遍历调用上述方法的图像请求。当每个完成后,您可以勾选另一个成功的图像请求。如果你拥有它们,那么你可以构建你正在制作的动画。

发生这种情况时,您可以在视图中添加一个ActivityIndi​​cator,让用户知道在等待时发生的事情。

希望有所帮助。