如何从它的超级层中删除 CAGradientLayer
Posted
技术标签:
【中文标题】如何从它的超级层中删除 CAGradientLayer【英文标题】:How to remove CAGradientLayer from it's super layer 【发布时间】:2013-08-29 00:48:32 【问题描述】:我将图层添加到我的视图中:
[self.layer insertSublayer:_gradient above:_another.layer];
然后它似乎并没有被删除,即使我在超级层上调用 needsDisplay:
[_gradient removeFromSuperlayer];
我怎样才能删除它?
【问题讨论】:
removeFromSuperlayer
有效,不需要setNeedsDisplay
。还有什么不对劲的。当您调用removeFroMSuperlayer
时,您确定_gradient
仍然设置(非零)吗?
是的,我把它放在 _gradient 的 if 块中!= nil
即便如此,如果_gradient为nil,它也不会被移除
你能编辑和分享更多代码来向我们展示你在做什么吗?这应该有效。调用 removeFromSuperlayer 然后在 if(_gradient) 块中将层设置为 nil 过去一直对我有用。
【参考方案1】:
你可以在从超级层移除后设置渐变为零。它对我有用。
[gradient removeFromSuperlayer];
gradient =nil;
【讨论】:
【参考方案2】:我使用这些,然后检查以确保已将其删除:
// assuming there is only 1 gradientLayer this should print 1
print(parentView.layer.sublayers?.count as Any)
parentView.layer.sublayers?.removeAll() // remove everything from the parentView
gradientLayer.removeFromSuperlayer() // just to be safe
// check to see if it's in the parentView or not
if let _ = (parentView.layer.sublayers?.compactMap $0 as? CAGradientLayer )?.first
print("gradientLayer has not been removed")
else
print("yay it's removed")
// this should now print nil
print(parentView.layer.sublayers?.count as Any)
【讨论】:
以上是关于如何从它的超级层中删除 CAGradientLayer的主要内容,如果未能解决你的问题,请参考以下文章
从它的 datagridview 更新与数据库相对应的数据集