2015-06-01 118 views
6

我有UITableViewCell和UIView。 我做了一些CABasicAnimation並將其連接到新的CAShapeLayer,然後我在UITableViewCell中添加這一層我超層:Swift:移除圖層,不需要移除UITableViewCell中的UIView

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?

或者如何添加MyLayer下面的UIView?

編輯

在幾句話我的動畫之前有這層層次:

[<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:等等來添加動畫層。

回答

4

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

當我發現時,我能夠修復其他問題並使用addLayer:below:。所以,如果你沒有看到一個圖層必須在你的對象的子圖層中,這意味着你在錯誤的地方尋找它認爲它可以在哪裏,你會發現它,就像在UITableView中你需要工作與contentView。

3

您可以通過設置

myLayer添加myLayer下面UIView.layer。zPosition = -1

+0

,你可以看到,'self.layer.sublayers'沒有'UIView.layer'在開始,但如果我添加它我有休息的煩惱。 –

+0

在iOS上,每個UIView都有一個圖層。所以self.view.layer是你的視圖對象的圖層。最初,它不會有子層。 –

+0

是的你是對的,它沒有圖層,但這self.view有子視圖(我的UIView - 有層myViewLayer)。我再次提到這一點,這個UIView層沒有在self.view.layer.sublayers中找到。 –

1

下面的示例也可以解決您的問題。

解決方案一:

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

或第二的解決方案

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

感謝您的回答,但正如我所說問題出在錯誤的「根」層。我忘了關於contentView層,只是使用self.view.layer。我想刪除這個問題,但已經有2個答案(沒有我自己的答案),所以我留下了它,以防有人會面臨同樣的問題。不管怎樣,謝謝。 –