Swift:删除图层,而不删除UITableViewCell中的UIView

时间:2015-06-01 01:56:01

标签: ios iphone swift uiview calayer

我有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:添加动画图层等等。

3 个答案:

答案 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)