Swift:删除图层,而不删除UITableViewCell中的UIView
我有UITableViewCell和UIView
。 我做了一些CABasicAnimation并将它附加到新的CAShapeLayer,然后我将这个图层添加到我的UITableViewCell中的超级图层:
self.layer.addSublayer(myLayer!)
除了myLayer(和他的动画)显示在我的UIView
之上之外,一切都很好。 我希望那个标签低于UIView
。
我通过以相同的方式添加我的UIView
层来实现这一点:
self.layer.addSublayer(myViewLayer!)
在这种情况下,我的UIView
图层位于带有动画的CAShapeLayer的顶部。
但我有一个问题,我需要删除UIView层 – myViewLayer
因为它在滚动时违反了UIView的宽度。
当动画完成,我需要删除图层时,我可以毫无困难地删除CAShapeLayer – myLayer。
myLayer?.removeFromSuperlayer()
但是当我尝试对myViewLayer
做同样的myViewLayer
,我的UIView也被删除了。 但我不希望这样,我需要在屏幕和我的视图层次结构中使用我的UIView。
我不明白为什么,如果看看self.layer.sublayers
我看到这个(在添加图层之前):
[, ]
完成动画并删除myLayer后:
[, , ]
正如你所看到的,CAGradientLayer是我的UIView层。 所以,在我手动将其添加到子图层数组之前,我还没有它。 我如何删除它,而不删除我的UIView?
或者如何在UIView下面添加myLayer?
编辑
简而言之,我在动画之前有这个图层层次结构:
[ <- (I think this is UITableViewCell layer), <- (then, this is UITableViewCell content view layer)]
同时,我有这个视图层次结构:
UITableViewCell – >内容视图 – > UIView
我需要在UIView下面添加带动画的新图层(我希望UIView部分覆盖带动画的新图层)。 我怎么能这样做?
我在UITableView图层层次结构中没有我的UIView图层,所以我不能只使用addLayer:below:
添加带动画的addLayer:below:
依此类推。
我发现了问题。 我犯了一个简单的错误。 我使用了self.layer.sublayers
,但我必须使用self.contentView.layer.sublayers
这是我的错误。
当我发现这一点时,我能够修复另一个问题并使用addLayer:below:
。
因此,如果您没有看到必须位于对象子层中的图层,则意味着您在错误的位置查看它也可以找到它,就像在UITableView中一样,您需要使用contentView。
您可以通过设置在myLayer
下面添加myLayer
myLayer.zPosition = -1
下面的示例也可以解决您的问题。
第一解决方案
self.avPlayerLayer.zPosition = 0 // or -1 self.view.layer.addSublayer(self.avPlayerLayer)
或第二个解决方案
self.view.layer.insertSublayer(self.avPlayerLayer, below: self.button1.layer)