2017-09-26 76 views
0

使用我有我的ImageView的地圖畫面子視圖,我想爲用戶當前位置的紅點,所以我用這個3行代碼創建我上面的ImageView的紅點刪除與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'

回答

1

您需要從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() 
     } 
    } 
}) 
+0

這是現在的工作謝謝! – Joey

+0

@Joey,np很樂意幫忙。 –

1

由於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) 
+0

這是現在的工作由於刪除了點! – Joey

1

您可以使用它的參考和「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() 
     }) 
+0

這是現在的工作謝謝! – Joey