问题标签 [completion-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10696 浏览

iphone - 用户与 uiview 和动画完成块的交互

我有以下代码:

另外我有:

以及一个点击手势识别器集,它将处理用户在 imageView 上的点击。当第一个动画发生时,手势识别器会按我的预期触发。但是,如果我尝试在完成块的链接动画期间点击 imageView,即使我设置了适当的选项,也不会发生任何事情。

有人有什么想法吗?我用谷歌搜索并找不到答案。

0 投票
3 回答
1558 浏览

ios - 同一对象上的 2 个动画,仅最后一次显示。如何显示第一个没有嵌套完成块?

我正在使用块在同一个 UIImageView 上制作两个动画。动画不是完全背靠背,而是几乎;两者之间有一些逻辑。

  • 将 UIImageView 从视图上的一个位置动画到另一个位置。
  • 执行确定是否允许图像留在那里的逻辑
  • 如果不允许,撤消动画(UIImageView 弹回原始位置)

如果我按上述方式实现,则仅显示第二个动画(据我了解,这是正常行为)。如果我将逻辑和第二个动画块嵌套在第一个的完成块中,我会看到两个动画,但是有相当多的代码会塞进那个完成块,而且看起来很丑陋而且不合适。

在非嵌套配置中,为什么iOS要缩短前面的动画,只执行最后一个,我怎么能强制它等待第一个,然后再执行下一个?我认为它不需要阻塞主线程或在完成块中“坐下来旋转”;我只想显示所有动画。尝试为第二个动画添加延迟无济于事。

这是 CAKeyframeAnimation 的工作吗?

0 投票
4 回答
24682 浏览

ios - 使用 BOOL / 完成块停止自动反转 / 无限重复 UIView 动画

我正在设置以下UIView animateWithDuration:方法,目的是animationOn在程序的其他地方设置我的 BOOL 以取消无限循环重复。我的印象是completion每次动画循环结束时都会调用该块,但情况似乎并非如此。

completion是否曾在重复动画中调用过该块?如果没有,有没有另一种方法可以从这个方法之外停止这个动画?

0 投票
5 回答
121 浏览

iphone - 另一个方法内的方法完成等待

我怎样才能等待某种方法完成然后继续工作?

所以我需要等待 refreshStream 方法完成,然后重新加载 tableview 数据和 loadMoreDataOnBottomOfTableview (...) 的其余部分。

0 投票
1 回答
2160 浏览

ios - NSOperation completionBlock 被调用两次

我正在研究一个 NSOperation 子类,我遇到了这个非常奇怪的问题,即完成块被连续调用两次。KVO 调用看起来不错,但完成块仍然奇怪地被调用了两次。我误解了 NSOperation 吗?文档说完成块在isFinished成为时被调用,YES并且在我的代码中只发生一次:

然后我简单地设置completionBlock如下:

当它完成时,这个方法被调用(它只被调用一次,我仔细检查过)

但是,completionBlock 被调用了两次,并在控制台中打印了两次“Completed”。

以下是指示当前状态的方法:

isCancelled从来没有YES在我的测试代码中出现过,所以这不是它的原因。

我真的不明白为什么会调用 completionBlock 两次。即使从完成块内部将完成块设置为零,它有时也会被调用两次,这甚至更奇怪。

0 投票
1 回答
3297 浏览

objective-c - 如何让一个方法等到另一个方法完成它在Objective C中工作?

考虑这种情况。

我的假设:

当调用 时mainMethod,它会subMethod1先调用,然后调用subMethod2。但是,没有规则说“在完成subMethod1唯一之后,subMethod2应该被调用”。如果我使用一些延迟线或一些持续时间为 in 的动画subMethod1,则控件不会等待它完成。它只会开始下一个过程。因此,subMethod2可以在subMethod1完成其工作之前调用 。我对吗?

问题:

我怎样才能让 subMethod2 等待,直到 subMethod1 完成它的工作?

注意:我不想subMethod2放入subMethod1

0 投票
2 回答
634 浏览

ios - 动画完成块运行得太快

我试图在用户定义它时沿着路径移动飞机,类似于飞行控制中的控件。我能够绘制路径,尽管效率低下,但我无法让飞机顺利地沿着路径设置动画。

我最初尝试使用通过更改位置提供的隐式动画来沿路径移动飞机,但因为它不允许我改变动画的速度,所以飞机的行为很糟糕。

我现在正在尝试递归地使用动画块,但是完成块被调用得太快了,导致飞机只跟随绘制的路径。

这是设置代码:

此实现有效,但效果不佳。飞机跟随路径,但它是波涛汹涌的:

这就是我试图用块做的事情。它只是跳到绘制路径的末尾,而不是跟随整个事物。

我不知道我哪里出错了。我是objective-c和blocks的新手。完成块是否应该在动画开始后立即运行?这对我来说没有意义,但这是我能找到的唯一解释。


编辑:我最终使飞机成为 UIView,所以我仍然可以使用块动画。CALayer 事务根本不喜欢我的递归。

0 投票
1 回答
234 浏览

ios - 完成块

在我的 viewController 中,我创建了一个 QuestionParser 类的实例,它将启动一个 xml 解析器。我的问题是:是否有可能在程序到达 compblock 之前解析器无法完成解析,从而返回 nil 参数甚至错误?

菜单视图控制器.m

QuestionParser.m

(void) parseCategories:(myCategoryCompletion) compblock {

[自我解析类别];

}

很抱歉我没有提供所有信息,我会尽力澄清情况。在parseCategories功能中我这样做:

-(无效)parseCategories {

而且我希望完成块不会在我的解析器委托“ didFinishDocument”到达之前结束。会是这样吗?

现在,在测试这个函数时,一切正常,我的解析器委托从 xml 创建我需要的数组,然后,它到达块 compblock(categoryName,categoryID) 的末尾返回我需要的视图控制器。如果解析器需要很长时间,我会徘徊它还能工作吗?

0 投票
1 回答
3701 浏览

closures - 如何快速使用完成块?

我正在尝试使用 swift 的 SKStoreProductViewController,但我的语法出现错误,特别是我的完成块。

这是我的代码:

运行此之后,我expected "," separatorerror:NSError!),-> Void

这对我来说没有意义,因为苹果文档要求:

我究竟做错了什么?

0 投票
0 回答
373 浏览

sprite-kit - SKAction runAction:未调用完成块

我有一个用 SpriteKit 制作的游戏。我已经基于 7.1 SDK 制作了它,但现在我必须让它在 7.0 上也能工作。所以一切都很好,除了我的一个完成块没有在 7.0 上运行。这是代码:

动作是一个简单的slapReverseAction动画:

任何想法为什么completionBlock()没有在 iOS 7.0 上被调用?