以时间间隔链接 UIView 动画

2024-01-12

我需要对 3 个 UIView 进行动画处理(淡入/淡出)。 1个动画持续时间为0.6秒(淡入/淡出周期为0.6+0.6秒)。但我需要在 0.2 秒内启动动画。

  • 第一个动画应在 0.0 秒内启动。
  • 第二个动画应在 0.2 秒内启动。
  • 第三个动画应在 0.4 秒内启动。

所有这些都应该“无限期”循环(直到某个触发)。

我现在拥有的:

- (void)playAnimation {
    isAnimated = YES;
    [self animateView:firstView afterDelay:0.0];
    [self animateView:secondView afterDelay:0.2];
    [self animateView:thirdView afterDelay:0.4];
}

- (void)stopAnimation {
    isAnimated = NO;
}

- (void)animateView:(UIView *)animatedView afterDelay:(float)delay {
    if(isAnimated) {
        [UIView animateWithDuration:0.6 delay:delay options:UIViewAnimationOptionTransitionNone
                     animations:^ {
            animatedView.alpha = 1.0;
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:0.6 animations:^ {
                animatedView.alpha = 0.0;
            } completion:^(BOOL finished) {
                [self animateView:animatedView afterDelay:0.0];
            }];
        }];
    }
}

这段代码的工作原理是不可预测的。有时视图动画会像我想要的那样工作(相位为 0.2 秒),有时它会在同一时间开始...... 这样做的正确方法是什么?我也尝试过删除afterDelay:方法签名的一部分并启动 animateView 方法,效果完全相同:

[self performSelector:@selector(animateView:) withObject:thirdView afterDelay:0.6];

UPDATE
我注意到,当后台执行大量网络操作(使用 AFNetworking 加载大图像)时,动画会“中断”。 我不介意动画是否会“冻结”一点(尽管我更喜欢完全没有延迟),但我真的想保持所有动画的相位链接(具有相同的相位差)。

To make problem easier to understand I've added graphs. Y is alpha, X is time. Top 3 graphs - what I want to have. Bottom ones - what I currently have. Highlighted area is where problem comes. You can see that second view's animation freeze for 0.2 seconds and synchronise with 3rd one. So they start blinking in the same phase. This is just one example. Some times they can animate ok, sometimes all 3 views "syncronize" in few rounds of animation and blink in same phase... Animation


看起来您想要相同的动画,应用于所有 3 个视图,偏移量 t=0.2。您可以使用 Core Animation 毫不费力地完成您想要的事情。

通过这种方式,他们的计时总是正确的。

我建议这样:

-(void)playAnimation
{
    CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath:@"opacity" ] ;
    anim.autoreverses = YES ;
    anim.repeatCount = CGFLOAT_MAX ;
    anim.removedOnCompletion = NO ;
    anim.duration = 0.6 ;
    anim.fromValue = @0.0 ;
    anim.toValue = @1.0;

    // finish configuring your animation here (timing function, speed, duration, fill mode, etc) ...

    CFTimeInterval t = CACurrentMediaTime() ;

    anim.beginTime = t ;
    [ self.firstView.layer addAnimation:anim forKey:@"opacity-anim" ] ; // name is so you can remove this anim later

    anim.beginTime += 0.2 ;
    [ self.secondView.layer addAnimation:anim forKey:@"opacity-anim" ] ;

    anim.beginTime += 0.2 ;
    [ self.thirdView.layer addAnimation:anim forKey:@"opacity-anim" ] ; // name is so you can remove this anim later
}

-(void)stopAnimation
{
    [ self.firstView.layer removeAnimationForKey:@"opacity-anim" ] ;
    [ self.secondView.layer removeAnimationForKey:@"opacity-anim" ] ;
    [ self.thirdView.layer removeAnimationForKey:@"opacity-anim" ] ;
}

edit: 哎呀!忘记了开始值、结束值!

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

