iOS上的runTaskLater()等效项

iOS上的runTaskLater()等效项,ios,objective-c,Ios,Objective C,通过Android上的Bukkit插件,我可以使用一个简单的runTaskLater()方法来执行一个方法,让它执行一个操作,然后在设定的时间量后运行另一个操作,但是在iOS上,我只知道performSelector:方法 我正在尝试做的一个很好的例子是一些文本的淡出动画。假设我想让它先淡入,然后在达到峰值不透明度后淡出一秒,目前我不得不使用两种不同的淡入淡出方法,这似乎效率很低,但我无法找到一个例子或解释如何做到这一点。这当然可能是因为我对搜索词的选择不当 如何将一段代码延迟一段时间?您尝试过

通过Android上的Bukkit插件,我可以使用一个简单的
runTaskLater()
方法来执行一个方法,让它执行一个操作,然后在设定的时间量后运行另一个操作,但是在iOS上,我只知道
performSelector:
方法

我正在尝试做的一个很好的例子是一些文本的淡出动画。假设我想让它先淡入,然后在达到峰值不透明度后淡出一秒,目前我不得不使用两种不同的淡入淡出方法,这似乎效率很低,但我无法找到一个例子或解释如何做到这一点。这当然可能是因为我对搜索词的选择不当


如何将一段代码延迟一段时间?

您尝试过这两种方法吗

const float delayInSeconds = 3.0;
NSString *myObject = @"Hello";

// method 1
[self performSelector:@selector(doSomethingWithObject:) withObject:myObject afterDelay:delayInSeconds];

// method 2
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [self doSomethingWithObject:myObject];
});
要回答有关标签淡入淡出的问题,请尝试以下操作:

label.alpha = 0.0f;
[UIView animateWithDuration:2.f delay:0.f options:UIViewAnimationOptionCurveEaseIn animations:^{
    [label setAlpha:1.f];
} completion:^(BOOL finished) {
    [UIView animateWithDuration:2.f delay:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        [label setAlpha:0.f];
    } completion:nil];
}];

你试过这两种方法吗

const float delayInSeconds = 3.0;
NSString *myObject = @"Hello";

// method 1
[self performSelector:@selector(doSomethingWithObject:) withObject:myObject afterDelay:delayInSeconds];

// method 2
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [self doSomethingWithObject:myObject];
});
要回答有关标签淡入淡出的问题,请尝试以下操作:

label.alpha = 0.0f;
[UIView animateWithDuration:2.f delay:0.f options:UIViewAnimationOptionCurveEaseIn animations:^{
    [label setAlpha:1.f];
} completion:^(BOOL finished) {
    [UIView animateWithDuration:2.f delay:1.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        [label setAlpha:0.f];
    } completion:nil];
}];

doctordoder的回答解释了如何为以后安排一个工作单元,无论它是一个特定的方法调用还是一个完整的闭包

但是,在以下几行之间阅读:

我正在尝试做的一个很好的例子是一个渐弱的动画 对于一些文本。说我想让它先淡入,然后淡出 在它达到峰值不透明度后的第二秒,在我有 使用两种不同的淡入淡出方法 效率低下,但我无法找到一个示例或 解释如何做到这一点。这当然可以归结为 我对搜索词的选择很差

对于这个特定的示例,您应该让CoreAnimation为您完成工作,而不是编写自己的代码。标准的观察结果适用:如果你能在你所想的水平上与系统沟通,那么就这样做,因为它可以为你想做的事情进行精确的优化。在这种情况下,工作将与其他组成更改一起省略,安全地发生在一个完全独立的线程上-在这里特别有用,否则您将不得不在主线程上完成工作-并且具有一系列有保证的定时特性

在苹果的文档中发现它是一件痛苦的事情,但自从实现以来,这意味着它提供了
beginTime
。因此,通过手动构建动画并通过
-addAnimation:forKey:
将其直接附加到
CALayer
,您可以同时附加淡入和淡出,淡出指定为一秒钟内不开始加上第一个动画的时间,您将无需进一步设计即可获得整个动画


或者,使用
UIView
+animateWithDuration:delay:选项:animations:completion:
指定适当的延迟,以通过UIKit便利方法实现相同的目标。

医生的回答解释了如何为以后安排工作单元,无论是一个特定的方法调用还是一个完整的闭包

但是,在以下几行之间阅读:

我正在尝试做的一个很好的例子是一个渐弱的动画 对于一些文本。说我想让它先淡入,然后淡出 在它达到峰值不透明度后的第二秒,在我有 使用两种不同的淡入淡出方法 效率低下,但我无法找到一个示例或 解释如何做到这一点。这当然可以归结为 我对搜索词的选择很差

对于这个特定的示例,您应该让CoreAnimation为您完成工作,而不是编写自己的代码。标准的观察结果适用:如果你能在你所想的水平上与系统沟通,那么就这样做,因为它可以为你想做的事情进行精确的优化。在这种情况下,工作将与其他组成更改一起省略,安全地发生在一个完全独立的线程上-在这里特别有用,否则您将不得不在主线程上完成工作-并且具有一系列有保证的定时特性

在苹果的文档中发现它是一件痛苦的事情,但自从实现以来,这意味着它提供了
beginTime
。因此,通过手动构建动画并通过
-addAnimation:forKey:
将其直接附加到
CALayer
,您可以同时附加淡入和淡出,淡出指定为一秒钟内不开始加上第一个动画的时间,您将无需进一步设计即可获得整个动画


或者,使用
UIView
+animateWithDuration:delay:选项:animations:completion:
指定适当的延迟,以通过UIKit便捷方法实现相同的效果。

第二个动画需要非零延迟,因为他希望在向外淡入开始前有一秒完全不透明度;在我的回答中,我建议做这两件事,但不指定其中一件作为完成处理程序,但任何一种方法都有效+因为提供代码,我向您索取了1。@Tommy我不知道您是否读过我编辑过的答案,但它使用了一个补全块,所以不需要二次延迟。@doctoroder需要一次延迟。他想要:(i)淡入;(ii)保持不变一秒钟;(iii)淡出。你给了他(i)淡入的密码;(ii)淡出。你错过了保持原状的机会。编辑:换句话说,他希望它“在达到峰值不透明度后一秒钟淡出”。文本达到峰值不透明度多少秒后,它会随着您现有的编辑开始淡出?@doctoroder我的印象是performSelector的selector参数被限制为另一个方法本身的名称,因此我目前使用该参数在淡入方法结束时触发淡出方法。至于“方法2”,我可以有把握地说,我从来没有见过专门使用这种方法。最后,我喜欢你和前男友之间的关系