如何动画CAlayer的边界以逐步显示图像?

Sal*_*rtz 5 core-animation calayer ios

出于某些原因,我试图避免使用CAScrollLayer来执行此操作.我要追求的效果是逐步显示(从下到上)CALayer的内容(我之前加载的一个png).所以我想这样做:

    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];
Run Code Online (Sandbox Code Playgroud)

这个问题是你可以告诉图层的内容是用边界缩放的.我试图改变界限,但内容始终保持原始大小,因此有效地界限剪辑图像,并且当我增加bounds.height时,图像"显示"本身.

关于如何实现它或者我可能缺少什么的任何想法?

Sal*_*rtz 3

好吧,我让它工作了,但我基本上也必须更新图层的框架,以反映锚点的变化:

  [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];
Run Code Online (Sandbox Code Playgroud)