2013-09-30 1 views
2

У меня есть CALayer с изображением в нем, и он имеет несколько подслоев. Я хочу анимировать его, чтобы не иметь содержимого (без изображения), но продолжать показывать подслои. Этот код не работает:Как оживить CALayer, чтобы иметь пустое содержимое

CABasicAnimation *backgroundOut = [CABasicAnimation animationWithKeyPath:@"contents"]; 
    backgroundOut.toValue = [NSNull null]; 
    backgroundOut.fillMode = kCAFillModeForwards; 
    backgroundOut.removedOnCompletion = NO; 
    backgroundOut.duration = 3.0; 
    [_backgroundLayer addAnimation:backgroundOut forKey:@"contents"]; 

Вот единственный способ, которым я мог бы получить эту работу:

backgroundOut.toValue = (__bridge id)([UIImage imageNamed:@"blankImage"].CGImage); 

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

Каков правильный способ анимировать пустое содержимое?

+0

Вы пробовали backgroundOut.toValue = (id) nil? – tarmes

+0

Да, установка toValue на nil была чем-то, что я пробовал. Это не работает, потому что это фактически означает текущую ценность. – Skotch

ответ

1

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

UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0); 
    UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    CABasicAnimation *backgroundOut = [CABasicAnimation animationWithKeyPath:@"contents"]; 
    backgroundOut.toValue = (__bridge id)(blank.CGImage); 
    backgroundOut.fillMode = kCAFillModeForwards; 
    backgroundOut.removedOnCompletion = NO; 
    backgroundOut.duration = 3.0; 

    [_backgroundLayer addAnimation:backgroundOut forKey:@"contents"]; 
0

Другой подход может создать отдельный слой содержит изображение, которое является пэром ваших других слоев, но сразу за другими слоями (вы можете использовать zposition, чтобы поместить его за другие слои явно) - все это содержится в корневом слое. Затем вы можете анимировать альфа-слой слоя изображения для выцветания и не иметь накладных расходов на создание изображения на лету, и он не будет затем исчезать другими слоями.

+0

Да, это тоже сработает. Я надеялся уйти без лишнего слоя, но это звучит неплохо. – Skotch

 Смежные вопросы

  • Нет связанных вопросов^_^