Я пытаюсь анимировать преобразование на 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?
Это потому, что 'CALayer' не имеет свойства с именем' transform.scale.y' –
@ZeusAlexander Но это _is_ совершенно правильный путь для анимации. Снова прочитайте [документацию] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html#//apple_ref/doc/uid/TP40006082-SW1). –
Разве не странно бросать self.layer в слой градиента, а затем анимировать его потом? Я думал, что вы добавите свой собственный слой к нему и обратитесь к нему через ivar. Что произойдет, если вы установите точки останова в doAnimation и проверьте состояние? Что произойдет, если вы анимируете другое свойство? Примечание: явные анимации никогда не изменят фактическое значение, поэтому после анимации значение будет возвращаться в исходное состояние, это то, что вы видите? –