2015-09-06 111 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

相關問題