我有 UITableViewCell,里面有 UIView
。
我做了一些 CABasicAnimation 并将它附加到新的 CAShapeLayer,然后我将这个层添加到我的 UITableViewCell 中的 super 层:
self.layer.addSublayer(myLayer!)
除了 myLayer(和他的动画)显示在我的 UIView
之上之外,一切都很好。
我希望该标签位于 UIView
下方。
我通过以相同的方式添加我的 UIView
层来实现此目的:
self.layer.addSublayer(myViewLayer!)
在这种情况下,我的 UIView
层位于带有动画的 CAShapeLayer 的顶部。
但是我有一个问题,我需要移除 UIView 层 - myViewLayer
因为它在滚动时违反了 UIView 的宽度。
当动画完成后,我需要移除层,我可以毫不费力地移除 CAShapeLayer - myLayer。
myLayer?.removeFromSuperlayer()
但是当我尝试对 myViewLayer
执行相同操作时,我的 UIView 也被删除了。但我不想这样,我需要在屏幕上和 View 层次结构中使用我的 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)]
同时,我有这个 View 层次结构:
UITableViewCell -> 内容 View -> UIView
我需要在 UIView 下面添加带有动画的新层(我希望 UIView 部分覆盖带有动画的新层)。我该怎么做?
我在 UITableView 层层次结构中没有我的 UIView 层,所以我不能只使用 addLayer:below:
等添加带有动画的层。
最佳答案
我发现了问题。我犯了一个简单的错误。我使用了 self.layer.sublayers
,但我必须使用 self.contentView.layer.sublayers
这是我的错误。
当我发现这一点时,我能够解决另一个问题并使用 addLayer:below:
。
因此,如果您没有看到必须位于对象的子层中的层,则意味着您看错了位置,想想它可能在其他地方,您会找到它,就像在 UITableView 中一样需要使用 contentView。
关于ios - Swift:删除层,而不删除 UITableViewCell 中的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564635/