For certain reasons, I'm trying to avoid using a CAScrollLayer to do this. The effect I'm going after is to progressively reveal (from bottom to top) a CALayer's content (a png I previously loaded in). So I thought about doing this:
    layer.anchorPoint = CGPointMake(.5, 1);
    CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"bounds.size.height"];
    a.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    a.fillMode = kCAFillModeBoth;
    a.removedOnCompletion = NO;
    a.duration = 1;
    a.fromValue = [NSNumber numberWithFloat:0.];
    a.toValue = [NSNumber numberWithFloat:layer.bounds.size.height];
    [layer addAnimation:a forKey:nil];
The problem with this is you can tell the layer's content is scaled with the bounds. I was trying for the bounds to change but the content to stay always the original size, so that effectively the bounds clip the image and as I increase bounds.height, the image "Reveals" itself.
Any ideas as to how to pull it off or what might I be missing?
Ok I got it to work, but I basically had to update the layer's frame too, to reflect the change in anchor point:
  [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
  layer.contentsGravity = kCAGravityTop;
  layer.masksToBounds = YES;
  layer.anchorPoint = CGPointMake(.5, 1);
  CGRect newFrame = layer.frame;
  newFrame.origin.y += newFrame.size.height / 2;
  layer.frame = newFrame;
  [CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
  a.toValue = [NSNumber numberWithFloat:layer.bounds.size.height];
  [layer addAnimation:a forKey:nil];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With