出于某些原因,我试图避免使用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];
这个问题是你可以告诉图层的内容是用边界缩放的。我试图改变边界,但内容始终保持原始大小,以便有效地限制剪辑图像,并且当我增加bounds.height时,图像“显示”本身。
关于如何实现这一目标或者我可能缺少什么的任何想法?
答案 0 :(得分: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];
答案 1 :(得分:3)
“爸爸”有正确的答案。
您想要创建一个CAShapeLayer,并将其作为图层的掩码安装。
您创建一个只是一个矩形的CGPath,并将该路径安装到形状图层中。路径的内容确定掩码层的哪些区域出现。如果路径是图层中间的三角形,则只显示三角形。
然后创建一个动画来制作路径的动画。
要从底部显示图像,您需要在图层底部设置一个0高度矩形的路径,然后创建一个CAAnimation,其中toValue是同一个矩形,高度为要显示的完整图层。系统将生成一个动画,以扫描图像显示图像。
您可以使用相同的技术来实现各种酷炫效果,如谷仓门,百叶帘,“虹膜擦拭巾”等。
答案 2 :(得分:2)
如果更改了剪贴蒙版怎么办? (或使用遮罩层)。
答案 3 :(得分:0)
您可以在目标图像上放置另一张图像,然后像舞台幕布一样向上移动。