В приложении, которое я разрабатываю, у меня есть горизонтальная UIScrollView
, которая используется как вид таблицы.
Добавление подпредставлений к нему заблокировало основной поток, поэтому я решил вместо этого использовать GCD, создать представления в фоновом потоке и добавить их к экземпляру UIScrollView
в главной очереди.
Соответствующий код:
NSUInteger numberOfItems = [_dataSource numberOfItemsInBandView:self];
CGFloat __block nextX = 0.0;
dispatch_queue_t bgQueue = dispatch_queue_create("bandview", NULL);
for (NSUInteger i = 0; i < numberOfItems; i++) {
dispatch_async(bgQueue, ^{
UIView *itemView = [_dataSource bandView:self viewForItemAtIndex:i];
itemView.frame = CGRectMake(nextX, 0, itemView.frame.size.width, itemView.frame.size.height);
dispatch_async(dispatch_get_main_queue(), ^{
[_scrollView addSubview:itemView];
_scrollView.contentSize = CGSizeMake(nextX, self.frame.size.height);
});
nextX += itemView.frame.size.width;
});
}
dispatch_release(bgQueue);
_scrollView
- это экземпляр UIScrollView
(правильно инициализированный).
Я ожидал увидеть, что подпредставления добавляются к UIScrollView
один за другим, но вместо этого я испытываю то, что все работает асинхронно, а затем полосы прокрутки обновляются со всеми добавленными сразу подпредставлениями ( это не то, что я ожидаю).
Кто-нибудь может определить, что мне здесь не хватает?