2017-09-26 59 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