gpt4 book ai didi

ios - 如何按顺序将 subview 添加到 UIScrollView

转载 作者:行者123 更新时间:2023-12-01 16:59:08 27 4
gpt4 key购买 nike

我在将 subview 按顺序添加到 ScrollView 时遇到问题。

我从服务器返回了一个 JSON 响应,我将其解析为一个业务对象数组,然后我发送到函数 updateCarousel,它看起来像这样:

-(void) updateCarousel: (NSArray *)response{
if(response && response.count>0){
int i=0;
self.scrollView.hidden=NO;
[self.scrollView setNeedsDisplay];
self.pageControl.hidden=NO;

[self.scrollView setContentOffset:CGPointMake(0, 0) animated:NO];

for (Business *business in response){
if (i >= MAX_INITAL_SEARCH_RESULTS)
break;

CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * i;
frame.origin.y = 0;

frame.size = scrollView.frame.size;

CardView *cardView = [[CardView alloc] initWithBusinessData:business andFrame:frame];


//I've tried the following code with and without wrapping it in a GCD queue
dispatch_queue_t addingQueue = dispatch_queue_create("adding subview queue", NULL);
dispatch_async(addingQueue, ^{
[self.scrollView addSubview:cardView];
});
dispatch_release(addingQueue);

cardView.backgroundColor = [UIColor colorWithWhite:1 alpha:0];
i++;

self.scrollView.contentSize = CGSizeMake(i*(self.scrollView.frame.size.width), self.scrollView.frame.size.height);
self.pageControl.numberOfPages=i;

}
}else{
self.scrollView.hidden=YES;
self.pageControl.hidden=YES;
NSLog(@"call to api returned a result set of size 0");
}

结果——尽管我尝试了很多东西——总是一样的: ScrollView 一次添加所有 subview ,而不是通过循环处理它们。我不明白这怎么可能。如果我在循环末尾添加一个 sleep() ,它会以某种方式等待整个循环结束,然后再显示添加的 subview 。它怎么知道结果数组有多长?我无能为力,请帮忙。

最佳答案

我假设您没有使用任何额外的线程来处理数据。
您遇到的是应用程序在执行您的方法时卡住了。即使您一个一个地添加 subview (它们之间有一个 sleep ),也不会执行其他代码来处理您的添加。

1 .您可以使用另一个线程来加载数据并添加 subview ,但这需要同步到主线程(更复杂)。

2 您可以在多次调用中破坏您的方法。在两次调用 load 方法之间,允许执行其他代码,这意味着 ScrollView 将能够一一处理/显示您的 subview 。

您需要将加载方法更改为以下内容:


- (void)updateCarouselStep:(NSNumber*)loadIndex
{
if (response && response.count > 0)
{
// Here add only a subview corresponding to loadIndex


// Here we schedule another call of this function if there is anything
if (loadIndex < response.count - 1)
{
[self performSelector:@selector(updateCarouselStep:) withObject:[NSNumber numberWithInt:(loadIndex+1) afterDelay:0.5f];
}
}

}



这只是解决问题的一种基本方法。例如,您需要考虑更新 response 会发生什么。在完成加载前一个数据之前。

关于ios - 如何按顺序将 subview 添加到 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841320/

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