Удаление подуровней всего CALAYER

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

Я пытался сделать что-то вроде этого:

for(CALayer *layer in rootLayer.sublayers)
{
    [layer removeFromSublayer];
}

но это не работало.

Кроме того, я пытался клонировать rootLayer.sublayers в отдельный NSArray, но результатом было то же.

Какие-либо идеи?

Править:

Я думал, что это работает теперь, но я был неправ. Это работает хорошее с CALayers, но это не работает с CATextLayers. Какие-либо идеи?

59
задан radex 31 July 2013 в 20:26
поделиться

3 ответа

Самый простой способ удалить все подслои из слоя - установить свойство подслоя в nil:

rootLayer.sublayers = nil;

125
ответ дан 24 November 2019 в 18:00
поделиться

Следующее должно работать:

for (CALayer *layer in [[rootLayer.sublayers copy] autorelease]) {
    [layer removeFromSuperlayer];
}
33
ответ дан 24 November 2019 в 18:00
поделиться

Как насчет использования обратного перечисления?

NSEnumerator *enumerator = [rootLayer.sublayers reverseObjectEnumerator];
for(CALayer *layer in enumerator) {
    [layer removeFromSuperlayer];
}

, потому что группа в подслоях изменяется во время перечисления, если порядок нормальный. Я хотел бы знать результат вышеуказанного кода.

2
ответ дан 24 November 2019 в 18:00
поделиться