使用 CABasicAnimation 对帧属性进行动画处理

2023-11-23

我正在尝试对此进行精确的“翻译”UIView基于块的动画代码:

[UIView animateWithDuration:0.5
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                               someView.frame = CGRect(0, 100, 200, 200);
                             }
                 completion:nil];

using CA基本动画反而。

我完全知道框架属性实际上是以下内容的组合position, bounds and 锚点底层的,如下所述:http://developer.apple.com/library/mac/#qa/qa1620/_index.html
...我已经做了一个这样的解决方案,使用两个CA基本动画一个设置position, 一个用于bounds它适用于该一种视图。

然而问题是我的视图中有子视图。 someView 有一个 type 的子视图UI滚动视图我在其中放置了另一个类型的子视图UI图像视图. UI滚动视图子视图有自动调整大小蒙版 set to UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleWidth UIView自动调整大小灵活高度。如果我使用的话,一切都会完美地进行UIView基于块的版本,但是当我尝试使用CA基本动画子视图开始表现异常(即将大小调整为不正确的宽度)。所以它看起来自动调整大小蒙版使用时无法正常工作CA基本动画。我还注意到子视图没有收到调用设置框架:,尽管在更改图层位置和边界后,父视图的框架属性确实会发生变化。

这就是为什么我想知道复制的正确代码是什么CA基本动画当一个人使用 UIView 时会发生什么动画持续时间方法。


我完全知道框架属性实际上是底层的位置、边界和锚点的组合

很好,但重要的是要意识到frame不是图层的可动画属性。如果您想使用 CABasicAnimation 进行动画处理,则必须使用可对图层进行动画处理的属性。 CALayer 文档将每个此类属性明确标记为“可动画化”。使用的想法bounds and position是正确的。

因此,这段代码基本上完成了您之前所做的事情:

[CATransaction setDisableActions:YES];
// set final bounds and position
v.layer.bounds = CGRectMake(0,0,200,200);
v.layer.position = CGPointMake(100,200);

// cause those changes to be animated
CABasicAnimation* a1 = [CABasicAnimation animationWithKeyPath:@"bounds"];
a1.duration = 0.5;
CABasicAnimation* a2 = [CABasicAnimation animationWithKeyPath:@"position"];
a2.duration = 0.5;
[v.layer addAnimation:a1 forKey:nil];
[v.layer addAnimation:a2 forKey:nil];

但是,该代码对任何子层的大小没有影响v.layer。 (子视图v由子层绘制v.layer.) 不幸的是,这就是您要解决的问题。我相信,通过下降到图层级别并直接显式核心动画,您已经放弃了自动调整大小,这发生在视图级别。因此,您还需要为子图层设置动画。这就是视图动画为您所做的事情。

这是 iOS 的一个不幸的功能。 Mac OS X 具有图层约束 (CAConstraint),它在图层级别执行自动调整大小在视图级别(以及其他级别)执行的操作。但 iOS 缺少这个功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CABasicAnimation 对帧属性进行动画处理 的相关文章

