我怎样才能让CAlayer的边界动画逐步显示图像?
由于某些原因,我试图避免使用CAScrollLayer来做到这一点。我所追求的效果是逐步揭示(从底部到顶部)一个CALayer的内容(我之前加载过的一个PNG)。所以我想这样做:我怎样才能让CAlayer的边界动画逐步显示图像?
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];
这个问题是你可以告诉图层的内容与边界缩放。我试图改变边界,但内容始终保持原始大小,以便边界能够有效地剪切图像,并随着边界的增加而变高。图像“显示”本身。
任何想法如何将其关闭或我可能会丢失什么?
好,我得到它的工作,但我基本上太更新层的框架,以反映锚点的变化:
[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];
您可以在目标图像上放置另一个图像并将其像舞台幕一样移动。
如果您更改了剪贴蒙版呢? (或使用遮罩层)。
“爸爸”有正确的答案。
您想创建一个CAShapeLayer,并将其作为蒙版安装在您的图层上。
创建一个只是矩形的CGPath并将该路径安装到形状图层中。路径的内容决定了蒙版图层的哪些区域出现。如果路径是图层中间的三角形,则只会出现三角形。
然后,您创建一个动画动画路径。
要从底部显示图像,您需要在图层底部设置一个0高度矩形的路径,然后创建一个CAAnimation,其中的toValue是具有高度的同一个矩形你想透露的全层图层。该系统会生成一个动画,在扫描中显示图像。
您可以使用同样的技术来实现各种很酷的效果,像谷仓门,百叶窗,“虹膜湿巾”等
感谢您的详细描述 – 2015-09-10 09:26:34
我知道,但因为在一个以上的效率水平(可以有这些影响中的一小部分会立即发生,我需要自己处理CALayers)我决定不这样做。现在我正在试验contentRect,并且我能够把它弄到几乎正确。唯一的问题是内容rect动画时,我也得到了一种在图层内绘制的笔画轨迹。 – SaldaVonSchwartz 2012-04-26 19:21:08
contentRect的文档说“如果请求单位矩形外的像素,内容图像的边缘像素将向外扩展”所以我想这就是为什么我得到笔画效果 – SaldaVonSchwartz 2012-04-26 19:30:29