线程解决方案,如 (animateWithDuration) 完成:^
Posted
技术标签:
【中文标题】线程解决方案,如 (animateWithDuration) 完成:^【英文标题】:Thread solution, like (animateWithDuration) completion:^ 【发布时间】:2017-01-03 14:19:31 【问题描述】:我有一些动画(非常非常轻微地)不同步(延迟),因为它们之前正在完成工作。
我已通过将动画 [第 3 部分] 放入虚拟“animateWithDuration”方法 (duration:0) 的完成:^ 方法来解决此问题。
它完美地工作如下:
[method]
[Part 1. create series of UIImages (using CGContext) and UIImageViews /]
[Part 2. UNNECESSARY animateWithDuration]
completion:^(BOOL finished)
[Part 3. Record NSDate /]
[Part 3. Run animations based on NSDate start time /]
[/Part 2.]
[/method]
我应该用什么来代替这个不必要的“animateWithDuration”?有没有同样简单但正确的方法?
(我不想在 [第 1 部分] 中使用线程块,这将需要我使用 __block 指针。如果可能的话,我想要一个与上述一样简单的解决方案。)
【问题讨论】:
也许只是创建一个函数,在虚拟动画中运行该代码,并在一个块中持续时间。 编写简单的代码!=编写正确的代码。您找到了解决问题的方法并且它有效,但您应该始终为它选择更好的做法,即使它需要更多的努力和时间。我知道您已经要求类似的答案,但您应该记住,您的答案是具有适当线程的解决方案,而不是这些。 不太清楚你在这里试图同步什么或你所说的“运行动画”是什么意思,但NSDate
可能是错误的工具(线程肯定是错误的工具,虽然它是这里不清楚你所说的“线程”是什么意思)。如果您尝试显示与挂钟同步的图像(例如与音频保持同步),那么您需要像 AVPlayer 或 CADisplayLink 这样的实时系统之一。可能有助于解释您要解决的问题。你可能只需要一个动画交易。
你能发布你认为应该如何编写的实际代码吗?此外,如果第 1 部分花费了很长时间并且在 main 上运行,那么您的应用甚至在动画之前就出现了问题。
【参考方案1】:
我决定使用
dispatch_group_t
and
dispatch_queue_t
我希望有一些更简单、更快捷的方法,但至少这会奏效。 感谢您的 cmets 和建议。
【讨论】:
以上是关于线程解决方案,如 (animateWithDuration) 完成:^的主要内容,如果未能解决你的问题,请参考以下文章