下载图像iOS时的活动指示灯

时间:2015-02-13 22:36:33

标签: ios objective-c uiimageview uiimage activity-indicator

我下载了一系列图片来制作动画。当下载开始显示活动指示符以及何时完成隐藏活动指示符时,我该怎么做?

self.img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 65, self.view.frame.size.width, self.view.frame.size.width-70)];



        img.animationImages = [NSArray arrayWithObjects:

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],

                                   [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],




        img.animationDuration = 20.0f;

        img.animationRepeatCount = 0;

        [img startAnimating];

        [self.view addSubview: img];

2 个答案:

答案 0 :(得分:2)

您的图片正在同步下载,这意味着您正在阻止主线程(这很糟糕)。相反,在后台线程上运行下载,这将允许主线程,并且在扩展中,应用程序的UI仍然可以运行。使用您的示例代码,这是在后台运行时的样子:

self.img = [[UIImageView alloc] initWithFrame:CGRectMake(0, 65, self.view.frame.size.width, self.view.frame.size.width-70)];
self.img.animationDuration = 20.0f;
self.img.animationRepeatCount = 0;
[self.img startAnimating];
[self.view addSubview:self.img];

// START ANIMATING YOUR ACTIVITY INDICATOR HERE

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {

    NSArray *images = @[
        [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],
        [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],
        [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],
        [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"URL"]]],
    ];

    dispatch_async(dispatch_get_main_queue(), ^(void) {

        // STOP ANIMATING YOUR ACTIVITY INDICATOR HERE

        [self.img setAnimationImages:images];

    });

});

答案 1 :(得分:1)

下载开始时编写此代码: UIActivityIndi​​catorView * spinner = [[UIActivityIndi​​catorView alloc] initWithActivityIndi​​catorStyle:UIActivityIndi​​catorViewStyleGray]; spinner.frame = CGRectMake(0,0,320,50); [spinner startAnimating];

下载结束时编写此代码:[spinner stopAnimating];