Problemen met CABasicAnimation-transformatie op CALayer

Ik probeer een transformatie op een CAGradientLayer te animeren, maar wat ik ook doe, ik kan de verandering niet laten gebeuren. Nadat deze code is uitgevoerd, is de laag nog steeds niet zichtbaar (d.w.z. scale.y is nog steeds 0.0f).

@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"];
}

}

Weet iemand waarom dit niet tot gevolg heeft dat de scale.y van de laag terug naar 1 wordt geanimeerd?

0
Ik heb dit nu geprobeerd met een sublaag, waarbij removedOnCompletion = NO zowel als de fillMode is ingesteld om door te sturen, levert hetzelfde resultaat op. Als ik de regel uithaal in de eerste methode waarbij ik de transformatie expliciet instel en vervolgens de animatie wijzig in schaal tot 0.0f, zie ik de laag correct krimpen. Het lijkt bijna alsof het handmatig instellen van de transformatie alle animaties op de laag uitschakelt.
toegevoegd de auteur nickbona, de bron
@ZeusAlexander Maar het is een perfect geldig sleutelpad voor animaties. Lees de documentatie opnieuw.
toegevoegd de auteur David Rönnqvist, de bron
Is het niet een beetje raar om self.layer naar een verlooplaag te casten en het daarna te animeren? Ik dacht dat je je eigen laag eraan zou toevoegen en ernaar zou verwijzen via een ivar. Wat gebeurt er als je onderbrekingen instelt in doAnimation en de staat inspecteert? Wat gebeurt er als je in plaats daarvan een andere eigenschap animeert? Opmerking: expliciete animaties zullen nooit de werkelijke waarde veranderen, dus na de animatie zal de waarde verschijnen om terug te keren naar de oorspronkelijke staat, is dit wat u ziet?
toegevoegd de auteur David Rönnqvist, de bron
Dat komt omdat CALayer geen eigenschap heeft met de naam transform.scale.y
toegevoegd de auteur Zeus Alexander, de bron

1 antwoord

Ik meen me te herinneren dat als een schaal van 0 wordt gebruikt, de laag tot nul wordt samengevouwen. Gebruik een .001-formaat in plaats van 0.

0
toegevoegd