Reputation: 7832
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
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
Reputation: 6415
You can set gradient nil after remove from superlayer.It worked for me.
[gradient removeFromSuperlayer];
gradient =nil;
Upvotes: 3