我有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
做同样的事情时,我的UIView也被删除了。但我不希望这样,我需要在屏幕上和我的视图层次结构中使用我的UIView。
我不明白为什么,如果看self.layer.sublayers
我看到了这一点(在添加图层之前):
[<CALayer: 0x7fd1f0d4fe40>, <CALayer: 0x7fd1f0ddc950>]
完成动画并删除myLayer后:
[<CALayer: 0x7fd1f0d4fe40>, <CALayer: 0x7fd1f0ddc950>, <CAGradientLayer: 0x7fd1f0de3660>]
正如你所看到的,CAGradientLayer是我的UIView的一层。所以,在我手动将其添加到子图层数组之前,我还没有。我如何删除它,而不删除我的UIView?
或者如何在UIView下面添加myLayer?
修改
简单来说,我在动画之前有这个图层层次结构:
[<CALayer: 0x7fd1f0d4fe40> <- (I think this is UITableViewCell layer), <CALayer: 0x7fd1f0ddc950> <- (then, this is UITableViewCell content view layer)]
同时,我有这个视图层次结构:
UITableViewCell - &gt;内容视图 - &gt;的UIView
我需要在UIView下面添加带动画的新图层(我希望UIView部分覆盖带动画的新图层)。我怎么能这样做?
我在UITableView图层层次结构中没有我的UIView图层,因此我不能只使用addLayer:below:
添加动画图层等等。
答案 0 :(得分:5)
我发现了问题。我犯了一个简单的错误。我使用self.layer.sublayers
,但我必须使用self.contentView.layer.sublayers
这是我的错误。
当我发现这一点时,我能够修复另一个问题并使用addLayer:below:
。
因此,如果您没有看到必须位于对象子图层中的图层,则表示您正在查找错误的位置,请考虑其他位置,并且您会发现它,就像在UITableView中一样,你需要使用contentView。
答案 1 :(得分:3)
您可以通过设置
在myLayer
下面添加UIView.layer
myLayer.zPosition = -1
答案 2 :(得分:2)
以下示例也可以解决您的问题。
第一个解决方案:
self.avPlayerLayer.zPosition = 0 // or -1
self.view.layer.addSublayer(self.avPlayerLayer)
或第二种解决方案
self.view.layer.insertSublayer(self.avPlayerLayer, below: self.button1.layer)