2017-05-31 6 views
1

私はUITableViewで提示されている自動サイズ調整用のセルに取り組んでいます。なぜDispatchQueue.main.asyncがセルの自動サイズ変更に影響するのですか?

画像をUIImageViewに設定しようとした場合以外は、DispatchQueueからうまく動作しています。イメージを直接設定すると、すべて正常に動作します。

例:

DispatchQueue.main.async { 
    self._thumbnailImageView.image = image 
} 

あなたは、私が行方不明です、なぜDispatchQueue.main.asyncブロックは、セルのサイズ変更に影響を与える可能性があるものを共有することができます。

+0

すでにメインスレッドにいる場合は、画像を設定するために 'DispatchQueue.main.async'を実行する必要はありません。これにより、画像の設定が遅れるため、パフォーマンスが低下する可能性があります。 iOSアプリケーションがメインスレッドを再度使用して新しいイメージを設定して再描画する前に、現在のUIアップデートを終了する必要があるとします。 –

+0

@Hoa thxの提案はありますが、DispatchQueue.main.asyncを使用してバックグラウンドスレッドからイメージを設定しています。 –

答えて

1

私の推測では、あなたのコールスタックはすでにテーブルビューにレイアウトの更新が必要だが、非同期ではないことを知っていると思います。

それが動作するかどうかを確認するために、非同期ブロック内

tableView.setNeedsLayout() 

を追加します。セル上で行う必要があるかもしれません。

+0

これをtableView(_ tableView:UITableView、willDisplayセル:UITableViewCell、forRowAt indexPath:IndexPath)から呼び出すとよいですか?またはコードブロックで直接呼び出す必要がありますか? –

+0

イメージを更新した後に起こるように、そのコードブロック内にある必要があります。 –

+0

Thxは助けを求めていますが、このステップは私を助けません。 –

0

いくつかの研究の後、私は、この場合には使用することがより適していることがわかった。

DispatchQueue.global(qos: .userInteractive).async 

ため、サービスクラスの品質の。私の場合、私は.userInteractiveを使うべきです。

メイン スレッドの操作、ユーザーインターフェイスの更新、またはアニメーションの実行など、ユーザーとやりとりしている作業。 作業が迅速に行われない場合、ユーザーインターフェイスがフリーズしたように見えることがあります。 応答性とパフォーマンスに焦点を当てます。

実際、なぜDispatchQueue.main.asyncがうまく機能しないのか、もっと説明が必要です。

関連する問題