如何从它的超级层中删除 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 更新与数据库相对应的数据集

如何从它的项目 ViewControllers 访问 UITabBarController 的变量

如何从它的消息中分离异常类型

我可以从它的内存地址中获取一个 python 对象吗?

使用 KineticJS 从层中删除对象

不能包含 std::format