CAGradientLayer отправить обратно
У меня есть UIViewController
где я создаю фоновый градиент с
CAGradientLayer *gradient = [CAGradientLayer layer];
...
gradient.frame = frame;
self.backGradient = gradient;
[self.view.layer insertSublayer:gradient atIndex:0];
все отлично работает, позже я должен отправить подпредставление _selectionFrame
моего контроллера вид сзади:
(Мне часто нужно отправить _selectionFrame
назад и вперед, для анимации и рисования)
self
это viewController:
[self.view sendSubviewToBack:_selectionFrame];
Однако это отправляет _selectionFrame
за gradient
, Я хочу это чуть выше градиента, но ниже любого другого подпредставления. Проблема в том, что градиент не является представлением, поэтому я не могу использовать функции для градиента.
Я хотел бы позвонить [self.view sendSubviewToBack:gradient];
Но это не работает.
3 ответа
.layer имеет свойство sublayers, которое представляет собой простой массив. Таким образом, вы можете вставить в любой индекс, который вы хотите. Если вы хотите, чтобы ваш новый слой находился сзади, просто вставьте его в 0, вот так:
let newLayer = CALayer() // your layer that you want at the back
view.layer.insertSublayer(newLayer, at: 0)
Самое простое решение - не вставлять градиентный слой как подслой self.view.layer
, Вместо этого должно быть self.view.layer
, У подкласса UIView есть метод класса layerClass
это позволяет вам сказать, каким классом должен быть его слой.
Или это может быть слой какого-то другого подпредставления self.view
снова легко упорядочить с помощью того же метода класса layerClass
,
В противном случае вам придется использовать команды слоя, а не команды просмотра, чтобы упорядочить подслои self.view
, Это включает его подпредставления. Другими словами, если v
это подвид self.view
, затем v.layer
подслой self.view.layer
и вы можете упорядочить его среди подслоев, переставив массив подслоев.