我的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'
答案 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()