如何为UIView或包含的控制器设置屏蔽效果的动画

时间:2013-02-22 19:43:35

标签: ios core-animation uiviewanimation

我们有一个iOS,我们目前正在做一个动画,将包含视图的alpha设置为0.像这样:

[UIView animateWithDuration:1.0f animations:^{
 self.jtContained.view.alpha = 1.0f;
}];

self.jtContained是一个包含控制器,代表其容器控制器的下半部分;这将删除此包含控制器中的所有触摸功能。我们认为在这个包含的控制器上实际上有一个动画蒙版可能更直观。这是一个我们想要的快速5分钟的Photoshop(即没有动画下来,而是掩盖了所包含的控制器):

enter image description here

是否有使用UIView动画或核心动画执行此操作的预建方法?我甚至想过迭代视图并将像素设置为0.抱歉,如果这是一个天真的问题,但我发现一些核心动画文档势不可挡。

事先提前

2 个答案:

答案 0 :(得分:2)

您要做的是创建一个CAShapeLayer并使其成为视图图层的遮罩层。然后将CGPath添加到形状图层,该图层是视图的完整大小。 (您将创建一条从视图的一角开始并沿圆角移动的路径,创建一条矩形路径。)

当您想要遮挡视图时,您将用另一个零区域的矩形路径替换该路径。 (第一条路径可能会从top_left,top_right,bottom_right,bottom_left,close转过来。空路径将是top_left,top_right,top_left,top_right,close。)

核心动画将动画更改为定义形状图层的路径,并且由于路径是视图图层的蒙版,因此蒙版动画化,隐藏视图。

正确制作此动画的关键是起始和结束路径必须具有相同的点数。这就是我描述创建4点路径和另一个EMPTY 4点路径的原因。当你这样做时,Core Animation会动画点的移动,你会得到你想要的效果。如果你的起始和结束路径有不同数量的控制点,或者控制点的顺序不同,“结果是不确定的”,通常根本不是你想要的。

你要问的是一个揭示动画,它只是与我上面所描述的相反。

我在github上有一个名为iOS-CAAnimation-group-demo(链接)的演示项目,显示了这个想法。查看“Mask Animation”按钮背后的代码。该代码创建了一个“时钟擦除”动画,这比你想要做的简单揭示要复杂得多。

P.S。如果这篇文章对您有所帮助,请记得将其标记为回答您的问题(并进行投票。)

答案 1 :(得分:2)

要详细说明以前的答案,可以通过设置用于遮罩的CALayer的框架来完成此操作。如果它只是一个矩形掩模,则不需要CGPath。我们可以重复使用我们要隐藏的视图的框架。例如:

BIGINT(2000)