swift - 如何在ios程序开发中正确使用activity indicator(菊花等待图标)?
高洛峰
高洛峰 2017-04-18 09:42:22
0
2
695

我想达到的效果是这样的:
点击按钮

图片ImageView处的占位图消失

图片处开始显示菊花动画图标

旋转五秒中

菊花图标停止并消失

显示新的图片

部分代码如下:

class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    @IBAction func clickButton(_ sender: UIButton) {
        imageView.image = nil
        activityIndicator.startAnimating()
        sleep(5)
        activityIndicator.stopAnimating()
        imageView.image = UIImage(named: "cat")
    }
}

页面设计

实际效果是点击按钮之后,什么都没有发生,五秒钟之后换成了新的图片。
请问正确的写法应该是怎样的?

我的全部源码在这里:https://github.com/Stanley-Ti...
编程环境是Xcode8 Swift3

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(2)
Ty80

ベストではないかもしれませんが、2 つのアイデアを紹介します。お役に立てば幸いです。まず、sleep(5)はメインスレッドに書かれているので実際に菊がアニメーションし始めていますが、sleep(5)を実行するとメインスレッドがスリープしてしまい、runloopがタッチイベントを受け取らず更新されません。 UI インターフェイスなので、菊のアニメーション効果は表示されません。5 秒後にメインスレッドが起動されると、stopAnimating が直接実行され、新しい画像が表示されます。 GCD が提供する afterAPI を使用できます:

リーリー

スリープを引き続き使用したい場合は、サブスレッドを作成できますが、それはより面倒です:

リーリー
いいねを押す +0
巴扎黑

直感的には、睡眠には何か問題があると思われます(5)。
スリープは、CPU の処理操作を停止します。このように、これが有効になっている場合、UI は更新できず、何も起こりません。

遅延を処理するには、sleep() の代わりにdispatch_after() を使用します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!