[英]Why does UIImageView.image need to be set using a DispatchQueue.main.async even on the main thread
試圖在點擊時在按鈕上設置圖像。 驗證 targetAction 處理程序總是在主線程上調用。
這不起作用
@objc func buttonTapped() {
self.mybutton.imageView?.image = MyObjcClass.getImageNamed("DarkVersion")
}
但這有效:
@objc func buttonTapped() {
DispatchQueue.main.async { // Does not work without this dispatch
self.mybutton.imageView?.image = MyObjcClass.getImageNamed("DarkVersion")
}
}
在調試器上,我可以看到兩者都在主線程上
來自視圖控制器的正確代碼應該是:
class ViewController: UIViewController {
@IBOutlet weak var myButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(buttonTapped))
myButton.addGestureRecognizer(tapGesture)
}
@objc func buttonTapped() {
self.myButton.setImage( MyObjcClass().getImageNamed("DarkVersion"), for: .normal)
}
}
哪個都行得通,不同之處在於setImage
是用來設置圖像的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.