尝试将 CABasicAnimation 位置和图层不透明度延迟 3 秒,但是

2024-04-17

我试图使用 setBeginTime 将图层的不透明度和位置的动画延迟 3 秒。我将图层命名为boxLayer。动画进展顺利,但在前 3 秒内(该图层不应显示),该图层以其最终位置和不透明度显示。不应该。组动画并不能解决该问题。有人可以帮忙吗?参见下面的代码:

// Create an animation that will change the opacity of a layer
CABasicAnimation *fader = [CABasicAnimation animationWithKeyPath:@"opacity"];


// It will last 1 second and will be delayed by 3 seconds
[fader setDuration:1.0];
[fader setBeginTime:CACurrentMediaTime()+3.0];


// The layer's opacity will start at 0.0 (completely transparent)
[fader setFromValue:[NSNumber numberWithFloat:startOpacity]];

// And the layer will end at 1.0 (completely opaque)
[fader setToValue:[NSNumber numberWithFloat:endOpacity]];

// Add it to the layer
[boxLayer addAnimation:fader forKey:@"BigFade"];

// Maintain opacity to 1.0 JUST TO MAKE SURE IT DOES NOT GO BACK TO ORIGINAL OPACITY
[boxLayer setOpacity:endOpacity];


// Create an animation that will change the position of a layer
CABasicAnimation *mover = [CABasicAnimation animationWithKeyPath:@"position"];

// It will last 1 second and will be delayed by 3 seconds
[mover setDuration:1.0];
[mover setBeginTime:CACurrentMediaTime()+3.0];

// Setting starting position
[mover setFromValue:[NSValue valueWithCGPoint:CGPointMake(startX, startY)]];

// Setting ending position
[mover setToValue:[NSValue valueWithCGPoint:CGPointMake(endX, endY)]];

// Add it to the layer
[boxLayer addAnimation:mover forKey:@"BigMove"];

// Maintain the end position at 400.0 450.0 OTHERWISE IT IS GOING BACK TO ORIGINAL POSITION
[boxLayer setPosition:CGPointMake(endX, endY)];

问题是你正在设置boxLayer的属性position and of opacity到他们的最终值。你需要:

  1. Set the boxLayer属性到它们的起始值,而不是它们的结束值(这就是为什么它从结束位置/不透明度开始......通常如果动画立即开始,这不是问题,但因为你推迟开始,使用结束位置是有问题的);

  2. 对于你的两个动画,你必须改变removedOnCompletion to NO and fillMode to kCAFillModeForwards(这是防止其在完成后恢复到原始位置的正确方法)。

Thus:

// Create an animation that will change the opacity of a layer
CABasicAnimation *fader = [CABasicAnimation animationWithKeyPath:@"opacity"];

// It will last 1 second and will be delayed by 3 seconds
[fader setDuration:1.0];
[fader setBeginTime:CACurrentMediaTime()+3.0];

// The layer's opacity will start at 0.0 (completely transparent)
[fader setFromValue:[NSNumber numberWithFloat:startOpacity]];

// And the layer will end at 1.0 (completely opaque)
[fader setToValue:[NSNumber numberWithFloat:endOpacity]];

// MAKE SURE IT DOESN'T CHANGE OPACITY BACK TO STARTING VALUE    
[fader setRemovedOnCompletion:NO];
[fader setFillMode:kCAFillModeForwards];

// Add it to the layer
[boxLayer addAnimation:fader forKey:@"BigFade"];

// SET THE OPACITY TO THE STARTING VALUE
[boxLayer setOpacity:startOpacity];

// Create an animation that will change the position of a layer
CABasicAnimation *mover = [CABasicAnimation animationWithKeyPath:@"position"];

// It will last 1 second and will be delayed by 3 seconds
[mover setDuration:1.0];
[mover setBeginTime:CACurrentMediaTime()+3.0];

// Setting starting position
[mover setFromValue:[NSValue valueWithCGPoint:CGPointMake(startX, startY)]];

// Setting ending position
[mover setToValue:[NSValue valueWithCGPoint:CGPointMake(endX, endY)]];

// MAKE SURE IT DOESN'T MOVE BACK TO STARTING POSITION   
[mover setRemovedOnCompletion:NO];
[mover setFillMode:kCAFillModeForwards];

