如何在单个动画中缩放和旋转视图

2024-03-17

我试图通过使其从屏幕中心出现同时增长到其完整尺寸来呈现视图,同时以 3D 方式围绕 x 轴旋转它。当我创建视图时,我对其应用变换以确保它收缩并旋转以开始(它太小,实际上不可见),然后我尝试使用 CATransform3D,如下所示:

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
CATransform3D transform = CATransform3DRotate(view.layer.transform, M_PI, 1.0, 0, 0);
transform = CATransform3DScale(transform, 1000, 1000, 1000);
transform.m34 = 1.0 / 10000;
[anim setToValue:[NSValue valueWithCATransform3D:transform]];
[anim setDuration:0.75f];
anim.removedOnCompletion = NO;
anim.delegate = self;
[view.layer addAnimation:anim forKey:@"grow"];

然而这个动画并没有改变图层的实际变换,所以我也这样做:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
    view.layer.transform = CATransform3DIdentity;
    [view.layer removeAllAnimations];
}

设置动画停止后的变换。然而,这有时会导致动画结束时出现明显的闪烁。我相信这是因为动画在动画阶段结束时将原始变换放回原处,并且这种情况在调用animationDidStop 例程之前发生。有一个更好的方法吗?

编辑:将其合并到 UIView 动画中,这样您就可以直接设置变换:

view.layer.transform = CATransform3DScale(CATransform3DIdentity, 0.001, 0.001, 0.001);
view.layer.transform = CATransform3DRotate(view.layer.transform, M_PI, 1.0, 0.0, 0.0);

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.75];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
CATransform3D transform = CATransform3DRotate(view.layer.transform, M_PI, 1.0, 0, 0);
transform = CATransform3DScale(rotationTransform, 1000, 1000, 1000);
transform.m34 = 1.0 / -500;
view.layer.transform = transform;
[UIView commitAnimations];

但是,我仍然想知道我最初的查询的答案,即如何使用 CAAnimation 成功实现相同的目标,因为这通常为动画提供了更大的灵活性。

Edit2:看来我原来的问题(如何解决 CAAnimation 的问题)的答案实际上非常简单。为了保持最终状态(并消除闪烁),我只需要添加以下行:

anim.fillMode = kCAFillModeForwards;

这可能对您有帮助:

  animationView.layer.anchorPoint = CGPointMake(0.0f, 0.0f);

  animationView.center = CGPointMake(0, 
                                  (animationView.center.y - 
                                   (animationView.bounds.size.height/2.0f)));

  // start the Page Open
  [UIView beginAnimations:@"Animation" context:nil];
  [UIView setAnimationDuration:2.0];     
  // set angle as per requirement
  [animationView.layer setValue:[NSNumber numberWithInt:180] 
                  forKeyPath:@"transform.rotation.x"];

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

