2017-06-28 31 views
0

OK、私はperformSegueWithIdentifier very slow when segue is modalを見て、同様の解決策を試みましたが、私はまだ問題があります - 私はSwiftで働いていて、リストVCセルからのタップに基づいてセグを実行すると5〜30秒かかります。バーが選択された状態でそこにハングアップします。 segueが実行されるまでローディングインジケータを表示するには?

私はしかし、すべてこれはバーの色が選択したことはありませんでした

DispatchQueue.main.async { 
self.performSegue(withIdentifier: "toPodcastPlayer", sender: self) 
} 

でこれを高速化しようとしました。私はこれが起こるしようとしている場合はロード画面を表示する必要がありますが、時にロードするため、このfuncを持つ:

let loadView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300)) 
     loadView.backgroundColor = UIColor.green 
     loadView.center = CGPoint(x: screenSize.width/2, y: screenSize.height/2) 
     view.addSubview(loadView) 

そして、このタップ:

にfuncのtableView(_のtableView:のUITableView、didSelectRowAt indexPath:IndexPath ){

let selectedIndexPath : [IndexPath] = self.myTableView.indexPathsForSelectedRows! 

(self.rssListToLoad [selectedIndexPath [0] .row] .link = ""){ showLoading() self.performSegue(withIdentifier: "IF!toPodcastPlayer"、送信者:自己)

if segue.identifier == "toPodcastPlayer" { 
      // find index path for selected row 
      let selectedIndexPath : [IndexPath] = self.myTableView.indexPathsForSelectedRows! 

      // deselect the selected row 
      self.myTableView.deselectRow(at: selectedIndexPath[0], animated: true) 

      // create destination view controller 
      let destVc = segue.destination as! PodcastViewController 

      // set title for next screen 
      destVc.adTxtName = "Skylar's Ad" 
      destVc.urlStr = self.rssRecordList[selectedIndexPath[0].row].link 
      destVc.trackLabel = self.rssRecordList[selectedIndexPath[0].row].title 

それはまだ遅れています。ビューは既にストーリーボードに作成されており、次のVCにいくつかの変数を設定する必要があるため、これはわかりません。ここで何が間違っていますか?

私のsegueタイプはモーダルであり、非推奨ではありません。

+0

ローディングUIを追加することができますが、あなたがそう長く取っているかを確認する楽器でそれをプロファイリングしようとしたことがありますか? 'didSelectRowAtIndexPath()'への呼び出しはすでにメインスレッド上にあり、非同期呼び出しであってはいけません。ここでGCDを使う必要はありません。これらのプロパティを設定すると、 'PodcastViewController'で何が起こっていますか? –

+2

'performSegue'を呼び出すと、segueは本質的にコミットされます(' shouldPerformSegue'から 'false'を返すことで中止できます)。読み込みUIを表示する必要がある場合は、送り先ビューコントローラで行う必要があります。バックグラウンドスレッドでロードが非同期に実行されるようにする必要もあります。ロードが完了すると、ロードUIが削除され、ロードされたデータが表示されます。 – Paulw11

+0

私の問題は、私が目的地で何をしているかにかかわらず、 "ローディング"時間の遅れがリストVC上で発生し、次に目的地に少し出ます。私がリストビューで言ったようなロードを表示しようとすると、セグが実際に動作するまで表示されません – skyguy

答えて

0

あなたは、両方のVCでの負荷UIを表示する必要がある場合は、ウィンドウ

+0

例をコードで表示できますか?私はあなたがそれによって何を意味するのか分かりません。可能であれば、すべての読み込みが宛先で行われるようにしたい – skyguy

関連する問題