暂停和恢复 AnimateWithDuration 动画 ios

2024-02-13

因此,我在 animateWithDuration 方法的帮助下完成了动画,但我需要在应用程序进入后台时停止动画,并在应用程序返回前台时恢复动画。

有什么方法可以实现这一点:-

我的动画:标签在一定时间间隔后淡入淡出;

- (void)viewDidLoad {
    [super viewDidLoad];

    [self MyLabelAnimation];

}

- (void)MyLabelAnimation {
    self.myLabel.text = @"Text 1";
    [UIView animateWithDuration:0.3 animations:^{
        self.myLabel.alpha = 1.0;
    } completion:^(BOOL finished) {

        [UIView animateWithDuration:0.3 delay:2.7 options:UIViewAnimationOptionCurveEaseInOut animations:^{
            self.myLabel.alpha = 0.0;
        } completion:^(BOOL finished) {

            self.myLabel.text = @"Text 2";
            [UIView animateWithDuration:0.3 animations:^{
                self.myLabel.alpha = 1.0;
            } completion:^(BOOL finished) {
                [UIView animateWithDuration:0.3 delay:2.7 options:UIViewAnimationOptionCurveEaseInOut animations:^{
                    self.myLabel.alpha = 0.0;
                } completion:^(BOOL finished) {

                    self.myLabel.text = @"Text 3";
                    [UIView animateWithDuration:0.3 animations:^{
                        self.myLabel.alpha = 1.0;
                    } completion:^(BOOL finished) {

                        [UIView animateWithDuration:0.3 delay:2.7 options:UIViewAnimationOptionCurveEaseInOut animations:^{
                            self.myLabel.alpha = 0.0;
                        } completion:^(BOOL finished) {

                            self.myLabel.text = @"Text 4";
                            [UIView animateWithDuration:0.3 animations:^{
                                self.myLabel.alpha = 1.0;
                            } completion:^(BOOL finished) {
                                [UIView animateWithDuration:0.0 delay:4.8 options:UIViewAnimationOptionCurveEaseInOut animations:^{
                                    self.myLabel.alpha = 0.0;
                                } completion:^(BOOL finished) {

                                    [self MyLabelAnimation];
                                }];
                            }];
                        }];
                    }];
                }];
            }];
        }];
    }];
}

由于您的动画似乎是无限重复的几个较小的子动画的序列,因此您可以始终跟踪动画循环中的位置,在应用程序变为非活动状态时停止动画,并在应用程序变为非活动状态时重新启动动画再次变得活跃。

[编辑:下面添加了示例代码和解释。]

In ViewController.m:

@interface ViewController ()
{
  int numStages;  // 4 * 3 = 12 in our example (4 different text labels,
  // with 3 substages (alpha ramping up, alpha constant, and alpha ramping down) for each)
  int globalStage;  // varies from 0 to numStages - 1.  0 initially
  bool animationIsActive;
}

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.

  numStages = 4 * 3;  // 4 * 3 = 12 in our example (4 different text labels,
  // with 3 substages for each text label's appearance (alpha ramping up, alpha constant, and alpha ramping down))
  globalStage = 0;  // varies from 0 to numStages - 1.  0 initially
  animationIsActive = NO;

  self.myLabel.alpha = 0.0;
}

- (void)animateStage:(int)stage {
  NSLog(@"animateStage called with argument stage = %d", stage);

  // make a note in our instance variable of where we need to restart
  // the animation THE NEXT TIME if it is interrupted or paused
  // during the current animation:
  globalStage = (stage + 1) % numStages;

  self.myLabel.text = [NSString stringWithFormat:@"Text %d", (stage / 3) + 1];

  switch (stage % 3) {
    case 0:  // ramp up alpha from 0 to 1
    {
      [UIView animateWithDuration:0.3 animations:^{
        self.myLabel.alpha = 1.0;
      } completion:^(BOOL finished) {
        // only proceed to next stage if the animation is supposed to be active:
        if (animationIsActive) {
          [self animateStage:globalStage];
        }
      }];
    }
      break;
    case 1:  // keep alpha constant at 1 (see comment below)
    {
      [UIView animateWithDuration:2.7 animations:^{
        self.myLabel.alpha = 0.99999;  // changing the 0.99999 to 1.0 causes
        // this stage to be short-circuited.  probably because iOS realizes
        // that alpha is not really changing in this stage and, being too clever
        // by half, decides to skip this stage altogether.  but 0.99999 is
        // as close to 1.0 as makes no difference.
      } completion:^(BOOL finished) {
        // only proceed to next stage if the animation is supposed to be active:
        if (animationIsActive) {
          [self animateStage:globalStage];
        }
      }];
    }
      break;
    case 2:  // ramp down alpha from 1 to 0
    {
      [UIView animateWithDuration:0.3 animations:^{
        self.myLabel.alpha = 0.0;
      } completion:^(BOOL finished) {
        // only proceed to next stage if the animation is supposed to be active:
        if (animationIsActive) {
          [self animateStage:globalStage];
        }
      }];
    }
      break;
    default:
      break;
  }

}

