2015-06-22 14 views
3

我正在研究一個項目,其中有一個表格視圖,其中包含大量具有非常複雜內容的單元格。它通常不會超過兩個,但在例外情況下 - 可以說 - 其中有30個。這些複雜單元格中的每一個都包含折線圖。我正在使用ios-charts(https://github.com/danielgindi/ios-charts)。如何創建具有複雜內容的UITableViewCell以保持滾動流利

這是視圖控制器的內容是什麼樣子: view controller content

我用在的viewController的的cellForRowAtIndexPath方法離隊的孔中的代碼是那種如下:

var cell = tableView.dequeueReusableCellWithIdentifier("PerfgraphCell", forIndexPath: indexPath) as? UITableViewCell 
if cell == nil { 
    let nib:Array = NSBundle.mainBundle().loadNibNamed("PerfgraphCell", owner: self, options: nil) 
    cell = nib[0] as? FIBPerfgraphCell 
} 

cell.setupWithService(serviceObject, andPerfdataDatasourceId: indexPath.row - 1) 
return cell! 

,並在細胞的代碼我有一個方法「setupWithService」,它從現有的對象「serviceObject」中拉取數據源並插入圖形的繪圖中,如下所示:

func setupWithService(service: ServiceObjectWithDetails, andPerfdataDatasourceId id: Int) { 

    let dataSource = service.perfdataDatasources[id] 
    let metadata = service.perfdataMetadataForDatasource(dataSource) 

    if metadata != nil { 
     if let lineChartData = service.perfdataDatasourcesLineChartData[dataSource] { 

      println("starting drawing for \(lineChartData.dataSets[0].yVals.count) values") 

      chartView.data = lineChartData 
     } 
    } 
} 

現在的問題:取決於在圖表中繪製多少個值(在100到2000之間),繪圖似乎變得非常複雜。用戶注意到當他向下滾動時:只要包含這樣一個複雜圖表的單元出隊,滾動就卡住了一會兒,直到圖表初始化。那當然很醜陋!

對於這種情況,是否有意義的是不按需要使單元出列,但是預定義它們並將它們保存在數組中,一旦圖形所需的數據被視圖控制器接收並將相應的單元拉出這是什麼時候需要的數組?或者是否有辦法使圖表初始化爲異步,以便單元立即出現,但圖表何時出現「準備就緒」?

感謝您的回覆!

回答

4

你試圖做的事情將不可避免地遇到一些或那種情況下的一些嚴重的性能問題。將所有單元格(及其數據存儲到內存中)都會很快耗盡應用程序的可用內存。另一方面,如您現在正在經歷的那樣,出隊和重新加載會在某些設備上產生滯後。重新思考應用程序的體系結構可能會更好:

1-預先計算您的圖並將它們導出爲圖像。將圖片載入和關閉單元格的性能會降低很多。

2-將表格視圖變爲下拉菜單,您一次只能顯示一張圖。

希望這會有所幫助!

+0

謝謝。你的問題推動我走向正確的方向。我仍然不知道如何將圖表保存到保存的圖像中,但我可能會在此提出另一個問題。 –

+0

不用擔心,歡迎您! –

相關問題