随机推荐

  • 使用 unix 实用程序删除连续的重复行

    这表面上听起来很简单 但实际上要复杂一些 我想使用 unix 实用程序删除连续的重复项 保留原始内容 但是 我还想保留在原始内容之后不立即出现的其他重复内容 例如 如果我们有以下几行 O B O B C D T V O B 我希望输出是 O
  • fastcgi 多路复用?

    我正在实现 fastcgi 应用程序 在阅读 fastCGI 规范后 我发现了一个名为 请求多路复用 的功能 它让我想起 Adob e RTMP 多路复用协议是专有且封闭的时代 据我了解 多路复用可以减少创建与 FCGI 客户端的新连接的开
  • 如何找到具有项目值的列表框项目索引?

    my MessageBox Show listbox Items 0 ToString is abber 如何使用 abber 找到列表框项目索引 0 With listbox Items IndexOf abber That is int
  • 有没有办法知道 C++ 中自动包含哪些标头

    这是一个后续问题this上面说 在 C 中 与 C 不同 标准标头允许 include 其他标准标头 有什么方法可以知道自动包含哪些标头 因为可能很难猜测哪些标头中定义了哪些符号 动机 我的作业在我的计算机上编译并正常工作 但 TA 告诉我
  • 如何从异步调用返回响应?

    如何从函数返回响应 结果foo发出异步请求 我试图从回调中返回值 并将结果分配给函数内的局部变量并返回该变量 但这些方法都没有实际返回响应 它们都返回undefined或者无论变量的初始值如何result is 接受回调的异步函数示例 使用
  • 闪亮的反应性

    我有一个带有大量参数的应用程序 每个参数都有很多粒度 这使得找到所需的参数变得很痛苦 这会导致反应部分不断计算 从而减慢速度 我添加了一个提交按钮 它解决了上述问题 但随后又遇到了另一个问题 下面是我构建的框架的简单复制 参数输入接受1到1
  • PowerShell函数参数语法

    为什么要这样做写主机函数外部的工作方式与函数内部的工作方式不同吗 似乎参数变量以某种方式与我声明的内容发生了变化 function a string svr string usr x svr usr Write Host x svr abc
  • 查询对象实现示例[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 任何人都可以推荐有关 C Java 中查询对象模式使用的优秀教程 实现或示例代码吗 我用谷歌没有找到太多 由于 LINQ 几乎无处不在 您确定需要重
  • cmake的默认构建配置是什么

    In this答案 它说 Debug 是默认的 cmake 构建配置 但我有不同的观察 我在 CMakeLists txt 中有以下内容 可以根据当前的构建配置选择库的调试和发布版本 target link libraries MyApp
  • 找不到有角度的自定义管道

    在我的应用程序中 我需要全局自定义管道 我尝试按照以下方式实现它角管但我总是看到这个错误 模板解析错误 找不到管道 formatdate 格式化日期 管道 import Pipe PipeTransform from angular cor
  • Java USSD 菜单树生成 - 如何

    我想使用 Java 生成一个基于树的菜单 该菜单将显示在 USSD 浏览器上 每个节点可能有子节点 以叶节点结尾 我还必须维护访问此菜单的每个用户的状态 例如他在菜单上的当前位置 以方便导航 关于如何实现树生成和状态管理有什么想法吗 我假设
  • 在 OSX 上安装 Jekyll 需要 GCC 吗?

    Jekyll 安装 says GCC 和 Make 如果您的系统没有安装它们 您可以通过在系统的命令行界面中运行 gcc v 和 make v 来检查 我正在使用 macOS Sierra 我已经安装了 Xcode 的命令行工具 CLT 和
  • 如何向 C++ 程序添加定时延迟?

    我正在尝试在 C 程序中添加定时延迟 并且想知道是否有人对我可以尝试的内容或我可以查看的信息有任何建议 我希望我有更多关于如何实现这个定时延迟的细节 但是在我有更多关于如何添加定时延迟的信息之前 我不确定我应该如何尝试实现这个 C 11 的
  • 从程序集中删除签名

    我在 Visual Studio 中打开了一个项目 它恰好是 Enyim Caching 该程序集希望延迟签署 事实上 它如此强烈地希望延迟签名 以至于我无法强制 Visual Studio 编译它without延迟签字 我已取消选中 Vi
  • PHP 错误:“zip 扩展名和解压缩命令均丢失,正在跳过。”

    当我运行composer update我收到此错误消息 Loading composer repositories with package information Updating dependencies including requi
  • 如何在 woocommerce 中获取当前用户的所有订单

    我想获取当前用户在插件函数中发出的所有订单 我正在使用这个 function get all orders customer orders get posts apply filters woocommerce my account my
  • 如何将 ng-repeat 放入 ng-repeat 中 n 次

    I have a JSON object having nested nodes which can go on for any number of level I need to display the content of a node
  • 反射会带来什么风险? (中等信任度)

    中等信任托管环境中缺乏反思似乎造成很多问题适用于许多流行的 Web 应用程序 Why is 反射权限默认情况下禁用中等信任 反射在共享托管环境中会带来什么风险 随机参考 参见MSDN 如何在 ASP NET 2 0 中使用中等信任 反射允许
  • Django <-> SQL Server 2005,文本编码问题

    我正在尝试使用以下方法在 MS SQL Server 2005 上存储 Django 数据 http code google com p django pyodbc pyodbc FreeTDS 只要我存储由 ASCII 字符组成的字符串
  • 使用 CABasicAnimation 对帧属性进行动画处理

    我正在尝试对此进行精确的 翻译 UIView基于块的动画代码 UIView animateWithDuration 0 5 delay 0 0 options UIViewAnimationOptionCurveEaseInOut anim