うるおいらんど

アプリ開発やサイト制作のメモとか。

【Swift】UIActivityIndicatorが表示されない場合の対処法

魚ライン
魚ライン

画像を保存したり削除したりするときに待ち時間が発生してしまうのでIndicatorを導入

スクリーンショット-2016-01-09-18.10.00

よくみるクルクルするやつです。

 

UIActivityIndicatorの設置方法は超簡単。

 

これだけで設置できちゃいます。

しかしIndicatorは常に表示しておくものでもありません。OnOffが必要なものです。

私はこれをメソッド化して必要なときに呼び出すようにしました。

Indicatorと「削除中」ラベルの表示を1つのメソッドに

 

使用するときは

Indicatorの表示 → 削除処理 → Indicatorを非表示(removeSuperviewで取り除く)

の順で使用しました。

 

Indicatorが表示されない・・・?

ここで適当にボタンを用意しておきます

それでこのボタンを押すとIndicatorを表示して画像の削除をする、という処理を書いていきます。

trashメソッドに削除処理を書いていますがそこは割愛

 

これだと何故かIndicatorが表示されません。。。。trashに待ち時間が発生するから〜なのだと思いますが。

別のところで同様に使用してみたら動いたり動かなかったり・・・ムムム

 

対処法

待ち時間のある処理を別スレッドで行うことで解決(こちらは非推奨。下記参照)

 

performSelector:withObject:afterDelayを使用することで解決〜

 

削除処理が完了したらremoveFromSuperviewでindicatorを取り除いています。

 

performSelectorよりdispatch_afterを使った方が良い?!

さてここまで書いておいてperformSelector系はメモリ管理で危うい所があるらしいです。

そしてperformSelectorの代わりにdispatch_afterを使う処理の書き方も紹介しておきます。(間違っているかもしれませんが・・・多分大丈夫なハズ・・・)

 

こんな感じになりました。

イマイチ使い方が分かっていない所もありますが・・・

何故遅延処理をしたら良いのか〜とかもちゃんと勉強しておきます(;;)

 

 

参考サイト

インジケーター: UIActivityIndicatorView が “表示されない / 消えない” ときは → 別スレッドで処理

メソッドの遅延実行はperformSelectorでなくdispatch_afterを使う

魚ライン
モッピー!お金がたまるポイントサイト
魚ライン

Swiftの記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

魚ライン 魚ライン