2017-01-02 7 views
0

Whatsapp Chatをシミュレートしようとしています。どのセルにも画像があります(バブルの末尾)。ちょうどバブルです。メッセージのテキストを表すラベル。印刷後に呼び出されるのtableViewは、私は、データが示されているものまで知りませんdointいくつかの時間を保持したらTableViewの最後の要素にスクロールすると時間がかかります

は私が

self.messagesTableView.reloadData() 

前と呼び出し後にプリントを入れています。 indexpathにInsert行を挿入しても同じことが起こりますが、挿入アニメーションが表示されるまでに時間がかかります。

func displayMessages(viewModel: GroupChatMessages.GetChatMessages.ViewModel) { 
    let displayedMessage = viewModel.displayedMessages 

    print ("i'm here!") 

    messages = displayedMessage! 

    //self.messagesTableView.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true) 

    self.messagesTableView.reloadData() 

    print ("i'm here2!") 

    firstTime = false 
    self.setVisible(hiddenTableView: false, hiddenChatLoader: true) 
    self.scrollToLastMessage(false) 
    self.messagesLoaded = true 

} 

私はキューに派遣しないことを試み、そしてreloadData(前のコメント行)が、ナッシング作品と何もsignificative時間を表してきました。

多分、バブルのイメージになる可能性がありますか?知りません。この画像は資産に保存されているので、インターネットからダウンロードしていません。

self.setVisibleちょうどローダーを非表示にしてtableViewを表示するだけですが、私はあまりにもそれを移動してnothingsの変更を試みました。あなたに必要なその他の情報は私に知らせてください。ありがとう!

EDIT:

まあ、私はこの問題は、それが時間の大部分を取るところこれは、最後のセルまでスクロールから来ていることを見てきました。

func scrollToLastMessage(animated: Bool) { 
    let section = 0 
    let lastItemIndex = self.messagesTableView.numberOfRowsInSection(section) - 1 
    let indexPath:NSIndexPath = NSIndexPath.init(forItem: lastItemIndex, inSection: section) 
    self.messagesTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: animated) 
    self.scrollDownButton.hidden = true 
} 

データがロードされると、最初に私が見てきたが、のtableViewの一番上の行ですが、私が見てみたいので、私はスクロールをしなければならないので、そのスクロールを最適化するために働かは、あります一番下のもの(最後)。ありがとう! reloadData()よう

答えて

1

最後にソリューションを読み込み速度を後押しするこれらの方法を使用しています

tableView.transform = CGAffineTransformMakeRotation(-M_PI); cell.transform = CGAffineTransformMakeRotation(M_PI);

テーブルの向きを交換され、最後の要素に任意の単一の時間をスクロール待っている間に死ん避けるために、私を見つけました

今すぐheaderviewとfooterViewは逆のです。たとえば、この設定でTableViewの下部に(視覚的に)行を挿入したい場合は、0の位置に0を追加する必要があります:0 atSection: "WhereYouAre"このようにして新しい要素を追加すると、スクロールは自動的に行われるため、スクロールは不要です。素晴らしいと奇妙な答えIMHO。

私はここで、この解決策を見つけた:Hadjikyriacouが解決

Solution Link

@Christosを。

1

方法は、UIの方法として考慮されるべきであり、それはメインスレッドでそれらを呼び出すことが必須です。

DispatchQueue.main.async { tableView.reloadData() } 

それは細胞の有意な量をリフレッシュするために必要とするか、またはデータソースがない限りreloadData()機能を使用しない方が良いです

tableView.insertRows(at: [IndexPath], with: UITableViewRowAnimation) 

とさわやか電池用:新しい行を追加するには、このメソッドを使用する代わりに、変更されて

セルは、画像とレンダリングのかなりの量を持っている場合

も、より速くスクロールするには、このコードを使用します。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) 
    // ADD THESE TWO LINE 
    cell.layer.shouldRasterize = true 
    cell.layer.rasterizationScale = UIScreen.main.scale 
} 

を大幅に

+0

Mousavianは、そのためのおかげで、今私はinsertRowsを使用していreloadDataのinsted が、あなたはどのように知っているかどうかをチェックしたい場合、私は問題がスクロールから来ていることを検出しましたので、まだここでの問題は、私は私の質問を更新しましたそれを解決する。どうもありがとうございました。 – Eironeia

+0

スクロールに問題があり続けると、同じ時間がかかりました。 – Eironeia

+0

あなたの男はDispatchQueue.async' – Mousavian

関連する問題