[英]delete subview that use with imageView
我的ImageView中有一張地圖圖片,我希望用戶當前位置有一個紅點,所以我使用這3行代碼在ImageView上方創建紅點
let overlay: UIView = UIView(frame: CGRect(x: xcorIn * 0.822, y: ycorIn * 1.03, width: 5, height: 5))
overlay.backgroundColor = UIColor(red: 255/255, green: 0/255, blue: 0/255, alpha: 1)
imageView.addSubview(overlay)
我想要的是2秒后出現紅點,它必須消失
所以我嘗試這個
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
self.imageView.delete(overlay)
})
延遲功能似乎可以工作,但是
self.imageView.delete(overlay)
給我這個錯誤
由於未捕獲的異常“ NSInvalidArgumentException”而終止應用程序,原因:“-[UIImageView刪除:]:無法識別的選擇器已發送到實例0x7f8bef712df0”
之所以會出現此錯誤,是因為imageView中沒有delete
方法,但是有一個稱為removeFromSuperview
。
您將要從SuperView中刪除疊加層
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
overlay.removeFromSuperview()
})
要么:
self.overlay.hidden = true
或者,如果您對它的引用是強引用,請嘗試以下操作,請確保nil
該強引用:
overlay= nil
或不使用dispatchQueue
設置動畫:
UIView.animate(withDuration: 0.5, delay: 0.3, options: [.repeat, .curveEaseOut, .autoreverse], animations: {
self.overlay.alpha = 0
}, completion: nil)
您需要從superView
刪除overlay
。 您可以這樣做:
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
overlay.removeFromSuperview()
})
或者,如果您沒有全局覆蓋,則可以執行此操作。 將標記添加到疊加層,然后執行以下操作:
let overlay: UIView = UIView(frame: CGRect(x: 100, y: 100, width: 5, height: 5))
overlay.tag = 0
overlay.backgroundColor = UIColor(red: 255/255, green: 0/255, blue: 0/255, alpha: 1)
imageView.addSubview(overlay)
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
for subView in self.imageView.subviews {
if subView.tag == 0 {
subView.removeFromSuperview()
}
}
})
您可以通過使用其引用和“ removeFromSuperview()”方法來刪除該點
let overlay: UIView = UIView(frame: CGRect(x: xcorIn * 0.822, y: ycorIn * 1.03, width: 5, height: 5))
overlay.backgroundColor = UIColor(red: 255/255, green: 0/255, blue: 0/255, alpha: 1)
imageView.addSubview(overlay)
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
overlay.removeFromSuperview()
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.