2012-06-24 5 views
0

Я пытаюсь анимировать преобразование на CAGradientLayer, однако независимо от того, что я делаю, я не могу заставить изменения произойти. После запуска этого кода слой все еще не отображается (т. Е. Scale.y все равно 0.0f).Сложности с преобразованием CABasicAnimation на CALayer

@implementation NickView 

+(Class) layerClass { 
    return [CAGradientLayer class]; 
} 

- (void) didMoveToWindow {  
    self.backgroundColor = [UIColor clearColor]; 

    CAGradientLayer* gLayer = (CAGradientLayer*)self.layer; 

    [gLayer setColors: 
    [NSArray arrayWithObjects: 
     (id) [UIColor blackColor].CGColor, 
     (id) [UIColor redColor].CGColor, 
     (id) [UIColor blackColor].CGColor, 
     nil]]; 

    gLayer.transform = CATransform3DMakeScale(1.0, 0.0f, 1.0f); 
    [self performSelector:@selector(doAnimation) withObject:nil afterDelay:3.0f]; 
} 

- (void) doAnimation { 
    CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"]; 
    a.delegate = self; 
    a.duration = 5.0f; 
    a.toValue = [NSNumber numberWithFloat:1.0f]; 
    [self.layer addAnimation:a forKey:@"anim"]; 
} 

}

Кто-нибудь знает, почему это не приводит к scale.y слоя анимируемого обратно на 1?

+0

Это потому, что 'CALayer' не имеет свойства с именем' transform.scale.y' –

+0

@ZeusAlexander Но это _is_ совершенно правильный путь для анимации. Снова прочитайте [документацию] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html#//apple_ref/doc/uid/TP40006082-SW1). –

+0

Разве не странно бросать self.layer в слой градиента, а затем анимировать его потом? Я думал, что вы добавите свой собственный слой к нему и обратитесь к нему через ivar. Что произойдет, если вы установите точки останова в doAnimation и проверьте состояние? Что произойдет, если вы анимируете другое свойство? Примечание: явные анимации никогда не изменят фактическое значение, поэтому после анимации значение будет возвращаться в исходное состояние, это то, что вы видите? –

ответ

0

Кажется, я помню, что использование шкалы 0 приводит к обрушению слоя до нулевого размера. Попробуйте использовать размер .001 вместо 0.

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