如何在单个动画中缩放和旋转视图 的相关文章

  • 强制向扬声器发出音频警报

    我有一个小应用程序 在此应用程序中 扬声器每隔我设置的特定时间就会发出噪音 现在 我希望即使设备中插入了耳机插孔 它也能通过内置扬声器发出噪音 我怎样才能做到这一点 您可以尝试以下代码在扬声器上播放代码 另请检查this http uiha
  • 如何链接到 App Store (iTunes) 中我的应用程序?

    我希望我的应用程序中有一项功能 用户可以使用我的应用程序的 iTunes URL 向朋友发送电子邮件 这怎么可能 Thanks 您可以创建更简单 更合乎逻辑的 App Store 链接 而不是通常看到的又长又混乱的 URL iTunes S
  • 如何让 UITableview 在重新加载时转到页面顶部?

    当我调用以下命令时重新加载表数据时 我试图让 UITableview 转到页面顶部 void pickerView UIPickerView pickerView didSelectRow NSInteger row inComponent
  • 快速布尔运算

    这实在令人困惑 有人有什么想法吗 let viewHasMovedToRight false initially I want this to be false then func moveViewToRight sender UIButt
  • 苹果游戏中心 API

    我无法找到包含 Game Center Reference 的 GameKit api Apple Game Center 是 iOS 上的一个新社交网络平台 其描述如下 iOS4 中的新增功能 1 GameKit iOS 参考在这里 ht
  • 无法在 iOS UIWebView 中加载完整的 Facebook 评论插件

    我有一个简单的ViewController在 UIWebView 中加载 FB 评论插件 implementation ViewController void viewDidLoad super viewDidLoad UIWebView
  • onScale 和 Canvas - 缩放图像后如何调整原点?

    我有一个非常简单的测试应用程序 带有自定义组件MyView java https github com afarber android newbie blob master TestScroll src de afarber testscr
  • 如何在 UI 视图上显示两个表

    我想在 UI 视图上使用和显示两个表 请让我知道如何执行此操作 任何相同的代码也将受到赞赏 谢谢 桑迪普 将 2 个 UITableView 添加到 IB 中的视图中 并将它们连接到文件所有者中的 2 个不同的出口 或者简单地分配不同的标签
  • 将 UIImageView 置于 UIScrollView 内而不使用 contentInset?

    我一直无法找到我遇到的这个问题的答案 我在 UIScrollView 中有一个 UIImageView 我希望将其内容垂直居中 目前 我能够做到这一点的唯一方法是根据 UIImageView 大小的高度设置滚动视图的 contentInse
  • 通过 iBeacon 监控和测距与 CoreBluetooth scanForPeripheralsWithServices 检测信标

    对于 iOS 对想要扫描 BLE 信标 外设的应用程序施加的限制 存在很多困惑 在阅读了几个博客和 Stack Overflow 答案后 我想看看我是否正确理解了所有问题 如果有什么理解错误或者遗漏的地方请指正 我仅指 iOS 7 及更高版
  • 在 UICollectionView 下面插入子视图

    当我在 UICollectionView 下方添加子视图时 有时子视图会显示在 UICollectionView 单元格上方 这是子视图插入代码 self collectionView insertSubview self garmentV
  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • 使用 FFT 执行音频分析

    我已经被这个问题困扰好几天了 并且浏览了几乎所有相关的 StackOverflow 页面 通过这次活动 我现在对 FFT 是什么及其工作原理有了更深入的了解 尽管如此 我在将其实现到我的应用程序中时遇到了极大的困难 简而言之 我想做的是为我
  • 如何为移动应用程序创建无密码登录

    我有兴趣在移动应用程序和 API 之间构建某种无密码登录 假设我可以控制两者 动机是必须登录对用户来说非常烦人并且存在安全风险 例如 用户将重复使用现有密码 我希望用户能够立即开始使用该应用程序 我想知道是否有一些可行的技术 例如 在移动设
  • Firebase Analytics DebugView 收集的事件数据不完整

    我正在将事件发送到 Firebase Analytics 并发现 DebugView 中缺少部分事件参数 下面是发送到 Firebase 的两个相同事件 我检查了 Xcode 调试控制台中是否存在所有参数 缺失的参数似乎是随机的 有时根本没
  • Swift Firebase - 如何在使用 queryOrdered(byChild: ).queryEqual(toValue: ) 时获取所有 k/v

    root reviews postABC postId reviewXYZ I want everything under this reviewUID buyerUID 01010 text fast shipping responseT
  • JavaFX 如何在不改变线宽的情况下缩放路径的坐标?

    我目前正在制作具有缩放和平移功能的阶梯折线图 由于我需要处理的数据量非常大 因此每次调用layoutPlotChildren 时 我无法重新创建步骤线的整个路径 所以我的想法是创建一次路径元素 然后在缩放和平移事件时对其进行转换 到目前为止
  • 从 Firestore Swift 获取文档 ID

    我正在尝试从中获取文档IDFirestore通过执行这样的查询 func updateStatusInFirestore let orderid saleOrder first Orderid print orderid let setti
  • 启动使用 Simperium 的应用程序时 objectFromJSONString 崩溃

    我得到了一个JSON当我尝试启动使用 Simperium 框架的应用程序时崩溃 NSCFString objectFromJSONString unrecognized selector sent to instance 0x6c561a0
  • 如何快速从解析中加载图像?

    我想知道是否有人可以帮助我 我是应用程序开发的新手 我正在从我的应用程序上传图像以在解析文档的帮助下毫无问题地进行解析 let imageData UIImagePNGRepresentation scaledImage let image

