2015-06-01 32 views
6

Mam UITableViewCell z UIView w nim. Zrobiłem trochę CABasicAnimation i dołączyć go do nowej CAShapeLayer, potem dodaję tej warstwy do warstwy Moja super w moim UITableViewCell:Swift: usuń warstwę, bez usuwania UIView w UITableViewCell

self.layer.addSublayer(myLayer!) 

wszyscy mili poza tym myLayer (i jego animacji) pokazano powyżej mojego UIView. Chcę, aby ta etykieta była poniżej UIView.

to osiągnąć dodając mój UIView warstwa w ten sam sposób:

self.layer.addSublayer(myViewLayer!) 

w tym przypadku moja UIView warstwa być na szczycie CAShapeLayer z animacją.

Ale mam problem, muszę usunąć warstwę UIView - myViewLayer, ponieważ narusza szerokość UIView podczas przewijania.

Po zakończeniu animacji i usunięciu warstw, mogę usunąć CAShapeLayer - myLayer bez problemów.

myLayer?.removeFromSuperlayer() 

Ale gdy próbuję zrobić to samo z myViewLayer, mój UIView usunięte. Ale nie chcę tego, potrzebuję mojego UIView na ekranie iw mojej hierarchii widoków.

Nie rozumiem dlaczego, jeśli patrzeć na self.layer.sublayers widzę to (przed dodaniem warstwy):

[<CALayer: 0x7fd1f0d4fe40>, <CALayer: 0x7fd1f0ddc950>] 

A po animacji zrobione i myLayer usuwa:

[<CALayer: 0x7fd1f0d4fe40>, <CALayer: 0x7fd1f0ddc950>, <CAGradientLayer: 0x7fd1f0de3660>] 

jak można zobacz CAGradientLayer jest warstwą mojego UIView. Tak więc, nie mam tego przed ręcznym dodaniem go do tablicy podwarstw. Jak mogę go usunąć, bez usuwania mojego UIView?

LUB w jaki sposób mogę dodać myLayer poniżej UIView?

EDIT

W kilku słowach mam tej hierarchii warstw przed animacji:

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

W tym samym czasie, mam ten widok hierarchię:

UITableViewCell -> Wyświetlanie treści - > UIView

Potrzebuję dodać nową warstwę z animacją, poniżej UIView (chcę, żeby UIView był częściowo zatoczką r tę nową warstwę z animacją). Jak mogę to zrobić?

Nie mam mojej warstwy UIView w hierarchii warstw UITableView, więc nie mogę po prostu dodać warstwy z animacją za pomocą addLayer:below: i tak dalej.

Odpowiedz

4

Znalazłem problem. Popełniłem prosty błąd. Użyłem self.layer.sublayers, ale muszę użyć self.contentView.layer.sublayers to jest mój błąd.

Gdy to stwierdziłem, udało mi się naprawić inne problemy i użyć addLayer:below:.

Tak więc, jeśli nie widzisz warstwy, która musi znajdować się w podwarstwie twojego obiektu, oznacza, że ​​patrzysz w niewłaściwym miejscu, zastanów się, gdzie to może być i znajdziesz to, jak w UITableView, musisz pracować z contentView.

3

Możesz dodać myLayer poniżej UIView.layer ustawiając

myLayer.zPosition = -1

+0

jak widać, nie mają '' self.layer.sublayers' UIView.layer' na początku, ale jeśli dodaj, mam kłopoty z resztą. –

+0

Na iOS każde UIView ma warstwę. Zatem self.view.layer jest warstwą twojego obiektu widoku. Początkowo nie będzie żadnych podwarstw. –

+0

Tak, masz rację, nie ma warstw, ale to self.view ma subview (moje UIView - które mają warstwę myViewLayer). I jeszcze raz o tym wspominam, ta warstwa UIView nie znalazła się w self.view.layer.sublayers. –

1

Poniższy przykład mógł również rozwiązać Twój problem.

Pierwsze rozwiązanie:

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

Albo drugie rozwiązanie

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

dzięki za odpowiedź, ale jak powiedziałem, problem był w złej warstwie "root". Zapomniałem o warstwie contentView i właśnie skorzystałem z self.view.layer. Chciałem usunąć to pytanie, ale są już 2 odpowiedzi (bez mojego), więc zostawiłem je na wypadek, gdyby ktoś zmierzył się z tym samym problemem. W każdym razie dzięki. –