簡體   English   中英

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做同樣的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 - >內容視圖 - > UIView

我需要在UIView下面添加帶動畫的新圖層(我希望UIView部分覆蓋帶動畫的新圖層)。 我怎么能這樣做?

我在UITableView圖層層次結構中沒有我的UIView圖層,所以我不能只使用addLayer:below:添加帶動畫的addLayer:below:依此類推。

我發現了這個問題。 我犯了一個簡單的錯誤。 我使用了self.layer.sublayers ,但我必須使用self.contentView.layer.sublayers這是我的錯誤。

當我發現這一點時,我能夠修復另一個問題並使用addLayer:below:

所以,如果你沒有看到一個必須在你對象的子層中的圖層,意味着你正在查看錯誤的地方,想想它可能在哪里而你會找到它,就像在UITableView中你需要工作一樣with contentView。

您可以添加myLayer下面UIView.layer通過設置

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM