问题标签 [cadisplaylink]

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 投票
1 回答
105 浏览

ios - 创建移动的新按钮时按钮停止移动

我正在创建一个游戏,当我单击一个名为 start 的按钮时,正在创建的按钮从屏幕的一侧移动到另一侧。问题是,当我在移动的按钮到达终点之前单击开始时,它会停止而不是继续(并且另一个创建的按钮开始按预期移动)。每次单击开始按钮时都应该创建一个新的 CADisplayLink 吗?如果是这样,我该怎么做?这是代码:

请帮忙。这将不胜感激。提前致谢。安东

0 投票
2 回答
2367 浏览

ios - 减慢 CADisplayLink 间隔

我将 NSTimer 用于我的 iOS 应用程序,但由于 SetNeedsDisplay,我没有得到我想要的结果。

我做了一些研究,发现 CADisplayLink 给了我想要的动画结果。遗憾的是,我无法像使用 NSTimer 那样设置计时器。

我的 CADisplayLink 调用我的函数太快了,我想给它与我使用 NSTimer 时相同的计时器(0.250 秒)。

setGaugeLevel 函数内部只有一个循环,其中包含一个 SetValue 函数,在每次迭代中包含:

有什么办法可以减慢速度以获得我想要的结果?

0 投票
4 回答
1521 浏览

ios - NSTimer 毫秒精度

我有一个需要每秒增加 500 的 9 位数字,但我决定每毫秒增加一个数字并更新显示数字的标签。我正在使用,NSTimer但正如我在周围的任何地方都读到的那样,它们并不准确,也不应该如此。我试过使用CFAbsoluteTimeGetCurrent但无法让它工作。简单地使用NSTimer产量和不准确的价值。每次用户打开应用程序时,递增不会停止,它只是将值相加并再次开始递增。有任何想法吗?

更新:

尽管大多数答案都指向正确的方向,但我解决了我的问题有点不同。感谢所有回答的人和马丁。

我使用 aCADisplayLink而不是 aNSTimer并获得了非常准确和恒定的结果。现在请注意,我说的很漂亮,因为结果并不完全准确,但是因为在我的情况下,我增加了一个 9 位数的数字,它们并不明显,并且一旦视图再次出现,我的数字就会得到纠正。

0 投票
1 回答
713 浏览

ios - CADisplayLink 失效后无法停止

我有两个UIButton,第一个按钮将触发 CustomeView - beginAnimation,另一个按钮将触发- endAnimation. 当我依次快速按下这两个按钮时begin -> end -> begin -> end -> begin -> end,我发现CADisplayLink停不下来。更何况 的- rotate射速超过 60fps,变成60 -> 120 -> 180了 ,就像CADisplaylink我的主 RunLoop 里有不止一个,那么有没有办法修复它?而且我需要CADisplaylink在view的alpha归零之前保持运行,所以我把它[self.displayLink invalidate];放在了completion block中,可能会导致这个问题?</p>

0 投票
1 回答
202 浏览

objective-c - UIView 包含 NSTimer - 不释放

我正在使用一个 UIView 子类,它有一些 CAAnimation 将在另一个类的 performegue 之后执行。在 UIView 类中,我使用 CADisplayLink 和 NSTimer 来增加动画中使用的 CATextLayer。每当我在运行动画后回到之前的视图控制器,它就会继续在后台运行。当我转到正在播放动画的视图控制器时,它显示我的计数不正确。我的代码有什么问题吗?

在 .h 文件中,

在.m文件中,//下面的代码在方法内部被调用

在 sum1 方法中,

为了实现缓出功能,我使用了要求中提到的 75% 的快速增量和 25% 的慢速增量。

即使我使计时器无效,此计时器仍会继续运行,从 dealloc() 方法中的超级视图中删除视图。请帮我解决这个问题。

0 投票
2 回答
1170 浏览

swift - 如何创建圆形物体进入和分离厚物质的效果

根据下图(我为圆形和平面使用了不同的颜色,以便可以看到它们,但最终颜色会相同),使用 Swift 和 Spritekit,我正在尝试创建圆形物体进入的效果一种粘稠的物质(不一定是粘性的)并与粘稠的物质分离。基本上,当圆形物体分离时,它会在形成圆形时从平面上拉开。我想使用图像动画帧,但由于对象是带有物理体的 SKSpriteNode,这将使对象与动画的碰撞计时变得非常困难。另一种方法是使用 CAAnimation,但我不知道如何将其与具有物理体的 SKSpriteNodes 结合使用。如何使用上述任何一种方法或不同的方法来创建这种分离效果?

在此处输入图像描述

更新

下图显示了当圆形物体进入厚物质直到被淹没时,厚物质表面的变化。

在此处输入图像描述

0 投票
1 回答
1611 浏览

ios - CADisplayLink 可以在应用程序在后台运行时运行吗?

我在我的应用程序中使用 CADisplayLink 作为计时器。我正在使用 CADisplayLink,因为我的应用非常依赖 CADisplayLink 的准确性/精度。就我而言,NSTimer 不是合适的替代品。

问题是偶尔,我需要 CADisplayLink 触发并调用它的选择器,而应用程序在后台。这甚至可能吗?我了解 CADisplayLink 与应用程序 UI 的刷新率相关联。这是否意味着,当我的应用程序在后台时,没有 UI,因此在这种情况下不可能使用 CADisplayLink?或者,是否可以通过更改我添加到的运行循环或更改forMode参数来以某种方式使用 CADisplayLink?或者也许使用一些 GCD 技巧/解决方法?

注意:我的应用正在使用 AudioPlayer,因此我启用了后台功能。我可以在后台运行其他代码。只是为了测试,我用 NSTimer 切换了我的 CADisplayLink,然后 NSTimer 触发并按照我的意愿调用它的选择器。我只是无法启动 CADisplayLink,也找不到任何关于在后台使用它的可能性的权威文档

这是与我的显示链接有关的当前代码:

0 投票
3 回答
10547 浏览

swift - 在 Swift 自定义动画中正确处理/清理 CADisplayLink 等?

考虑使用这个简单的同步动画CADisplayLink

似乎有各种各样的问题。

在 (A:) 处,即使link不为空,也可能无法将其从运行循环中移除。(例如,有人可能已将其初始化为link = link:CADisplayLink()- 尝试崩溃。)

其次在 (B:) 它似乎是一团糟......肯定有更好(和更 Swift)的方式,如果它是 nil 即使时间刚刚过期怎么办?

最后在(C :) 如果你想打破动画......我很沮丧,不知道什么是最好的。

实际上,A: 和 B: 处的代码应该是同一个调用,是一种清理调用。

0 投票
1 回答
328 浏览

ios - 应用程序后台处理后 OpenGL 渲染未恢复

我正在使用 OpenGL ES 在 CADisplayLink 上渲染场景:

如果我后台应用程序并转到 Spring Board,当我恢复应用程序时,渲染会继续。

但是,如果我将应用程序置于后台,打开另一个应用程序(例如日历),当我将应用程序带回前台时,屏幕就不再呈现了。如果我使用 Xcode 暂停执行,或在渲染管道中的断点处停止,DisplayLink 仍在运行并执行我的 OpenGL 渲染代码。

任何想法为什么?

0 投票
1 回答
432 浏览

ios - 时间戳与 CADisplayLink 的 1/60

我目前正在使用 CADisplayLink 来执行一些特定的减速动画。我将 frameInterval 设置为 1。我看到一些开源项目只使用 1/60 秒作为帧更新之间的时间增量。我发现还有一个可用的时间戳方法,但是它是 mach 格式。我应该使用哪一个,我可以假设所有 iPhone 的刷新率都是 60hz,因此可以安全使用 1/60?如果我使用时间戳方法,我应该如何将其转换为秒?

提前谢谢了。