簡體   English   中英

刪除與imageView一起使用的子視圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM