我们有一个 iOS,目前正在制作一个动画,将包含 View 上的 alpha 设置为 0。如下所示:
[UIView animateWithDuration:1.0f animations:^{
self.jtContained.view.alpha = 1.0f;
}];
self.jtContained 是一个包含 Controller ,代表其容器 Controller 的下半部分;这会删除该 Controller 中的所有触摸功能。我们认为在这个包含的 Controller 上设置一个动画蒙版可能会更直观。这是我们想要的 5 分钟快速 Photoshop(即不是将其动画化,而是遮盖所包含的 Controller ):
是否有使用 UIView 动画或 Core Animation 的预构建方法来执行此操作?我什至想到只是迭代 View 并将像素设置为 0。抱歉,如果这是一个天真的问题,但我发现一些核心动画文档令人难以承受。
提前致谢
最佳答案
您想要做的是创建一个 CAShapeLayer 并使其成为 View 图层的 mask 层。然后将 CGPath 添加到形状图层,该图层是 View 的完整尺寸。 (您将创建一条从 View 的一个角开始并绕着角移动一圈的路径,从而创建一条矩形路径。)
当您想要遮挡 View 时,您可以将路径替换为另一个面积为零的矩形路径。 (第一条路径可能从 top_left、top_right、bottom_right、bottom_left、close 绕过拐角。空路径将沿着 top_left、top_right、top_left、top_right、close 走。)
核心动画将对定义形状图层的路径的更改进行动画处理,并且由于该路径是 View 图层的蒙版,因此蒙版会进行动画处理,从而隐藏您的 View 。
正确制作此动画的关键是起始路径和结束路径必须具有相同的点数。这就是为什么我描述创建一条 4 点路径和另一个空 4 点路径。当您这样做时,核心动画会为点的移动设置动画,您将获得所需的效果。如果您的起始路径和结束路径具有不同数量的控制点,或者控制点的顺序不同,“结果是未定义的”,通常根本不是您想要的。
您所问的是一个揭示动画,这与我上面描述的正好相反。
我在 github 上有一个名为 iOS-CAAnimation-group-demo 的演示项目(链接)展示了这个想法。查看“蒙版动画”按钮后面的代码。该代码创建了一个“时钟删除”动画,这比您想要执行的简单显示要复杂得多。
附注如果这篇文章对您有帮助,请记得将其标记为回答您的问题(并投票。)
关于ios - 如何为 UIView 或包含的 Controller 设置 mask 效果动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15032020/