У меня есть UITableViewCell с UIView
. я сделал некоторые CABasicAnimation и прикрепить его к новому CAShapeLayer, затем добавить этот слой на мой супер слой в моей UITableViewCell:Swift: удалить слой, не удаляя UIView в 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. Итак, я не сделал этого, прежде чем вручную добавить его в массив подслоев. Как я могу удалить его, не удаляя мой UIView?
ИЛИ как я могу добавить myLayer под UIView?
EDIT
В нескольких словах у меня есть эта иерархия слоя перед тем анимации:
[<CALayer: 0x7fd1f0d4fe40> <- (I think this is UITableViewCell layer), <CALayer: 0x7fd1f0ddc950> <- (then, this is UITableViewCell content view layer)]
В то же время, у меня есть вид иерархии:
UITableViewCell -> Content View - > UIView
Мне нужно добавить новый слой с анимацией, ниже UIView (я хочу, чтобы UIView частично cove r что новый слой с анимацией). Как я могу это сделать?
У меня нет слоя UIView в иерархии уровней UITableView, поэтому я не могу просто добавить слой с анимацией, используя addLayer:below:
и так далее.
, как вы можете видеть, 'self.layer.sublayers' есть не' UIView.layer' в самом начале, но если я добавьте его, у меня все остальное. –
На iOS каждый UIView имеет слой. Итак, self.view.layer - это слой вашего объекта вида. Первоначально у него не будет подслоев. –
да, вы правы, у него нет слоев, но у этого self.view есть subview (мой UIView - у меня есть слой myViewLayer). И я упоминаю об этом еще раз, этот слой UIView не нашел в self.view.layer.sublayers. –