2016-07-03 10 views
2

私はちょうど解析しているので、私はメモリに正常に読み込むことができる約800 JSONエントリを持つルックアップタイプのアプリをやっています単純なモデルとして動作するいくつかのオブジェクトにプレーンテキスト。 Swift 2/Cocoa:大規模なアイテムコレクションとその差し迫ったUIアップデートのための良い練習

enter image description here

は、だから私が試した:

しかし、私は物事が遅くなるところがベストプラクティスであるとのUIの終わり、に対処するために非常になど、スクロールしようとしているのか分かりません番号付きのボタンでページネーションを実装すると動作しますが、UIが更新をロックして、NSCollectionViewの更新中にページが1秒間に衝突します。

クリックボタンが

@IBAction func changePage(sender: NSButton) { 
    let newPage = Int(sender.title) 
    currentPageNumber = newPage! 
} 

public let pageSize = 200; 

public var currentPageNumber : Int{ 
    didSet{ 
     if(fullMorphemesList.count == 0){ 
      return; 
     } 
     loadMorphemesByPage(currentPageNumber) 
    } 
} 

項目があるロジックを起こすアクションを:ここで

enter image description here

は現在、初期、ページロードが ViewController.swiftで発生する原因となるコードです読み込まれている:

///Load morphemes based on page number 
func loadMorphemesByPage(pageNumber : Int){ 
    let beginIndex = (pageNumber - 1) * pageSize 
    let endIndex = pageNumber * pageSize 

    loadMorphemesIntoDisplay(from: beginIndex, to: endIndex) 
} 

///Loads morphemes into the collection view 
public func loadMorphemesIntoDisplay(from index: Int, to endIndex: Int){ 
    let morphemesToLoad = fullMorphemesList[index..<endIndex] 
    collectionView.content = (Array(morphemesToLoad) as [AnyObject]) 
} 

コードを近似的な発射順序で入れておくとよいでしょう。余計なステップがありますか? UIの残りの部分をロックせず、ビジュアルアーティファクトのない正しい順序でリストを更新するために使用できる非同期UIメソッドがありますか?

ありがとうございました!

+1

内reuseIdentifierを使用し、理由のトンがあるかもしれません。しかし、コレクションビューに200個のオブジェクトを取得するのは、それほど遅くあってはいけません。アーティファクトの理由を知るために、私は異なる視点のCAレイヤーで遊んでいきます。 CAレイヤー(XCodeのユーティリティービュー - 埋め込まれた四角形アイコンを持つ最後のアイテムで、コレクションビューの親子のためにコアアニメーションレイヤーをチェックする)ですべてをバックアップすることから始めます。何か違いがあるかどうかを確認してください。 –

答えて

1

代わりに形態素のスクロール可能なリストにNSTableViewを使用し、データソース/デリゲートメソッドを実装します(テーブルセルのreuseIdentifierを忘れないでください)。 NSCollectionViewでは、データソース/デリゲートを使用して遅延ロードをサポートすることもできますが、このような場合は重いことが分かりました。レイヤーをオンにして、NSTableRowViewのcanDrawSubviewsIntoLayerをyesに設定することで、さらにスクロールしてパフォーマンスを向上させることができます。そこで、基本的

  1. あなたNSTableCellViewサブクラスとXIBを作成します(もう一度再利用識別子を忘れないでください)。

  2. はあなたのビューベースのNSTableViewであなたのXIBを登録し、遅さを引き起こすことができるものとは言い難い

func tableView(tableView: NSTableView, viewForTableColumn: NSTableColumn, row: Int) -> NSView

関連する問題