- (void)viewWillAppear:(BOOL)animated
{
  NSLog(@"viewWillAppear: called");
  [[NSNotificationCenter defaultCenter]
   addObserver:self
   selector:@selector(didBecomeActive:)
   name:UIApplicationDidBecomeActiveNotification
   object:[UIApplication sharedApplication]];
  [[NSNotificationCenter defaultCenter]
   addObserver:self
   selector:@selector(willResignActive:)
   name:UIApplicationWillResignActiveNotification
   object:[UIApplication sharedApplication]];
}

- (void)viewDidDisappear:(BOOL)animated
{
  NSLog(@"viewDidDisappear: called");
  [[NSNotificationCenter defaultCenter]
   removeObserver:self
   name:UIApplicationDidBecomeActiveNotification
   object:[UIApplication sharedApplication]];
  [[NSNotificationCenter defaultCenter]
   removeObserver:self
   name:UIApplicationWillResignActiveNotification
   object:[UIApplication sharedApplication]];
}

- (void)didBecomeActive:(NSNotification *)notification
{
  NSLog(@"view controller's didBecomeActive: called");
  // start the animation is we are stopped
  if (!animationIsActive)
  {
    NSLog(@"animation being (re)started at stage %d", globalStage);
    [self animateStage:globalStage];
    animationIsActive = YES;
  }
}

- (void)willResignActive:(NSNotification *)notification
{
  NSLog(@"view controller's willResignActive: called");
  // stop the animation
  NSLog(@"animation being stopped at stage %d", globalStage);
  animationIsActive = NO;
}

@end
  1. 我已将您的动画分解并“扁平化”为 4 * 3 = 12 个阶段,以便更好地控制。
  2. 实例变量globalStage and animationIsActive用于跟踪我们在动画中的位置以及动画是否正在运行。
  3. In viewWillAppear:我们要求在应用程序变为活动或非活动状态时收到通知。当这些事件发生时,我们的方法didBecomeActive: or willResignActive:叫做。这两个方法是我们(重新)开始和停止动画的地方。
  4. 不要忘记注销这两个UIApplication中的通知viewDidDisappear:.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