// Add it to the layer
[boxLayer addAnimation:mover forKey:@"BigMove"];

// SET THE POSITION TO THE STARTING POSITION
[boxLayer setPosition:CGPointMake(startX, startY)];

就我个人而言,我认为您正在做很多工作,而通过视图上基于块的动画可以更轻松地完成一些工作(出于本演示的目的,我假设您的boxLayer is a CALayer对于一个名为box)。如果你这样做,你也不需要 Quartz 2D:

box.alpha = startOpacity;
box.frame = CGRectMake(startX, startY, box.frame.size.width, box.frame.size.height);

[UIView animateWithDuration:1.0
                      delay:3.0
                    options:0
                 animations:^{
                     box.alpha = endOpacity;
                     box.frame = CGRectMake(endX, endY, box.frame.size.width, box.frame.size.height);
                 }
                 completion:nil];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试将 CABasicAnimation 位置和图层不透明度延迟 3 秒,但是 的相关文章

  • 在哪里可以找到有关 IOS 日历同步的优秀教程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发 iPhone 应用程序 如何将新事件与 iOS 日历同步 您可以浏览此 github 代码
  • 实现 UIPopoverBackgroundView 子类时出现乱码异常

    我已经按如下方式实现了这个类 import JKBackgroundView h implementation JKBackgroundView static CGFloat jkArrowBase 26 0 static CGFloat
  • 如果 UIGestureRecognizer 触发,如何取消按钮点击?

    更新 问题似乎是对另一个 GestureRecognizer 的依赖失败 请参阅此问题下面的评论和测试项目 在我的 iPhone 应用程序中 我有一个包含多个 UIButtons 作为子视图的视图 该视图还有一个 UITapGestureR
  • NSFetchedResultsController 中的部分名称与托管对象值不匹配

    我正在使用 NSFetchedResultsController 用大约 1500 个实体的中等大小的核心数据存储的结果填充 UITableView 结果控制器相当标准 一些潜在错误的 热点 并不适合此设置 在与其使用的同一 主 线程上创建
  • 动态框架中未定义的架构符号

    我正在开发一个 iOS 框架 该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信 我想创建一个动态框架 支持 iOS8 但我偶然发现以下编译错误 Undefined symbols for a
  • 当 tableView 的 allowedMultipleSelectionDuringEditing 属性为 YES 时,如何实现滑动删除功能?

    在 iOS 5 中 如果我设置allowsMultipleSelectionDuringEditing在 UITableView 上设置为 YES 然后滑动删除功能不再起作用 内置的邮件应用程序支持滑动删除和编辑模式下的多项选择 我也想这样
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • 当 UIView 通过自动布局调整大小时,会调用什么方法?

    我有一个图像视图 我通过在子类中覆盖以下内容来实现圆角 void setFrame CGRect frame super setFrame frame self layout setCornerRadius frame size width
  • 为什么分割视图控制器必须始终是您创建的任何界面的根?

    在苹果的开发者指南中 他们指出 分割视图控制器必须始终是您创建的任何界面的根 see here http developer apple com library ios featuredarticles ViewControllerPGfo
  • 锁定时 AVAudioPlayer 在 iPhone 5 中不播放音频

    使用 AVAudioPlayer 我尝试在 iphone 播放器播放时播放声音 当设备锁定时也是如此 问题是 在 iPhone 4s ios 7 中 效果很好 但在带有 6 和 7 ios 的 iPhone 5 上没有任何反应 In the
  • swift:移动动画

    我在故事板中有 viewController 还有4个正方形 我想将我的方块放在视图中 首先我想显示两个正方形 如果我按下按钮 我希望我的红色 2 个方块向左移动 然后显示接下来的 2 个蓝色方块 就像这部动画 我需要创建一个scrollV
  • 如何将 UILabel 与个人资料照片图像水平对齐?

    我必须显示名称和电子邮件 ID 与个人资料图像正确水平对齐 这样姓名和电子邮件 ID 就出现在 UIImageView 的中心 但您可以看到姓名和电子邮件 ID 不在个人资料图片的中心 为什么会发生这种情况 我给出了以下限制 删除前导和尾随
  • Swift 每 5 天重复一次 LocalNotification

    如何每 5 天上午 10 00 重复一次 LocalNotification 我尝试这个 但它不起作用 let content UNMutableNotificationContent content title Hello content
  • iOS图片上的线测量

    我需要一些帮助来开始绘制末端带有圆圈的线条 并测量其长度 我能够划清界限 但无法让它移动 花了几个小时决定在 SO 上发布 因此 请参阅下图并指导我开始 任何使用 Objective C 的示例或教程都会有帮助 谢谢 这个想法看起来实现起来
  • 如何在 Swift 中将 Int 转换为字符

    我在这里挣扎了十多分钟 失败了 我屈服了 我需要在 Swift 中将 Int 转换为 Character 但无法解决它 Question 你如何转换 cast an Int integer to a Character char 在斯威夫特
  • 使用本地化故事板进行即时本地化

    我正在开发一个应用程序 它有一个切换按钮可以在英语和阿拉伯语之间切换 并且应该是动态的 我正在使用该方法https github com maximbilan ios language manager https github com ma
  • 在 ios 中从 XMPP 服务器检索存档的消息

    我正在将 XMPP 功能集成到我的 ios 应用程序中 但遇到了一个无法解决的问题 问题是我无法从服务器获取存档的消息 我的客户能够登录 并且我已经成功测试了多个服务调用 发送 接收消息 获取有关用户的信息 发送后
  • 自调整大小的集合视图在 iOS 15 中进入递归循环

    我有一个自动调整大小的集合视图 当我调用 super layoutSubviews 时 我的应用程序崩溃 因为集合视图进入递归更新循环 这在 iOS 14 及更低版本中运行良好 但从 iOS 15 开始就观察到了这一点 class Dyna
  • MapKit 注释未显示在地图上

    我无法让 MKAnnotationViews 显示在 MapKit 的地图上 我正在使用 iOS 7 现在已经在论坛和网络上搜索了很多小时 尝试不同的示例和设置 下面我有 我认为 使其工作的最基本的设置 该应用程序包含一个 ViewCont
  • 呈现 UIActivityViewController 时发出警告

    当我提出一个UIActivityController使用我得到的下面的代码 它被呈现 但控制台显示 Warning Attempt to present

