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

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

图片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

최고는 아니지만 두 가지 아이디어를 알려 드리겠습니다. 우선 메인스레드에 sleep(5)이 작성되어 있어서 국화는 실제로 애니메이션을 시작했지만, sleep(5)가 실행되면 메인스레드는 sleep을 하게 되고, runloop는 터치이벤트를 받지 않고 업데이트를 하지 않게 됩니다. UI 인터페이스에서는 국화의 애니메이션 효과를 볼 수 없습니다. 5초 후에 메인 스레드가 활성화되면 stopAnimating이 직접 실행된 후 새로운 그림이 표시됩니다. GCD에서 제공하는 afterAPI를 사용할 수 있습니다.

으아악

그래도 수면을 계속 사용하고 싶다면 하위 스레드를 열 수 있지만 더 번거롭습니다.

으아악
巴扎黑

직관, 수면에는 뭔가 문제가 있습니다(5).
sleep은 CPU의 작업 처리를 중지합니다. 이런 방식으로 활성화되면 UI를 업데이트할 수 없으며 아무 일도 일어나지 않습니다.

지연을 처리하려면 sleep()을 대체하기 위해 dispatch_after()를 사용하세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!