随机推荐

  • 发现此文件读取代码中的错误(C++)

    谁能告诉我为什么这个方法不能编译 void Statistics readFromFile string filename string line ifstream myfile filename if myfile is open whi
  • 从 Qt 中的 pro 文件获取值

    我在 Windows XP 中使用 Qt 4 5 我的 pro 文件有变量VERSION 1 0 现在我需要读取这个变量并获取它的值 1 0 来自源代码 这样我就不必在源代码中维护版本的另一个变量 我刚刚读取了 pro 文件并更新了它 这样
  • GS1条码中FNC1字符的实际ASCII值是多少?

    我在维基百科上搜索了很多页面 官方的 GS1 规格 但尚未找到问题的明确答案 GS1 FNC1 字符的实际十六进制 二进制值是多少 有很多关于如何使用 GS1 标识符 如何使用 ZPL 打印条形码以及如何对 FNC1 进行编码的信息 但我想
  • 关于 VB6 / VBA 中 CreateObject() 的问题

    我可以做这个 Dim fso As New FileSystemObject 或者我可以这样做 Dim fso As Object Set fso CreateObject Scripting FileSystemObject 我如何知道
  • 如何调试 strace 中显示的 futex 争用?

    我正在调试多线程 Linux 进程中的一个问题 其中某个线程似乎没有执行几秒钟 查看 strace 输出发现它等待 futex 例如1673109 14 36 28 600329 futex 0x44b8d20 FUTEX WAIT PRI
  • Office剪贴板格式

    如果我从 Excel 2007 复制图形并在另一个 Office 应用程序中选择 选择性粘贴 我会看到一种名为 Microsoft Office 图形对象 的剪贴板格式 它允许与增强型图元文件不同的自定义 如何从我自己的 C 应用程序创建这
  • 下载 iAP 托管内容卡在 SKDownloadState 等待某些用户

    和标题说的差不多 该代码适用于沙盒环境中的所有开发设备以及大多数用户 然而 有些用户报告说 即使整夜下载过程也不会超出等待状态 SKDownloadStateWaiting 有些人确实在几次尝试后设法开始下载 完全关闭应用程序并通过恢复购买
  • 需要用户输入的 ffmpeg cli 过滤器

    有没有办法为 ffmpeg 编写过滤器脚本 这样当我给出输入时 过滤器就会改变行为 例如 在录制流时 使用某个键更改对比度 或者使用另一个键混合两个视频 我已经看到我可以以静态方式执行此操作 例如使用新行为重新启动记录 然后调用 conca
  • 函数式编程的分析与设计[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 升级到 El Capitan 后出现无效的活动开发人员路径错误

    当我输入 git init 时 我在尝试推送到 git 时遇到了这个错误 xcrun 错误 无效的活动开发人员路径 Library Developer CommandLineTools 缺少 xcrun 库 开发人员 CommandLine
  • 如何从 Google 云端硬盘视频获取redirector.googlevideo.com 链接

    我有一个谷歌驱动器视频文件 例如https drive google com file d FILE ID view https drive google com file d FILE ID view 并且我想获取其redirector
  • 实用地将数据从 Neo4j 导出到 csv 文件

    我需要你关于 neo4j 导出的建议 我使用 apoc export cypher query 将节点和关系导出到 csv 文件 但是导出的内容是 cypher 语句 这是导出的 csv 文件示例 begin CREATE ITEM UNI
  • 如何检查字符串是否包含从a到z的任何字母? [复制]

    这个问题在这里已经有答案了 可能的重复 C 正则表达式 检查 a z 和 A Z https stackoverflow com questions 6017778 c sharp regex checking for a z and a
  • fullCalendar 多日活动开始和结束时间

    多日活动很少有一个开始和一个结束时间 例如 伯明翰动漫展可能会持续三天 但你不能在凌晨 1 点出现 活动举办的三天中 每一天都有单独的开始和结束时间 我无法在文档中找到有关每个事件的多个开始和结束时间的任何内容 还有其他人吗 Edit 如果
  • 使用 Matplotlib 绘制网格

    我想在Python中使用Matplotlib绘制一个自定义的网格 我知道的np meshgrid函数 可以使用它来获取我想要连接的不同点的数组 但我不确定如何绘制网格 代码示例 x np linspace 0 100 100 y np li
  • 如何比较两个 X509Certificate2 c#

    如何比较两个 X509Certificate2 对象 我需要查找两个证书是否相同 它用于用户身份验证目的 我需要查找两个证书是否属于同一个人 我可以使用其序列号或指纹属性吗 或者还有其他方法吗 另外我对此很陌生 想知道使用 X509Cert
  • 为什么盒子阴影和元素之间有间隙?

    当将鼠标悬停在 Chrome 76 0 3809 100 64 位 中的按钮上时 框阴影和 img 之间会出现微弱的间隙 为什么会发生这种情况以及如何修复它 这是一张图片 以防您在代码片段中看不到它 body background colo
  • Java 中的空布局有什么问题? [复制]

    这个问题在这里已经有答案了 Bonjour 在花了无数时间在这个网站上寻找在屏幕上拖动组件的代码后 我注意到答案中出现了一个奇怪的趋势 每个人都对空布局的声音感到不寒而栗 所以我问 大家都有什么问题吗 我编写代码的时间不超过三个月 使用 S
  • 如何使用PHP处理多个文件上传

    我想使用 PHP 上传文件 但问题是我不知道要上传多少个文件 我的问题是如果我使用的话如何上传文件file
  • 如何在单个动画中缩放和旋转视图

    我试图通过使其从屏幕中心出现同时增长到其完整尺寸来呈现视图 同时以 3D 方式围绕 x 轴旋转它 当我创建视图时 我对其应用变换以确保它收缩并旋转以开始 它太小 实际上不可见 然后我尝试使用 CATransform3D 如下所示 CABas