¿Por qué la animation de CALayer funcionaría después de la vista de carga, pero no solo después de la initialization?

Tengo una vista personalizada (un pequeño indicador derivado de UIView con una animation de rotation) que tiene básicamente un ícono del corazón ( UIImageView ) en el centro y algunas bolas (otro UIImageView ) que gira alnetworkingedor de él usando la animation de capa. Aquí está mi código:

 -(void)performInitialization{ self.backgroundColor = [UIColor clearColor]; CGRect frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; [imageView setImage:[UIImage imageNamed:@"RedHeart"]]; balls = [[UIImageView alloc] initWithFrame:frame]; [balls setImage:[UIImage imageNamed:@"AngularBalls"]]; [self addSubview:imageView]; [self addSubview:balls]; [balls.layer beginRotating]; } 

… donde mi categoría en CALayer tiene:

 -(void)beginRotatingWithAngularVelocity:(float)velocity{ CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; rotationAnimation.fillMode = kCAFillModeForwards; rotationAnimation.removedOnCompletion = YES; rotationAnimation.repeatCount = 999999; rotationAnimation.duration = velocity; rotationAnimation.cumulative = YES; rotationAnimation.fromValue = [NSNumber numberWithFloat:0]; rotationAnimation.toValue = [NSNumber numberWithFloat:M_PI * 2]; [self addAnimation:rotationAnimation forKey:ROTATION_KEY]; } -(void)beginRotating{ [self beginRotatingWithAngularVelocity:0.7]; } 

performInitialization se performInitialization en el método init [ WithFrame|WithCoder ] de mi vista. Tengo una de estas vistas en la vista principal de mi guión gráfico y la vista se anima perfectamente. Si pongo varias instancias de mi vista personalizada en esa vista principal, todas ellas también se animan perfectamente. No hay problema si pongo mi vista en cualquier vista en ese storyboard. Sin embargo, cuando pongo esa misma vista en una vista desde una punta, no se animará. El mismo código, la misma configuration en IB (copy pegada para asegurarse de que todo es el mismo), pero la vista todavía está atascada en la vista inicial como si no hubiera ninguna animation conectada a la capa). ¿Por qué sucedería eso? ¿Cómo puedo hacer que la animation funcione en nibs?

ACTUALIZACIÓN: el problema parece estar relacionado con tener la animation en el inicializador de la vista. En algunas ocasiones, estoy animando justo dentro de la initialization, pero a veces, después de que se carga (por ejemplo, el usuario hace clic en algo y algo se está descargando). El problema parece ser consistente con el primer caso. Mi anterior falacia de estar sobre Storyboard vs. Nibs aparentemente es solo una coincidencia. He actualizado el título en consecuencia.

La initialization es muy temprana. didMoveToWindow esperar hasta que la vista esté en su interfaz (señalizada a la vista por didMoveToWindow . Hasta entonces, la vista no es parte del tree de renderizado (que es lo que hace el dibujo / animation de sus capas).