以时间间隔链接 UIView 动画 的相关文章

  • Apple 登录无法在 iOS 14 模拟器上运行

    当我尝试登录 iOS 14 中的模拟器时 加载旋转器会一直旋转 Apple 开发者论坛上有一个主题here https developer apple com forums thread 651533但没有解决方案 苹果也没有回应 我当然可
  • 是否可以自定义区域形状?核心位置

    例如 至少我想要一个正方形 矩形 道路的形状作为我的区域 不它不是 根据文档 目前唯一的区域类是 CLCircularRegion 显然是圆形 和 CLBeaconRegion 基于与 iBeacon 的接近度 未来苹果可能会添加对自定义形
  • 检查包含 URL 的字符串“http://”

    我正在尝试检查用户输入的 URL 但我正在与一些错误和警告作斗争 BOOL textFieldShouldReturn UITextField textField check http NSString check textField te
  • 升级到 SDK 4.1 后 Facebook 登录失败(总是 isCancelled)

    我已在 iOS 应用程序中将 Facebook SDK 从 3 21 1 升级到 4 1 已上线 我仔细遵循升级指南 并实施了新的登录方法 我使用的代码是 Facebook 文档中提供的代码 但是自从升级以来 每次我尝试登录 设备或模拟器
  • 如何获得包含大量图像(50-200)的快速 UICollectionView?

    我在用着UICollectionView在一个显示大量照片 50 200 的应用程序中 我在让它变得活泼 例如像照片应用程序一样活泼 时遇到问题 我有一个习惯UICollectionViewCell with a UIImageView因为
  • iOS7状态栏和导航栏问题

    我正在将我的应用程序迁移到 iOS 7 为了处理状态栏问题 我添加了以下代码 if UIDevice currentDevice systemVersion floatValue gt 7 0f CGRect frame self navi
  • iOS表单键盘不消失

    我知道我必须打电话 BOOL disablesAutomaticKeyboardDismissal return NO this dismiss keyboard on ios BOOL textViewShouldBeginEditing
  • 核心蓝牙框架本质上是异步的吗?

    当我在应用程序中使用 CB 框架时 我没有引入任何并发性或反应性方法 并且一切正常 当我每秒从外设接收超过 100 个样本时 UI 不会被阻止 这是否意味着它被设计为异步工作 我没有找到任何说明它具有异步性质的资源 也没有找到任何在使用核心
  • UITableView 中具有多个部分的搜索控制器

    我有一个 UIViewController 其中有一个 UITableView 在该表视图内我有多个部分 其中有一些项目 我必须在该表视图内使用项目名称进行搜索 我已经在我的视图控制器中声明了这一点 let searchController
  • 如何使用最新的 FBSDK 在 iOS 应用程序中集成 Facebook,而不重定向 Safari 浏览器

    您好 我正在搜索避免新的 facebooksdk 重定向到 safari 的答案 如何在应用程序内打开 facebook 登录视图 如果它重定向到 safari 可能会在应用程序商店中拒绝 帮助我 提前致谢 昨天我使用以下方式提交我的应用程
  • 从实时照片中提取视频部分

    有谁知道如何从实时照片中提取视频部分 我正在开发一个将 Live Photos 转换为 GIF 的应用程序 第一步是从 Live Photo 中获取视频文件 看起来这应该是可能的 因为如果你将手机插入 Mac 你就可以看到单独的图像和视频文
  • 检查文本字段是否为空会导致 Swift 2 错误

    我正在尝试检查文本框是否没有值 当我这样做时 if userEmail isEmpty userPassword isEmpty userPasswordRepeat isEmpty I get the following error I
  • Core Data 与 Sqlite 以及性能

    我想知道是否有人有关于已在 3 0 SDK 中转换为 Core Data 的旧 sqlite 应用程序之间的性能差异的真实数据 我怀疑核心数据在底层只是使用 sqlite 并且为了方便成本而增加了一些开销 但我想我还是会问 Core Dat
  • 根据 AVPlayer 的请求添加自定义标头字段

    使用 AVPlayer 时是否可以将带有 http 请求的标头发送到音频文件 我需要能够在服务器接收到标头的内容时检查标头的内容 以便限制对所请求的文件的访问 您可以使用AVURLAssetHTTPHeaderFieldsKey of AV
  • 检查indexPath处的单元格在屏幕UICollectionView上是否可见

    我有一个CollectionView向用户显示图像 我在后台下载这些 下载完成后 我调用以下函数来更新collectionViewCell并显示图像 func handlePhotoDownloadCompletion notificati
  • 训练 tesseract 与 iPhone 一起使用

    我正在尝试在我的 iPhone 应用程序中使用 tesseract 2 04 只想检测数字 我在这里所做的首先是使用这篇文章交叉编译 tesseract 以生成 lib 文件http robertcarlsen net 2009 07 15
  • 为什么 NSOrderedSet 不继承 NSSet?

    当然 有序集是集合的更具体的情况 那么为什么NSOrderedSet继承自NSObject而不是NSSet 我通过了界面NSSet你是对的 有序集似乎满足里氏替换原则 http en wikipedia org wiki Liskov su
  • 获取 PHAsset 的本地文件路径

    我希望我的用户能够在 Instagram 上分享一张照片 并且我需要获取该照片的本地文件目录 不过 我将图像作为 PHAsset 获取 而不是 ALAsset 所有其他答案似乎都涵盖了这个主题 查看 PHAsset 文档 我没有看到 本地目
  • 如何在 UIButton 中创建边框?

    我在名为 addButton 的应用程序中使用自定义按钮 我想用白色边框它 如何在自定义按钮周围获得白色边框 您可以通过访问按钮的图层属性来设置 CALayer 上的边框属性 首先 添加石英 import
  • 通过 SSL HTTPS 从 iPhone 发送 POST 数据

    Hai all 在我的 iPhone 项目中 我需要将用户名和密码传递到 Web 服务器 以前我使用 GET 方法传递数据并使用 GET 格式的 url 例如 localhost 8888 login userName admin pass