暂停和恢复 AnimateWithDuration 动画 ios 的相关文章

  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • 在 iOS 上从 GPS 获取时间

    我正在开发一个跟踪器应用程序 该应用程序需要高精度地了解设备位置 即它使用位置服务并忽略水平精度低于 20 米的位置 CLLocation没有明确声明是否通过 GPS 确定 但是 如果水平精度为 20 米或更好 则可以认为它是来自 GPS
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • 如何消除禁用的 UIButton 的灰色外观

    我有一个 UIButton 我希望它处于禁用状态时与处于正常状态时看起来完全相同 现在它看起来有点灰色 不要使用enabled属性或setEnabled NO方法 而是使用 myButton setUserInteractionEnable
  • 如何从通讯录 ios 以编程方式编辑电话号码值

    我正在尝试在 iOS 中以编程方式替换特定联系人的特定电话号码 获取联系人表单地址簿 我不知道为什么我无法保存新的电话号码并刷新地址簿以显示更改 我正在这样做 BOOL changeContactPhoneNumber NSString p
  • Objective-C 中 typedef 枚举语句在哪里?

    我担心的一个基本问题 以下代码有效 并且 typedef 枚举被识别 但我收到一条警告消息 空声明中无用的存储类说明符 我在这里做错了什么吗 这是放置 typedef 枚举的最佳位置吗 import
  • 使用GCD实现并发读独占写模型

    我试图了解使用 Grand Central Dispatch GCD 实现控制资源访问的并发读独占写模型的正确方法 假设有一个 NSMutableDictionary 被大量读取并且偶尔更新 确保读取始终与字典状态一致的正确方法是什么 当然
  • NSTextField 弹跳截断的文本而不是换行

    我想知道是否有一种简单的方法来 弹跳 或滚动NSTextField文本太长而无法显示 例如 lt scroll This is a rather large pi ece of text 因此 在此示例中 文本将滚动到末尾 显示消息的其余部
  • 使用 Unity 在 iOS 应用程序上发送电子邮件时出错

    我正在开展一个学校项目 我正在尝试记录从我统一制作的游戏中存储的数据 我的问题是我想通过电子邮件将数据发送到应用程序 一切正常 电子邮件与数据一起发送等 但是当我将应用程序构建到 iOS 设备时 它不会发送电子邮件 我在 Unity 中没有
  • 在 cocoa touch 中以编程方式将视图位置设置为右上角

    我需要确保一个视图 A 尺寸 200x200 始终与第二个视图 B 全屏尺寸 内的右上角对齐 我想确保无论设备方向如何 视图 A 都保留在该位置 事实是 当使用界面生成器来定位视图时 我对此没有任何问题 但我需要以编程方式构建它 我想我应该
  • iOS 以编程方式将 AVI 转换为 MP4 格式

    我的应用程序中有一个查询 因为我想将 AVI 格式的视频转换为 MP4 电影格式 所以有没有什么方法可以以编程方式执行此操作 任何代码片段将不胜感激 你需要使用AVAssetExportSession将视频转换为 mp4格式 下面方法转换
  • Firestore 读取包含子集合的文档的计费

    我正在制作一个应用程序 它存储用户使用我的应用程序学习了多少分钟 我的 Firestore 数据库以 用户 集合开始 每个用户都有自己的文档 该文档由其在 Auth 中生成的 userID 命名 我的问题是 如果我读取了他们的 userID
  • NSURLConnection 的 URL 文件大小 - Swift

    我想在下载之前从 url 获取文件大小 这是 obj c 代码 NSURL URL NSURL URLWithString ExampleURL NSMutableURLRequest request NSMutableURLRequest
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • Facebook iOS SDK:登录 Facebook 时无需总是询问应用程序的权限

    我在我的应用程序中使用 Facebook iOS SDK 我有两个类似的问题 有没有办法知道当前是否有用户登录 我现在使用的是在成功登录时存储访问令牌和到期日期 并在应用程序启动时加载它们 我的问题是 如果会话无效 我可以为用户提供登录选项
  • iOS Safari 通过单击按钮触发扫描信用卡

    您好 我目前正在创建一个测试应用程序 当用户单击文本字段名称或卡号时 扫描信用卡功能对我有用 我的问题是 我希望当用户单击 button1 时发生同样的情况 这应该打开相机来扫描卡并填充现有的文本字段 即名称 卡号和到期日期 额外的好处是
  • 如何连续关闭 2 个模态视图控制器?

    我有 2 个以模态方式呈现的视图控制器 A presents B which presents C 当我解雇C时 我也想解雇B 但我不知道该怎么做 解雇C self dismissModalViewControllerAnimated YE
  • 如何判断handleOpenURL是在应用程序启动时调用还是在应用程序运行时调用?

    由于事件的顺序略有不同 具体取决于这两个场景中的哪一个正在进行 我希望能够区分出区别 有什么建议么 你不应该使用handleOpenURL因为它已被弃用 相反 使用application openURL sourceApplication
  • 在 PDFView 表单字段中配置键盘设置

    我正在开发一个应用程序 它从服务器加载 PDF 文件并在 PDFView 中显示这些 PDF 文件 这些文件包含用户要在其中键入内容的表单字段 这很好用 PDF 文件将用于教育环境 其中拼写应not可以自动更正并且预测文本应该not能得到的

