заменить CALayer - PullRequest
       16

заменить CALayer

0 голосов
/ 14 мая 2011

Я следую этому ответу , чтобы создать градиент, используя CALayer.Ключевая команда:

[view.layer insertSublayer:gradient atIndex:0];

Моя проблема в том, что я хотел бы регулярно обновлять градиент.Если я вызываю приведенный выше код повторно, то ничего не происходит, поскольку новые градиенты размещаются под старыми.См. этот ответ .

Мой вопрос таков: как один подслой заменяет другим.Я, наверное, должен позвонить replaceSublayer:with:.Но для этого мне нужна ссылка на старый градиент.Есть ли динамичный способ получить это.Что-то вроде [view.layer getSublayerAtIndex: 0]?Это самый простой способ просто сохранить ссылку на текущий градиент в viewcontroller?

Идеи?

Ответы [ 3 ]

4 голосов
/ 14 мая 2011
    [[view layer] replaceSublayer:[[[view layer] sublayers] objectAtIndex:0] with:gradient];
3 голосов
/ 14 мая 2011

Если вы хотите получить подслой, вы должны использовать этот метод:

[view.layer.sublayers objectAtIndex:0];

Затем вы можете заменить подслой с помощью

[view.layer replaceSublayer:[view.layer.sublayers objectAtIndex:0] with:yourNewGradient];
1 голос
/ 14 мая 2011

Помимо замены слоя, вы можете просто обновить существующие свойства CAGradientLayer colors, locations и другие свойства, чтобы изменить параметры отображаемого градиента.

...