アプリで ECSlidingViewController を使用しています。UITableView を含む View Controller があり、UIRefreshControl を使用して長いタスクを実行します。プルダウンして更新すると、更新コントロールは正常にアニメーションを開始しますが、トップ ビュー コントローラー (この場合はメイン メニュー) に移動してからビュー コントローラーに戻ると、refreshControl はタスクが完了するまで完全にフリーズします。
より明確にするために、これらは私が従う手順です:
- tableView をプルダウンして更新します。
次のような長いタスクがバックグラウンドで実行されます。
- (void)pulledToRefresh:(UIRefreshControl *)refreshControl { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ long long a = 0; for (long long i = 0; i < 100000000000; i++) { a++; } dispatch_async(dispatch_get_main_queue(), ^{ [refreshControl endRefreshing]; }); }); }
更新コントロールがアニメーション化されている間、現在のビュー コントローラーを右にスライドさせて(メソッドやそれらのいずれも呼び出しません
resetTopView:animated:
。パン ジェスチャを行います)、メイン メニューを表示します。これが発生すると、更新コントロールが突然アニメーションを停止します (フリーズします)。最初に使用していたView Controllerに戻りますが、フリーズしたままです。
タスクが完了し、更新コントロールが自然に更新を終了し、素敵なアニメーションで tableView から削除されます。
なぜこれが起こるのか分かりますか?