随机推荐

  • 如何获取GCE实例的内部IP地址列表

    我有很多实例在 GCE 中运行 我想以编程方式获取它们的内部 IP 地址列表 而无需登录到实例 本地 我知道我可以运行 gcloud compute instances list 但是我可以传递任何标志来获取我想要的信息吗 例如 gclou
  • MvvmCross 4 和 WPF SQLite 插件

    在 MvvmCross 4 0 0 中 社区 SQLite 插件已被新的 SQLite PCL 插件替换 如果我没记错的话 它在我的 Android 应用程序中运行得很好 但是当我尝试在 WPF 应用程序中使用它时 我遇到了问题 从 nug
  • SQL Server 条件 CHECK 约束

    我正在使用 SQL Server 2008 Management Studio 以下是我必须写的内容 我对第二个约束有一些困难 这让我有点困惑 我真的很感激一些帮助 编写一条 ALTER TABLE 语句 向 AP 数据库的 Invoice
  • 打字稿中的 Object.freeze / Object.seal

    Is Object freezeTypescript 中建议的还是有其他方法来确保对象保持不可变 Since const仅保护实例 但不保护属性 这显然不是我正在寻找的答案 还有其他方法可以确保对象保持不可变吗 这取决于您想要的保险级别 如
  • Android - 应用内购买 - 您需要将 BILLING 权限添加到您的 APK

    长期以来 我一直面临应用内购买问题 我需要在 Android 应用程序中集成应用内功能 但是当我将 APK 文件上传到 Play 商店时 它不允许我添加 SKU 值 要添加应用内商品 您需要向您的 APK 添加 BILLING 权限我已在清
  • 在Java中组合多个声音流

    我有许多用 PCM PCM SIGNED 8000 0 Hz 16 位 单声道 2 字节 帧 小端 编码的语音声音流 我想通过网络发送它们 为了节省带宽 我目前使用 JSpeex 对流进行编码 然而 为了节省更多带宽 我想 如果可能 在使用
  • Jquery UI范围滑块对鼠标移动的滞后响应

    我正在使用 JQuery UI 范围滑块 我的滑块手柄似乎不能随光标平滑移动 而是滞后 我将 class styloot 与我的 body 标签一起使用 我发现从我的 html 结构中的 body 标记中删除此类可以使滑块移动变得平滑 尽管
  • 使用 Swing 和 Netbeans GUI 编辑器保存文件/打开文件对话框

    我是 Java 初学者 我正在 netbeans 7 3 IDE 中使用其 GUI 编辑器制作一个简单的文本编辑器 我面临的主要问题是我无法保存 打开文件 我创建了 保存 按钮 当我放下文件选择器时 它作为嵌入在 java 窗口中的普通打开
  • 是否可以将远程文件从 Electron App 拖到文件系统上?

    我一直在尝试 Electron 应用程序的文件系统拖放功能 并且在使用本地文件进行所有操作时没有遇到任何问题 我在文档中没有遇到任何内容 所以我想看看是否有人知道这是否可能 我想使用 Electron 中的拖出功能将远程文件拖到应用程序之外
  • 当移动的 div 到达特定区域时将 CSS 应用到它。用于移动元件的静态放大镜

    我偶然发现了创建一个非常具体的元素的问题 我有一个显示不同内容的股票代码 文本 图像和其他类型的内容 我想要做的是添加一个静态 放大镜 以便所有移动内容在放大镜区域时都会缩放 我看到的大多数 jquery 缩放或放大插件从未使用固定位置 而
  • 通过 BLE 上的 ANT+FEC 将用户体重发送到智能训练器

    有谁知道如何将室内智能训练器的用户体重设置发送到 DataPage 55 我想更新用户体重 以使成绩模拟更加真实 我已成功发送成绩 数据页 51 并且对用户体重实施相同的格式似乎没有任何作用 func sendUserConfig peri
  • 带有弧形尖底的头部

    我需要创建下图所示的蓝 绿色区域 它有倾斜的侧面 向下延伸至有轻微弯曲的点 使用什么是实现此目的的最佳方法CSS 如果无法支持 IE9 我需要支持 IE9 或 IE10 我已经开始了基础的演示在这里 http jsbin com quxoh
  • 新的关键字和方法隐藏

    new 关键字用于隐藏相同的基类实现 但我不确定为什么以下代码会生成 Baseclass 输出 class Baseclass public void fun Console Write Base class class Derived1
  • 在 Go 中解析 XML 时处理命名空间

    我正在尝试在 Go 中解析 XML 片段 package main import encoding xml fmt type XML struct Foo string xml foo func main rawXML byte
  • 如何给出 DateTime.Date 格式?

    日期时间 dt 日期时间 Now dt Date 创建为 31 10 2012 00 00 00 它创建为 dd mm yyyy 格式 但我需要 dd mm yyyy 我可以使用 return new DateTime d Year d M
  • 如何在两个 nib 文件之间共享 NSArrayController?

    我有一组图像和两个 nib 文件 一个 nib 文件有一个窗口 在 NSTableView 中显示图像 另一个笔尖有一个窗口 可将图像数组绘制到 NSView 中 并在选定的图像上绘制突出显示 图像数组由 NSArrayController
  • 如何将 ascii 值字符串转换为 python 中的原始字符/数字

    我有一个带有数字的字符串 我之前用编码器转换了它 但现在我正在尝试解码它 我四处搜索 似乎没有答案 如果你有任何办法 亲爱的 请告诉我 字符串 91 39 65 97 66 98 67 99 32 49 50 51 39 93 结果 ABC
  • 如何在编译时指定资源注释的名称?

    我们的代码是这样的 Resource name java comp resource foo bar ONE QUEUE private Queue queue 但是 在一种部署场景中 队列注释应如下所示 Resource name jav
  • Composer 自动加载完整示例?

    我想把all https getcomposer org doc 04 schema md psr 0 the https stackoverflow com questions 15179025 unable to autoload cl
  • 暂停和恢复 AnimateWithDuration 动画 ios

    因此 我在 animateWithDuration 方法的帮助下完成了动画 但我需要在应用程序进入后台时停止动画 并在应用程序返回前台时恢复动画 有什么方法可以实现这一点 我的动画 标签在一定时间间隔后淡入淡出 void viewDidLo