gpt4 book ai didi

iphone - UIWbView 在 iPhone SDK 中使用 UIProgressView 加载多个 URL

转载 作者:行者123 更新时间:2023-11-29 04:44:49 25 4
gpt4 key购买 nike

我正在尝试创建一个 iPhone 应用程序,如下图所示:

enter image description here

在此,我动态地将一些 ImageView 动态添加到 uiscroll View 中。每个 imageview 都包含一个 UIButton 和 UIProgressView。当点击每个时,它应该有不同的 url,并且每个 url 的加载应该出现在相应的 UIProgressView 上。我正在使用异步方法,它应该同时加载多个进度 View 。这是我使用过的代码,

- (void)startDownload:(id)sender {

UIButton *btn = (UIButton *)sender;
int btnTag = btn.tag;
selectedTag = btn.tag;

for (int x=0; x < [urlArray count]; x++) {
if (btnTag == x) {
NSURL *url = [NSURL URLWithString:[urlArray objectAtIndex:x]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSURLConnection *theConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSLog(@"Expected length: %lld ",response.expectedContentLength);
}];
if (theConnection) {
receivedData = [NSMutableData data];
}else {
NSLog(@"Connection failed");
}
}
}
}

- (void)makeMyProgressMove{

UIImageView *image = (UIImageView *)[mainView viewWithTag:selectedTag];
UIProgressView *currentProgress = (UIProgressView *)[image viewWithTag:selectedTag];
NSLog(@"Prog tag: %d",currentProgress.tag);

if(currentProgress)
{
float actualProgress = (_receivedDataBytes / (float)_totalFileSize);
currentProgress.progress = actualProgress;

} else {
NSLog( @"couldn't get the progress view for the image with tag: %d", selectedTag );
}
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
_totalFileSize = response.expectedContentLength;
receivedData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
_receivedDataBytes += [data length];

NSLog(@"Receiving data: %2f", _receivedDataBytes / (float)_totalFileSize);

if ((_receivedDataBytes / (float)_totalFileSize) < 1) {
[self performSelectorOnMainThread: @selector(makeMyProgressMove) withObject: NULL waitUntilDone:NO];
}
else if ((_receivedDataBytes / (float)_totalFileSize) == 1){
[self performSelectorOnMainThread: @selector(makeMyProgressMove) withObject: NULL waitUntilDone:NO];
_receivedDataBytes = 0;
_totalFileSize = 0;
}
[receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
}

但它不起作用。有什么想法吗?

最佳答案

为每个 UIWebView 分配不同的 url,并将 SubView UIActivityIndi​​catorView 添加到每个 UIWebView.Give 标签为每个 UIActivityIndi​​cator ..

-(void)action  {

//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];

//URL Request Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
UIWebView *webView = [[UIWebView alloc]initWithFrame:frame];//give y value incremented frame.

UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
av.frame=CGRectMake(145, 160, 25, 25);
av.center = webView.center;
av.tag = INDICATOR_TAG;
[webView addSubview:av];
webView.delegate = self;
[av startAnimating];

//Load the request in the UIWebView.
[webView loadRequest:requestObj];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {

UIActivityIndicatorView *indicator = [webView viewWithTag:INDICATOR_TAG];
indicator.hidden = YES;

}

调用此操作方法以显示多次。

编辑

UIWebView 在正常模式下不会给你任何进度信息。您需要做的是首先使用 NSURLConnection 异步获取数据。当 NSURLConnection 委托(delegate)方法连接时,您将获取从预期内容长度获得的数字并将其用作最大值。然后,在委托(delegate)方法 connection:didReceiveData 中,您将使用 NSData 实例的 length 属性来告诉您当前进度,因此您的进度分数将为 length/maxLength ,标准化为 0 到 1 之间。/p>

最后,您将使用数据而不是 URL 来初始化 Web View (在您的连接中:didFinishLoading 委托(delegate)方法)。

引用: How to use UIProgressView while loading of a UIWebView?

关于iphone - UIWbView 在 iPhone SDK 中使用 UIProgressView 加载多个 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9804923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com