同时在不同层中使用多个 CAKeyframeAnimation

2024-07-04

现在有人知道如何使用 CAKeyframeAnimation 同时对多个图层进行动画处理吗? 每个层都有自己的 CAKeyframeAnimation 对象。看看下面的代码:

我有一个接收对象、创建 CAKeyframeAnimation 并将动画附加到其上的方法:

- (void)animateMovingObject:(CALayer*)obj
               fromPosition:(CGPoint)startPosition
                 toPosition:(CGPoint)endPosition
                   duration:(NSTimeInterval)duration {
    CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    pathAnimation.calculationMode = kCAAnimationPaced;
    //pathAnimation.fillMode = kkCAFillModeRemoved; // default 
    //pathAnimation.removedOnCompletion = YES; // default
    pathAnimation.duration = duration;

    // create an empty mutable path
    CGMutablePathRef curvedPath = CGPathCreateMutable();

    // set the starting point of the path
    CGPathMoveToPoint(curvedPath, NULL, startPosition.x, startPosition.y);

    CGPathAddCurveToPoint(curvedPath, NULL, 
                          startPosition.x, endPosition.y, 
                          startPosition.x, endPosition.y,
                          endPosition.x, endPosition.y);
    pathAnimation.path = curvedPath;
    [obj addAnimation:pathAnimation forKey:@"pathAnimation"];
    CGPathRelease(curvedPath);
}

现在,假设我在棋盘游戏中添加了 3 个层作为子层,并且我进行以下调用:

CALayer obj1 = ... // set up layer and add as sublayer
[self animateMovingObject:obj1
             fromPosition:CGPointMake(0.0, 0.0)
               toPosition:CGPointMake(100.0, 100.0)
                 duration:2.0];

CALayer obj2 = ... // set up layer and add as sublayer
[self animateMovingObject:obj2
             fromPosition:CGPointMake(0.0, 0.0)
               toPosition:CGPointMake(150.0, 100.0)
                 duration:2.0];

CALayer obj3 = ... // set up layer and add as sublayer
[self animateMovingObject:obj3
             fromPosition:CGPointMake(0.0, 0.0)
               toPosition:CGPointMake(200.0, 100.0)
                 duration:2.0];

通过这样做,我只能看到obj3从位置 (0.0, 0.0) 移动到 (200.0, 100.0)。 我缺少什么?我应该使用 NSOperationQueue/Threads 吗? 使用animationDidStart:CAKeyframeAnimation 的委托方法在这种情况下似乎没有用。

有任何想法吗?

提前致谢。


如果您想将一系列像这样的动画分组,以便保证它们同步,您可以将它们包装在 CATransaction 中:

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:2.0] forKey:kCATransactionAnimationDuration];     

// Do animations

[CATransaction commit];     

但是,我不太确定为什么您编写的代码没有为每一层触发正确的动画,即使它们没有同步。

请注意,通过设置removedOnCompletion设置为“是”,您的动画将运行,然后对象将在结束时跳回其起点。你可能希望它是“否”。

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

