gpt4 book ai didi

iphone - 更新 UIScrollView 内的 UIImageView - 图像在滚动时卡住

转载 作者:行者123 更新时间:2023-12-03 20:43:15 25 4
gpt4 key购买 nike

我在 UIScrollView 中有 UIImageView。 UIImageView显示不断从互联网下载的图像(使用NSURLConnection打开的流)。

NSString surl = @"some valid url";
NSURL* nsurl = [NSURL URLWithString:surl];
NSURLRequest *request = [NSURLRequest requestWithURL:nsurl];
[[NSURLConnection alloc] initWithRequest:request delegate:self];

// this method will be called when every chunk of data is received
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// here I collect data and when i have enough
// data to create UIImage i create one
}

每次我收到数据时,我都会将其打包到 NSData 中,当我收到整个图像时,我会从此 NSData 创建 UIImage,然后将此图像设置为 UIImageView 的图像。一切正常,图像更新应该如此,但是当我触摸屏幕并开始移动内容时(此 UIImageView 始终大于屏幕,并且 UIScrollView 始终适合整个屏幕)图像更新停止,我只看到显示在的最后一帧我点击的时间。这似乎正在发生,因为我的

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

停止被调用。从屏幕上松开手指后,方法再次按预期接收数据和图像更新。我不知道为什么我的 NSURLConnection 委托(delegate)方法停止接收数据。有什么帮助吗?

最佳答案

-[NSURLConnection initWithRequest:didReceiveData:] 的文档是这样说的:

By default, for the connection to work correctly, the calling thread’s run loop must be operating in the default run loop mode.

我假设您正在主线程上创建 NSURLConnection

UIScrollView 跟踪触摸时,它会以不同的模式运行运行循环,而不是默认模式。这就是为什么当您触摸 ScrollView 时您会停止获取更新。 (这也会导致 NSTimer 在您触摸 ScrollView 时停止触发。)

我认为您可以将 NSURLConnection 设置为在默认模式和 ScrollView 跟踪模式下运行,如下所示:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode: NSRunLoopCommonModes];
[connection start];

关于iphone - 更新 UIScrollView 内的 UIImageView - 图像在滚动时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589255/

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