使用进度

时间:2015-08-09 08:59:37

标签: ios objective-c nsurlconnection nsurlrequest data-synchronization

在我的应用中,我将图片上传到服务器。我正在使用这种方法https://stackoverflow.com/a/22301164/1551588。它工作正常,但我想为此方法添加进度条。有可能的? sendAsynchronousRequest能做什么?谢谢你的回复。

1 个答案:

答案 0 :(得分:1)

似乎无法在iOS中获得进度值。

但是在SO上我找到了一个非常好的解决方法,基本上是作弊,但在视觉上,他做的工作。

您自己填写一个进度指示器,最后确保它已满。

原始回答UIWebView with Progress Bar

带有改进的代码:

#pragma mark - Progress View

Boolean finish = false;
NSTimer *myTimer;

-(void)startProgressView{
    _progressView.hidden = false;
    _progressView.progress = 0;
    finish = false;
    //0.01667 is roughly 1/60, so it will update at 60 FPS
    myTimer = [NSTimer scheduledTimerWithTimeInterval:0.01667 target:self selector:@selector(timerCallback) userInfo:nil repeats:YES];
}
-(void)stopProgressView {
    finish = true;
    _progressView.hidden = true;
}

-(void)timerCallback {
    if (finish) {
        if (_progressView.progress >= 1) {
            _progressView.hidden = true;
            [myTimer invalidate];
        }
        else {
            _progressView.progress += 0.1;
        }
    }
    else {
        _progressView.progress += 0.00125;
        if (_progressView.progress >= 0.95) {
            _progressView.progress = 0.95;
        }
    }
    //NSLog(@"p %f",_progressView.progress);
}

以下是如何使用它:

首先打电话(显然)你需要的地方

[self startProgressView];

然后在代理

#pragma mark - NSURLConnection Delegate Methods

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"Loaded");
    [self stopProgressView];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Error %@", [error description]);
    [self stopProgressView];
}

```