title: Resizing layers and its sublayers - CoreAnimation
body: <p>I have a CALayer A with one sublayer B
  I want A to be resized (to be shrank) so I add the animations to my layer A 
  but when I commit the animation sublayer B is not shrank. Its size remains(but its position changes as its superlayer bounds changes)
  How can I make my B layer to be resized along with A animation?</p>
  
  <p>This is what I wrote:</p>
  
  <pre><code> CABasicAnimation *fadeInAnimation; 
   fadeInAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
   fadeInAnimation.repeatCount = 1;
   fadeInAnimation.autoreverses = NO;
   fadeInAnimation.fromValue = [NSNumber numberWithFloat:1.0];
   fadeInAnimation.toValue = [NSNumber numberWithFloat:0.0];
  
   CABasicAnimation *shrinkAnimation;
   shrinkAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
   shrinkAnimation.repeatCount = 1;
   shrinkAnimation.autoreverses = NO;
   shrinkAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
   shrinkAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0, 0)];
  
   aniGroupOFF = [[CAAnimationGroup animation] retain];
   aniGroupOFF.delegate = self;
   aniGroupOFF.duration = ANI_DURATION;
   aniGroupOFF.animations = [NSArray arrayWithObjects:shrinkAnimation, fadeInAnimation, nil]; 
  </code></pre>
  
  <p>And the commit:</p>
  
  <pre><code>[self addAnimation:aniGroupOFF forKey:@"shrinkAndFade"];
  self.opacity = 0.0;
  </code></pre>
  
  <p><strong>Answer:</strong></p>
  
  <pre><code>CABasicAnimation *shrinkAnimation;
      shrinkAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; //use transform instead of bounds.size
      shrinkAnimation.repeatCount = 1;
      shrinkAnimation.autoreverses = NO;
      shrinkAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
      shrinkAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DScale(self.transform, 0.1, 0.1, 1.0)];
  
      aniGroupOFF = [[CAAnimationGroup animation] retain];
      aniGroupOFF.delegate = self;
      aniGroupOFF.duration = ANI_DURATION;
      aniGroupOFF.animations = [NSArray arrayWithObjects:shrinkAnimation, nil]; 
  </code></pre>