随机推荐

  • 在 VSCode 中包含 d.ts 类型定义文件

    我已经开始使用 VSCode 0 7 0 并注意到注释说你不必添加 不再参考 引入 jsconfig json 后 您不再需要在每个文件中使用 引用 这些在 VS Code 的初始版本中是必需的 由于文件集是在 jsconfig json
  • python Anaconda 中的 Mayavi

    我安装了mayavi在 Anaconda 中使用命令 conda exe install mayavi 在 Anaconda 命令提示符中 现在 当我关闭 Spyder 时 它就不再打开了 我该如何解决 我正在使用Windows 我想展示我
  • 如何避免Python API服务器中的重复处理? [复制]

    这个问题在这里已经有答案了 假设一个函数detect primes调用起来很昂贵 我想避免使用重复的参数重复调用它 我应该怎么办 使用缓存没有帮助 因为该函数可能会在不同的请求中同时调用 当两个请求都将缓存视为空值时 两个请求都将继续执行昂
  • C++ 中的句柄是什么?

    有人告诉我 句柄有点像指针 但其实不是 它允许您保留对对象的引用 而不是对象本身 更详细的解释是什么 句柄可以是从整数索引到指向内核空间中资源的指针的任何内容 其想法是 它们提供了资源的抽象 因此您无需了解太多有关资源本身的信息即可使用它
  • 直接在 Excel 工作表上使用 ActiveX 控件的必要和充分要求是什么?

    Microsoft Office 支持文章 添加或注册 ActiveX 控件 https support office com en us article Add or register an ActiveX control 8fc743a
  • 枚举和 android 注释 intDef

    我有一个枚举 public enum AppEnums SERVICE ERROR CONNECTION ERROR 我想在 Android 注释的 intDef 中使用它 IntDef AppEnums CONNECTION ERROR
  • 在 Kotlin 中实例化对象时如何重写方法?

    在Java中 要在实例化新对象时重写方法 我们可以这样做 public ActivityTestRule
  • 如何在从 Flutter 创建文档到 Firestore 时添加时间戳 [重复]

    这个问题在这里已经有答案了 我正在编写代码以将数据从 flutter 设置到 Firestore 我想要的是添加一个用于创建数据的时间的字段 例如 createdOn Flutter 的 DateTime now 从设备获取时间 但我想获取
  • 简单的Java“新”概念问题

    编译器显示错误new Stock 2 after expect public class TestStockUI Stock stock new Stock 2 stock 0 new Stock Microsoft MSFT 15 69
  • 如何在 SQL Server 2008 上找到禁用的索引

    不久前 当我向 SQL Server 数据库中执行一些批量数据插入时 我禁用了许多索引以提高插入性能 我现在需要返回并重建 重新启用它们 不幸的是 我不确定我禁用了哪些索引 有没有办法可以查询以确定哪些索引被禁用并且应该重新启用 selec
  • CAS 与同步性能

    我已经有这个问题很长一段时间了 试图阅读大量资源并了解正在发生的事情 但我仍然无法很好地理解为什么事情是这样的 简而言之 我正在尝试测试如何CAS将执行 vssynchronized在有竞争和没有竞争的环境中 我已经把这个JMH test
  • “无法分析类:可能未加载或没有自动加载器?”

    我用一个 viewhelper 创建了 我的第一个 扩展 糟糕 出现错误 无法分析类 My Mlv ViewHelpers Format ReplacenewlinesViewHelper 可能未加载或没有自动加载器 使用中 有新闻 nam
  • ASP.Net 表单可以有 method=get 或 post 属性吗?

    我是 ASP NET 新手 我的问题是 带有 runat server 的 ASP net 表单可以有一个方法属性吗 例如
  • 我的 IIS7 网站的元数据库密钥在哪里?

    我正在尝试设置我的网站设置项目的自动 每晚 安装 我可以在命令行上指定一些安装时值 特别是 添加一个TARGETSITE值定义我的新部署将前往的网站 如何在 IIS7 安装中找到我的网站的元数据库密钥 例如 LM W3SVC 2135484
  • 测试 Windows Azure Web 应用程序的最大用户负载

    我正在对新兴 Web 技术进行一些研究 并创建了一个非常简单的 Azure 网站 该网站使用 Web 套接字和 mongo db 作为数据库 我已经设法让所有组件一起工作 现在必须对应用程序执行负载测试 主要标准是应用程序可以支持的最大用户
  • Babel 5 插件正在使用不受支持的 Babel 版本运行。尝试更新 babel-relay-plugin

    Doing Lynda 构建和部署全栈 React 应用程序教程 并卡在某个点上 出现以下错误 src index js Error BABEL Users kukodajanos Workspace ticket src index js
  • QueryOver 上的 GroupBy SqlFunction

    我有一个包含所有不同帐户名称前缀 a z 的列表 我使用这些前缀获取的 var accounts this SessionManager GetActiveSession QueryOver
  • LinqToLucene 和 Lucene.Net.Linq 之间的区别

    Are the LinqToLucene http linqtolucene codeplex com 和Lucene Net Linq https github com themotleyfool Lucene Net Linq项目不同
  • 将表单设置为父级抛出异常“顶级控件无法添加到控件”

    我想从另一个表单访问一个表单的变量 单击主窗体内的按钮时 我想将主窗体设置为父窗体 然后调出另一个窗体 子窗体 我将在其中访问主窗体的变量 我的点击处理程序如下 private void btnSystem Click object sen
  • 以时间间隔链接 UIView 动画

    我需要对 3 个 UIView 进行动画处理 淡入 淡出 1个动画持续时间为0 6秒 淡入 淡出周期为0 6 0 6秒 但我需要在 0 2 秒内启动动画 第一个动画应在 0 0 秒内启动 第二个动画应在 0 2 秒内启动 第三个动画应在 0