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

Swift: remove layer, without removing UIView in UITableViewCell

我有 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 的一层。所以,在我手动将它添加到 sublayers 数组之前我还没有。如何在不删除我的 UIView 的情况下删除它?

或者如何在 UIView 下面添加 myLayer?

编辑

简而言之,我在动画之前有这个图层层次结构:

[<CALayer: 0x7fd1f0d4fe40> <- (I think this is UITableViewCell layer), <CALayer: 0x7fd1f0ddc950> <- (then, this is UITableViewCell content view layer)]

同时,我有这个视图层次结构:

UITableViewCell -> 内容视图 -> UIView

我需要在 UIView 下面添加带有动画的新图层(我希望 UIView 部分覆盖带有动画的新图层)。我该怎么做?

我在 UITableView 图层层次结构中没有我的 UIView 图层,所以我不能只使用 addLayer:below: 等添加带有动画的图层。

您可以通过设置

UIView.layer 下面添加 myLayer

myLayer.zPosition = -1

我发现了问题。我犯了一个简单的错误。我用了self.layer.sublayers,但我必须用self.contentView.layer.sublayers这是我的错误。

当我发现它时,我能够解决另一个问题并使用 addLayer:below:

因此,如果您没有看到必须位于对象的子层中的层,则意味着您看错了地方,想想它可能在其他地方,您会找到它,例如UITableView 你需要配合 contentView 使用。

下面的示例也可以解决您的问题。

第一个解决方案:

self.avPlayerLayer.zPosition = 0 // or -1
self.view.layer.addSublayer(self.avPlayerLayer)

或第二个解决方案

self.view.layer.insertSublayer(self.avPlayerLayer, below: self.button1.layer)