随机推荐

  • 溢出-y滚动即使没有溢出也总是显示

    我正在做 与内容分开滚动 JQuery Mobile 面板 我做了什么 https forum jquery com topic scroll inside panel 我应用这个 css 来实现我所做的事情 但问题是 Overflow y
  • Celery + SQLAlchemy:DatabaseError:(DatabaseError)SSL错误:解密失败或坏记录mac

    当在启用 SSL 的 postgresql 数据库上使用 celery 和多个工作线程时 有时会触发标题错误 我使用 Flask SQLAlchemy 配置 正如这里提到的 https github com celery celery is
  • 防止 PHP 中的目录遍历但允许路径

    我有一个基本路径 whatever foo and GET path 应该是相对的 但是 如何在不允许目录遍历的情况下完成此操作 读取目录 eg 无法正确过滤 好吧 一种选择是比较真实路径 basepath foo bar baz real
  • Azure 文件存储内容类型始终为 application/octet-stream

    目前 当我使用以下内容构建 URL 时 我遇到了 Azure 文件存储问题共享访问签名 SAS 令牌 https learn microsoft com en us azure storage common storage dotnet s
  • 如何使用Python在多进程中运行pycuda

    我有一个可以在单个进程中运行的 pycuda 代码 python的多进程可以支持在多个子进程中运行这段代码吗 如果我尝试 我会发现我犯了一个错误 我做错了吗 我尝试用python的进程实现一个简单的多进程 发现会出错 import pycu
  • Java 反射调用原始类型的构造函数

    我的测试框架中有一个方法 可以根据传入的参数创建类的实例 public void test Object constructorArgs throws Exception Constructor
  • 如何在 Automapper 中使用数据集?

    我目前使用数据读取器作为源 但我想改用数据集 datareader AutoMapper Mapper CreateMap
  • 确定事务中无法执行的T-SQL/DDL

    有多种语句和系统过程无法在事务中执行 并出现错误消息 不允许 例如 create database 或 无法执行 例如 exec sp addrole 是否存在一条或一组规则来指示事务中是否不允许给定的过程 语句 有其列表吗 不是 Micr
  • 使用 AWS CodeBuild 构建 Windows 容器

    我正在开始使用 AWS 的 CI CD 功能 到目前为止 我已经基于 microsoft windowsservercore 映像在 Windows Server 2016 本地创建了 docker 映像 并将其手动推送到 ECR 亚马逊容
  • 内联块 div 中的文本将其向下推[重复]

    这个问题在这里已经有答案了 今天早上我发现了一个奇怪的 CSS 问题 我希望 CSS 专家能帮助我 在这个演示 http jsfiddle net 7HBCe 为什么红色 div 中的文本将其向下推 我预计这两个 div 会彼此相邻 谢谢
  • 删除Elasticsearch中类型的文档

    我想使用 HTTP REST api 删除 Elasticsearch 中某一类型中索引的所有文档 但我不想删除该类型的映射 如何在 URL 中构建查询来执行此操作 执行命令前 索引 映射状态 截图取自elasticsearch头插件网络界
  • 你能帮助解释我的 svn diff 输出吗?

    我正在使用 SVN DIFF 比较两个文件夹 一个在分支中 一个在主干中 目的是确定更改列表 然后我对分支中的文件进行了一些更改 但输出显示我已经在主干中修改了它们 为什么会出现这种情况 有没有更好的命令来获取我正在寻找的结果 我现在使用的
  • 具有 EasyIn 动画,然后按顺序缩放动画,因为缩放动画会永远重复

    我想要在 onAppear 上为文本信息和 SF 符号添加一个 escapeIn moveUp 动画 此后 我只希望 SF 符号永远按比例放大和缩小 目前 我已经设法永远缩小规模 但是当我设法链接时 easeIn moveUp 动画也会永远
  • Julia 似乎没有使用字符串来执行插值

    官方文档指出 连接和字符串插值调用string 将对象转换为字符串形式 然而 以下最小工作示例似乎证明了其他情况 type MyType x Int end import Base string Base string m MyType w
  • ... 不支持谷歌地图 Javascript API。使用其他浏览器

    我正在使用两个不同的第三方程序 不同的公司 它们显然使用 Google Maps Javascript API 当他们加载地图时 会显示世界地图 但会显示一条错误消息 Der von Ihnen verwendete Browser wir
  • 如何用动画消除一堆模态视图控制器而不在屏幕上闪烁顶部和底部之间任何呈现的 VC?

    更新 通过下面的 屏幕截图 方法修复 这可行 但是有更优雅的方法吗 我将如何消除一堆带有动画的模态视图控制器 而不在屏幕上闪烁顶部和底部之间任何呈现的 VC 尝试用动画来做到这一点是行不通的 请参阅下面的代码和描述我的问题的内嵌注释 您可以
  • 当客户端不正常退出时,如何检测服务器上 Python aiohttp Web 套接字的关闭

    我有一个简单的命令和控制服务器server py 完全不安全 不要使用 被动客户端update client py和另一个可以发送命令的客户端update commander py 有一个 http 端点http 0 0 0 0 8080
  • NAT 穿越和 IPv6

    我很好奇一旦 IPv6 的部署和使用增加 NAT 和 NAT 穿越机制的用处 我们有很多 NAT 遍历机制 包括专有的 主要用于某种住宅或企业 NAT 背后的 IPv4 设备 客户端 鉴于 NAT 的出现是因为 IPv4 缺乏可用地址 那么
  • 未找到 CSS 和 JS 的 Vue dist 路径

    我在构建后渲染 VueJS 应用程序时遇到问题 当我查看构建文件夹并检查路径时 我的资产 css 和 javascript 的路径开头有一个正斜杠 这使得我的 css 资源和 javascript 无法找到 我想知道在运行构建脚本之前如何避
  • 尝试将 CABasicAnimation 位置和图层不透明度延迟 3 秒,但是

    我试图使用 setBeginTime 将图层的不透明度和位置的动画延迟 3 秒 我将图层命名为boxLayer 动画进展顺利 但在前 3 秒内 该图层不应显示 该图层以其最终位置和不透明度显示 不应该 组动画并不能解决该问题 有人可以帮忙吗