同时在不同层中使用多个 CAKeyframeAnimation 的相关文章

  • 快速判断文件是否为有效视频

    确定文件是否是可播放视频的最快方法是什么 我不关心它是否腐败 只关心它是否是哑剧类型should可以在 iPad 上播放 我玩过将文件推送到NSURL正如另一个问题所建议的 但每个文件可能需要 gt 1 秒 这太慢了 我目前正在查看文件扩展
  • 使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据

    我一直在学习如何使用 JSON 框架和 iOS 的 ASIHTTPRequest 来解析 JSON 我已经使用 twitter feed 以及通过社区教程的自定义 feed 进行了测试 一切都很顺利 然后我想我将使用 Microsoft O
  • PhoneGap.exec() 在 JS 和 Obj-C 之间传递对象

    我发现在 JS 和 Obj C 之间传递对象的唯一方法是使用 JSON stringify 编码 JS 对象并将 json 字符串传递给 PhoneGap exec PhoneGap exec Alarm update JSON strin
  • 将图像添加到 UITextView

    在我的应用程序中我有一个UITextView文本视图下方有一个按钮 用于将照片插入到文本视图中UITextView编辑时 我的要求是用户能够编辑其中的文本 并在需要时插入图像 类似于 StackOverflow 应用程序自己的UITextV
  • 如何在钥匙串中保存CFUUID

    我正在开发 iPhone 应用程序 应用程序访问一些 Web 服务 该服务应该识别设备 ID 由于 UDID 已被弃用 因此我需要调用 CFUUIDCreate 来生成我自己的 UUID 该 ID 是安全敏感的 我的所有网络通信都是加密的
  • 用于从accessoryButton 继续的索引路径

    我正在尝试使用情节提要 segue 来处理具有标准转换和详细信息披露按钮的 UITableView 之间的转换 在这里阅读了一些不同的帖子后 我以这种方式设置了我的项目 在 UITableViewCell 和 ViewController
  • 如何解析 iOS 4.0 iTunes 备份中的 Manifest.mbdb 文件

    在 iOS 4 0 中 Apple 重新设计了备份流程 iTunes 过去在 Manifest plist 文件中存储与备份文件关联的文件名列表 但在 iOS 4 0 中 它已将此信息移至 Manifest mbdb 您可以通过使用 iOS
  • iOS DidMoveToWindow 无限循环

    我正在研究 iOS NUI 框架源代码 我发现了以下代码行 但我不知道它是如何工作的 void override didMoveToWindow if self isNUIApplied self applyNUI self overrid
  • 如何在sqlite3中向整列插入相同的值?

    我需要将文本插入到表中的整个列中 列有 200 行 我需要将相同的值插入到同一列的整个 200 行中 我怎么能这样做呢 UPDATE Table SET Column value 只是没有 WHERE 子句
  • 如何在 Xcode 4 中使用 git 移动文件和文件夹?

    我熟悉 Xcode 中组和实际目录之间的差异 我总是在查找器中创建一个实际文件夹并将其拖到项目中 确保未选中 复制 当我移动文件夹时 我仅通过引用删除项目 将它们移动到查找器中 然后重新添加它们 现在我第一次使用git 在测试中发现 如果我
  • 相当于 iphone / iOS 的 [[NSWorkspace sharedWorkspace] runningApplications]?

    我已经研究苹果文档有一段时间了 但还没有找到与sharedWorkspace可以从中得到的对象NSWorkspace在应用程序套件中 基本上 我只是想要runningApplications方法从中 有人能指出我正确的方向吗 没有这样的方法
  • 仅从 GPS 获取 iPhone 上的位置 - 而不是 wifi 网络

    我正在创建一个使用位置的应用程序 一切都很顺利 除了一件事 当我回到家时 我的 iPhone 连接到我的本地 wifi 网络 而不是使用手机中的 GPS 获取我的位置 而是尝试通过找出我的 wifi 网络连接到的位置来获取位置 如果我关闭
  • 使用 Jenkins 构建 Unity 项目失败

    我正在尝试在 Mac OS 服务器上使用 Jenkins 构建 Unity 项目 但是当我尝试运行以下脚本时 Applications Unity Unity app Contents MacOS Unity quit batchmode
  • 如何给 UIButton 着色?

    我正在向我的 iPhone 用户界面添加自定义按钮 并希望它们具有 Apple 应用程序的玻璃外观 我有一个很好的默认玻璃图像 但我不想为我想要的每种色调 红色 绿色 蓝色等 都有一个单独的图像 有没有办法加载灰度PNG并将其调整为我想要的
  • 如何测试为 SKProductsRequest 设置不同的区域设置

    我正在 iPhone 应用程序中实现 IAP 并在沙盒环境中工作 我有我的代码设置要处理SKProducts由返回SKProductsRequest获取定价信息 我想测试检索不同区域设置中的价格值 例如欧元或日元 以测试我的格式化代码 我怎
  • YouTube 上传质量

    我正在使用 google 的 GData API 将视频从我的应用程序上传到 youtube 上传工作正常 但上传视频的质量仅为 360p 而原始视频的质量为 720p 这是否按预期工作 如果是这样 有什么方法可以解决此视频压缩问题 让我的
  • 当使用密码锁定屏幕时,iOS 应用程序无法在后台访问文件

    Good day 我有一个 IOS 消息应用程序 该应用程序将接收和发送的消息存储在 sqlite3 数据库中 并且该应用程序还会生成日志文件 这可能发生在前台或后台任务中 当在 IOS 设备上禁用密码时 一切工作正常 即使屏幕关闭且应用程
  • 如何在 Titanium 中向 TableView 部分追加一行?

    我正在使用 Titanium 开发 iPhone 应用程序 并且需要将一行附加到特定的表格视图部分 https developer appcelerator com apidoc mobile 1 0 Titanium UI TableVi
  • iPad html5 视频没有控件?

    这让我苦恼了一整天 但我不知道如何让 html5 视频播放器在没有本机控件的情况下工作 我不想要任何控件 但如果我不包含它们 视频似乎不想播放 即使我在下面添加一些 javascript 试图强制它播放 它也适用于 iPhone 和多个浏览
  • 不要在 iOS 上显示蜂窝数据警告

    如果用户决定不允许应用程序在每次尝试打开应用程序时访问蜂窝数据 则会显示一条警告 告诉他们蜂窝数据已关闭 SDK中有没有办法停止显示此消息或控制其显示的时间 位置 如果您在权限被撤销的情况下尝试访问互联网 系统将显示此消息 为了防止它出现

