kev
kev

Reputation: 7832

How to remove CAGradientLayer from it's super layer

I add the layer to my view:

    [self.layer insertSublayer:_gradient above:_another.layer];

Then it doesn't seem to get removed with this, even if I call needsDisplay on the super layer:

        [_gradient removeFromSuperlayer];

How can I remove it?

Upvotes: 5

Views: 4046

Answers (2)

Lance Samaria
Lance Samaria

Reputation: 19592

I use these and then I check to make sure it's removed:

// 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)

Upvotes: 4

Donal
Donal

Reputation: 6415

You can set gradient nil after remove from superlayer.It worked for me.

[gradient removeFromSuperlayer];
 gradient =nil;

Upvotes: 3

Related Questions