2015-09-06 138 views
1

我正在使用Swift 2.0中的iOS应用程序,并且遇到了使UITableView加载速度快的问题,现在需要加载1-2秒。慢UITableView与UIScrollView和PageControl在每个自定义单元格内

我有什么。

我有一个UITableView自定义单元格。每个自定义单元格都有用于水平滚动的UIScrollView和PageControl。

还有一个单独的xib将被添加到UIScrollView的每个页面上。这个xib包含两个UIViewPickers的视图。

它是如何工作

在“tablewView:的cellForRowAtIndexPath”我打电话来实例化使用XIB文件并用数据填充它的子视图的功能。然后它将它添加到scrollView并配置分页。

如果我添加10-20页,3个细胞它的地狱(1-3sec)已经缓慢什么是慢

我试着移动逻辑,将数据填充到后台线程中的子视图中,并稍后在主线程中将这些子视图添加到单元中。它使整个tableView快速出现,但它仍然很愚蠢,你需要等待多久才能看到每个单元格内的实际数据。

我看着仪器,在我看来,我所有的数据计算都非常快,但添加这些子视图与uipickers是最慢的部分。

我也试着只添加第一个子视图,然后添加所有其余的如果用户开始在单元格上水平滚动。它快了10倍,但滞后仍然值得注意,逻辑更加复杂(在滚动拖动中添加新的子视图并不是非常简单)。

任何更好的建议,我应该看看,以及如何使整个概念快速工作?我相信只需要改进逻辑就可以快速完成。

+0

你可以张贴一些代码?像'cellForRowAtIndexPath',... – anhtu

+0

当然。这里有所有相关的功能:https://gist.github.com/anonymous/81986debb1f6d5fd1c79 – Maklaus

回答

1

我认为“只添加第一个子视图,然后添加所有其余的如果用户开始在单元格上水平滚动。”很好。我建议这样做:加载第一个子视图。然后加载其他睡眠时间。喜欢的东西:

// load others, 
notMainthread{ 
    for (...subviews){ 
    mainThread{ 
     loadSubView(); 
    } 
    sleep(0.01); 
    } 
} 

不知迅速,所以我写了一个伪代码。 关联应用我做什么加载太多的子视图:https://itunes.apple.com/vn/app/liveradio/id998787831

一些代码:

// running on not main thread  
    for (int i=0; i<[listCT count]; i++) { 
     ... 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      emptyImage.frame = CGRectMake(0, yEndLast, cWidthTop, yStart-yEndLast); 
      [emptyImage setContentMode:UIViewContentModeCenter]; 
      [contentView addSubview:emptyImage]; 
     }); 
     [NSThread sleepForTimeInterval:0.004]; 
    } 
+0

你可以分享你的objC代码的那部分? – Maklaus

相关问题