ios - 如何为 UIView 或包含的 Controller 设置 mask 效果动画

标签 ios core-animation uiviewanimation

我们有一个 iOS,目前正在制作一个动画,将包含 View 上的 alpha 设置为 0。如下所示:

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

self.jtContained 是一个包含 Controller ,代表其容器 Controller 的下半部分;这会删除该 Controller 中的所有触摸功能。我们认为在这个包含的 Controller 上设置一个动画蒙版可能会更直观。这是我们想要的 5 分钟快速 Photoshop(即不是将其动画化,而是遮盖所包含的 Controller ):

enter image description here

是否有使用 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/

相关文章:

ios - 从 iOS 应用程序将电子邮件地址订阅到 MailChimp

ios - 动画期间无法最小化 subview 和主视图

ios - 从字符串中删除单个反斜杠

ios - 动画持续时间 :delay:options:animations:completion: not working (strangely)

objective-c - 如何进一步为贝塞尔路径上的图像制作动画

ios - CAScrollLayer 内的自滚动文本

ios - 如何根据后者的进度向已经运行的动画添加动画?

iOS - 垂直挤压图像

iOS AFNetworking 发布问题

ios - UIColorresolveClassMethod 未从选择器解析