删除与imageView一起使用的子视图

时间:2017-09-26 18:13:43

标签: ios iphone swift cgrect swift4

我的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 delete:]:   无法识别的选择器发送到实例0x7f8bef712df0'

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

您需要从overlay中删除superView。你可以这样做:

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()
        }
    }
})

答案 2 :(得分:1)

您可以使用其引用和" removeFromSuperview()"删除点。方法

foreach(lib @COMPONENTS@)
    list(APPEND MYPROG_LIBRARIES @CMAKE_INSTALL_PREFIX@/lib/libmyprog_${lib}.so)
endforeach()