【问题标题】:How to remove CAGradientLayer from it's super layer如何从它的超级层中删除 CAGradientLayer
【发布时间】: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 过去一直对我有用。

标签: ios uiview calayer cagradientlayer


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多