随机推荐

  • 如何获取对象类型

    在我的 Google Apps 脚本应用程序中 我看到以下错误 脚本已完成 但返回值不是受支持的返回类型 如何找出我返回的值的类型 我试过 typeof obj 但我得到的只是它是一个对象 仅当缓存为空并且从电子表格加载数据时才会发生此错误
  • React-native 应用程序在真实的 Android 设备上崩溃

    我正在使用react native 目前开始使用redux并创建了一个应用程序 但是当我在模拟器上运行该应用程序时 它工作正常 然后我通过 USB 将我的手机与 android 6 连接 它也可以工作 但在 Android 8 的其他设备中
  • 如何通过参数包传递引用?

    我有以下代码 include
  • iOS 版本的 Fragment

    谁能告诉我在 Xcode iPhone 中执行以下操作的最佳方法是什么 我有一个主导航屏幕 上面有一些按钮 当用户单击任何按钮时 他们将进入带有更多选项按钮的子导航屏幕 在这里 他们单击任意按钮 就会看到选项列表 单击任何列表选项都会向用户
  • 如何在R函数中使用switch语句?

    我想在 R 中的函数中使用以下语句switch 根据函数参数的值触发不同的计算 例如 在 Matlab 中 您可以通过编写来做到这一点 switch AA case 1 case 2 case 3 end 我找到了这个帖子 switch 语
  • Node Sass 缺少多个节点版本的绑定

    我正在使用 nvm 在节点版本之间切换 我的package json scripts dev rm rf public assets hot update js NODE ENV development webpack env dev pr
  • 在 JavaScript 中将数字转换为字符串,而不从数字中添加尾随零

    我尝试使用 toString 在 JavaScript 中将数字转换为字符串 但它会截断数字中无关紧要的零 举些例子 var n1 250 00 var n2 599 0 var n3 056 0 n1 toString yields 25
  • Laravel 使用 mysql 索引

    我有这个糟糕的代码 抱歉 它使用了太多 MySQL 查询 抱歉它太长了 return view dashboard homepage array DriversNumberApproved gt App Models Drivers whe
  • GWT UiBinder 不加载样式表

    我想使用 UiBinder 制作一个 GWT 小部件 所以我做了 UserPanel ui xml 像这样
  • IF 语句中间的 GO 命令

    我正在寻找有关创建表的信息 仅当它们在当前数据库中不存在时 以便能够在可能或可能没有它们的不同数据库中创建它 并发现这两个有用的主题 SQL Server 检查表是否存在 https stackoverflow com questions
  • 无法在 Debian lenny 上安装 python 模块“pycrypto”

    我尝试通过下载源代码并执行以下命令来安装 pycrypto 模块python setup py install 然后出现错误 running install running build running build py running bu
  • Rails 3 使用 NOT NULL 在 .where 条件之后排序

    我有一个显示最快用户的排名 users User find sort a b b finished at lt gt a created at 现在我必须添加一些代码以防止由于finished at beeing而出现错误nil直到用户完成
  • Android 嵌套片段问题“java.lang.IllegalStateException:活动已被销毁”

    您可能知道 Android 支持嵌套片段 也是通过 API 级别 17 的支持库实现的 所以基本上我正在尝试将嵌套片段添加到 ViewPager 的片段之一中 并熟悉这一新的好功能 在第一次应用程序启动时 一切都按预期工作 即我可以添加子片
  • Oracle ProC INSERT INTO VALUES ( (选择 ...) )

    在 Oracle 10g 上运行 Pro C 我希望在插入语句值子句中执行子查询 该 sql 查询完全有效 并且在 TOAD 中运行没有任何问题 但 Pro C 无法解析该查询 EXEC SQL INSERT INTO TARGET ATT
  • 获取矩阵中总和值最大的列

    比方说 import numpy as np f np matrix 1 2 3 4 5 6 是否可以从矩阵中检索具有最大列和的列数 如何 你可以写 gt gt gt f sum axis 0 argmax 1 所以专栏1求和到最大的值 为
  • 如何将默认的 binutils 转换为 binutils-2.26?

    当我命令 make 时 我收到如下错误 usr bin ld lib liblmi a LMInterface o unrecognized relocation 0x2a in section text 这个错误是由早期版本的 binut
  • 在 Swift 中捕获 [weak self] 的 Realm 通知

    在 Swift 的 Realm 文档中 有关以下内容的部分通知 https realm io docs swift latest notifications有这个示例代码 class ViewController UITableViewCo
  • 如何解决 CMake 错误“无法找到 MPI”

    我正在尝试在 48小时 全新的 ubuntu 20 04 3 安装上运行 CMakeLists txt 文件 我在运行时不断收到以下错误cmake Could NOT find MPI CXX missing MPI CXX WORKS C
  • 带有主机工具链的 buildroot 环境

    为了运行测试用例等 我想为主机系统编译我们的 buildroot 环境的一部分 usr bin gcc 等 我尝试在 usr 中指定 external toolchain 但失败了 有没有人设法做这样的事情 buildroot 手册说这是不
  • 同时在不同层中使用多个 CAKeyframeAnimation

    现在有人知道如何使用 CAKeyframeAnimation 同时对多个图层进行动画处理吗 每个层都有自己的 CAKeyframeAnimation 对象 看看下面的代码 我有一个接收对象 创建 CAKeyframeAnimation 并将